{"_id":"newsmonger","_rev":"29-7d88d54df76bf5d10a01f0f1af657096","name":"newsmonger","dist-tags":{"latest":"0.5.0","beta":"0.5.0-rc.1"},"versions":{"0.1.0":{"name":"newsmonger","version":"0.1.0","author":{"name":"Small Tale Inc."},"license":"MIT","_id":"newsmonger@0.1.0","maintainers":[{"name":"bwestphal","email":"brian.westphal@bleugris.com"}],"homepage":"https://github.com/Small-Tale/newsmonger#readme","bugs":{"url":"https://github.com/Small-Tale/newsmonger/issues"},"bin":{"newsmonger":"dist/cli.js"},"dist":{"shasum":"d247c04809cd989087649f94d580e64ca3da28cb","tarball":"https://registry.npmjs.org/newsmonger/-/newsmonger-0.1.0.tgz","fileCount":10,"integrity":"sha512-e0wuN98TYF26Y/hGvzuEL8VN18FvADYWpiyNE1drndLQs2eZzrVr5qj1+lWe8FT/otrq3kUYL8gsL0ukZgeEFg==","signatures":[{"sig":"MEUCIEdghKL6xzLbL2Gv+S7cZ2Qq/TNNU1XIpGMR8Him/UURAiEA4eYfnfeqwm0sjnZ2MaYPd5TLM0WdukJgM/aAv3n7RBo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1130255},"type":"module","engines":{"node":">=22.5"},"gitHead":"a4c22b5c877c6c3807c615ba0d8bef46318fb7d4","scripts":{"dev":"npm run build:client:dev && tsx src/cli.ts","lint":"eslint src/ tests/","test":"vitest run --coverage","build":"tsup","clean":"rm -rf dist node_modules/.cache","tauri":"tauri","release":"bash scripts/release.sh","test:all":"bash scripts/test-all.sh","test:e2e":"npx playwright test","tauri:dev":"npm run build:client && tauri dev","typecheck":"tsc --noEmit","commit:msg":"gitgist --staged --commit-message","dev:server":"npm run build:client:dev && tsx src/cli.ts --no-open --strict-port","test:watch":"vitest","tauri:build":"tauri build","build:client":"node -e \"require('fs').mkdirSync('dist/client',{recursive:true})\" && node -e \"for (const f of ['favicon.svg','logo-full-bleed.svg','wordmark-light.svg','wordmark-dark.svg']) require('fs').copyFileSync('assets/'+f,'dist/client/'+f)\" && npx esbuild src/client/app.tsx --bundle --format=iife --outfile=dist/client/app.global.js --target=es2020 --sourcemap --jsx=automatic --jsx-import-source=kerfjs --define:__KERF_DEV__=false && npx sass src/client/styles.scss dist/client/styles.css --style compressed --no-source-map","release:beta":"bash scripts/release.sh --beta","prepublishOnly":"npm run build && npm run build:client","build:client:dev":"node -e \"require('fs').mkdirSync('dist/client',{recursive:true})\" && node -e \"for (const f of ['favicon.svg','logo-full-bleed.svg','wordmark-light.svg','wordmark-dark.svg']) require('fs').copyFileSync('assets/'+f,'dist/client/'+f)\" && npx esbuild src/client/app.tsx --bundle --format=iife --outfile=dist/client/app.global.js --target=es2020 --sourcemap --jsx=automatic --jsx-import-source=kerfjs --define:__KERF_DEV__=true && npx sass src/client/styles.scss dist/client/styles.css --style compressed --no-source-map","release:beta:auto":"bash scripts/release-beta-auto.sh","tauri:build:local":"bash scripts/tauri-build-local.sh"},"_npmUser":{"name":"bwestphal","email":"brian.westphal@bleugris.com"},"overrides":{"esbuild":"^0.28.1"},"repository":{"url":"git+https://github.com/Small-Tale/newsmonger.git","type":"git"},"_npmVersion":"11.11.0","description":"Topic-based news tracker: enter topics, and on a configurable interval the app asks Claude (with web search) for new developments, deduplicating against previously seen stories.","directories":{},"_nodeVersion":"22.14.0","dependencies":{"zod":"^4.4.3","hono":"^4.12.25","kerfjs":"^4.0.0","openai":"^6.49.0","@anthropic-ai/sdk":"^0.113.0","@hono/node-server":"^2.0.5"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^12.0.0","tsx":"^4.22.4","sass":"^1.97.3","tsup":"^8.5.1","eslint":"^10.5.0","vitest":"^4.1.9","esbuild":"^0.28.1","gitgist":"^1.2.0","@eslint/js":"^10.0.1","typescript":"^5.9.3","@types/node":"^25.9.3","@tauri-apps/cli":"^2.11.2","@playwright/test":"^1.61.0","typescript-eslint":"^8.61.1","@vitest/coverage-v8":"^4.1.9","eslint-plugin-tsdoc":"^0.5.2","@axe-core/playwright":"^4.12.1","eslint-plugin-kerfjs":"^4.0.0","eslint-plugin-import-x":"^4.16.2","eslint-plugin-simple-import-sort":"^12.1.1"},"_npmOperationalInternal":{"tmp":"tmp/newsmonger_0.1.0_1785399702512_0.45104285100497954","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.3":{"name":"newsmonger","version":"0.2.0-beta.3","author":{"name":"Small Tale Inc."},"license":"MIT","_id":"newsmonger@0.2.0-beta.3","maintainers":[{"name":"bwestphal","email":"brian.westphal@bleugris.com"}],"homepage":"https://github.com/Small-Tale/newsmonger#readme","bugs":{"url":"https://github.com/Small-Tale/newsmonger/issues"},"bin":{"newsmonger":"dist/cli.js"},"dist":{"shasum":"8001ee9b3d3457415a81bc3f1a2f9679084f1abd","tarball":"https://registry.npmjs.org/newsmonger/-/newsmonger-0.2.0-beta.3.tgz","fileCount":10,"integrity":"sha512-REgukEQ1OR0DPoJwMfk19MLKQ9xKGDImxFHA1Mze+T+YEcput58Vobl77e5EJZ8z5UNLgZnMVTstqYoPyWXzkg==","signatures":[{"sig":"MEUCIBGzZsOrYe1qdQbYXee2BtacyoySka02css01rxFFjX1AiEAh1QMpb/rtryDMup5XDgMjVn1Ci/Sm85KLE8F/IvQ6/g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/newsmonger@0.2.0-beta.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1135471},"type":"module","engines":{"node":">=22.5"},"gitHead":"d4b54f8325a89b05239e07172b864cb035fcfa77","scripts":{"dev":"npm run build:client:dev && tsx src/cli.ts","lint":"eslint src/ tests/","test":"vitest run --coverage","build":"tsup","clean":"rm -rf dist node_modules/.cache","tauri":"tauri","release":"bash scripts/release.sh","test:all":"bash scripts/test-all.sh","test:e2e":"npx playwright test","tauri:dev":"npm run build:client && tauri dev","typecheck":"tsc --noEmit","commit:msg":"gitgist --staged --commit-message","dev:server":"npm run build:client:dev && tsx src/cli.ts --no-open --strict-port","gates:rust":"bash scripts/gates-rust.sh","test:watch":"vitest","tauri:build":"tauri build","build:client":"node -e \"require('fs').mkdirSync('dist/client',{recursive:true})\" && node -e \"for (const f of ['favicon.svg','logo-full-bleed.svg','wordmark-light.svg','wordmark-dark.svg']) require('fs').copyFileSync('assets/'+f,'dist/client/'+f)\" && npx esbuild src/client/app.tsx --bundle --format=iife --outfile=dist/client/app.global.js --target=es2020 --sourcemap --jsx=automatic --jsx-import-source=kerfjs --define:__KERF_DEV__=false && npx sass src/client/styles.scss dist/client/styles.css --style compressed --no-source-map","release:beta":"bash scripts/release.sh --beta","prepublishOnly":"npm run build && npm run build:client","build:client:dev":"node -e \"require('fs').mkdirSync('dist/client',{recursive:true})\" && node -e \"for (const f of ['favicon.svg','logo-full-bleed.svg','wordmark-light.svg','wordmark-dark.svg']) require('fs').copyFileSync('assets/'+f,'dist/client/'+f)\" && npx esbuild src/client/app.tsx --bundle --format=iife --outfile=dist/client/app.global.js --target=es2020 --sourcemap --jsx=automatic --jsx-import-source=kerfjs --define:__KERF_DEV__=true && npx sass src/client/styles.scss dist/client/styles.css --style compressed --no-source-map","release:beta:auto":"bash scripts/release-beta-auto.sh","tauri:build:local":"bash scripts/tauri-build-local.sh"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8c3cb2ab-d327-453d-b74b-c9a4e39b3b62"}},"overrides":{"esbuild":"^0.28.1"},"repository":{"url":"git+https://github.com/Small-Tale/newsmonger.git","type":"git"},"_npmVersion":"11.19.0","description":"Topic-based news tracker: enter topics, and on a configurable interval the app asks Claude (with web search) for new developments, deduplicating against previously seen stories.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"^4.4.3","hono":"^4.12.25","kerfjs":"^4.0.0","openai":"^6.49.0","@anthropic-ai/sdk":"^0.113.0","@hono/node-server":"^2.0.5"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"c8":"^12.0.0","tsx":"^4.22.4","sass":"^1.97.3","tsup":"^8.5.1","eslint":"^10.5.0","vitest":"^4.1.9","esbuild":"^0.28.1","gitgist":"^1.2.0","@eslint/js":"^10.0.1","typescript":"^5.9.3","@types/node":"^25.9.3","@tauri-apps/cli":"^2.11.2","@playwright/test":"^1.61.0","typescript-eslint":"^8.61.1","@vitest/coverage-v8":"^4.1.9","eslint-plugin-tsdoc":"^0.5.2","@axe-core/playwright":"^4.12.1","eslint-plugin-kerfjs":"^4.0.0","eslint-plugin-import-x":"^4.16.2","eslint-plugin-simple-import-sort":"^12.1.1"},"_npmOperationalInternal":{"tmp":"tmp/newsmonger_0.2.0-beta.3_1785415807709_0.6029963986917299","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.4":{"name":"newsmonger","version":"0.2.0-beta.4","author":{"name":"Small Tale Inc."},"license":"MIT","_id":"newsmonger@0.2.0-beta.4","maintainers":[{"name":"bwestphal","email":"brian.westphal@bleugris.com"}],"homepage":"https://github.com/Small-Tale/newsmonger#readme","bugs":{"url":"https://github.com/Small-Tale/newsmonger/issues"},"bin":{"newsmonger":"dist/cli.js"},"dist":{"shasum":"3c54f34845b550f86d216f71ea5b482965dc50b1","tarball":"https://registry.npmjs.org/newsmonger/-/newsmonger-0.2.0-beta.4.tgz","fileCount":10,"integrity":"sha512-74nlvHLGOOWbno+8GXPS2CMkOfqF9/XpF8efkimdHlkg9Ys9LIZ6/ObBHCR/jQo3FTNdXWQfMaQNwgaU/Yk9eA==","signatures":[{"sig":"MEQCID5RLmrODrpV782CLJu866LTFBEBlVSOK68L3o8xs8dTAiBwnbtoklznnDeG2EcCm/OuhnpeJOQVRu3Wvzmze7VeeA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/newsmonger@0.2.0-beta.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1144200},"type":"module","engines":{"node":">=22.5"},"gitHead":"fd213c07163b3def8a3646e52276f060bcb1b9b3","scripts":{"dev":"npm run build:client:dev && tsx src/cli.ts","lint":"eslint src/ tests/","test":"vitest run --coverage","build":"tsup","clean":"rm -rf dist node_modules/.cache","tauri":"tauri","release":"bash scripts/release.sh","test:all":"bash scripts/test-all.sh","test:e2e":"npx playwright test","tauri:dev":"npm run build:client && tauri dev","typecheck":"tsc --noEmit","commit:msg":"gitgist --staged --commit-message","dev:server":"npm run build:client:dev && tsx src/cli.ts --no-open --strict-port","gates:rust":"bash scripts/gates-rust.sh","test:watch":"vitest","tauri:build":"tauri build","build:client":"node -e \"require('fs').mkdirSync('dist/client',{recursive:true})\" && node -e \"for (const f of ['favicon.svg','logo-full-bleed.svg','wordmark-light.svg','wordmark-dark.svg']) require('fs').copyFileSync('assets/'+f,'dist/client/'+f)\" && npx esbuild src/client/app.tsx --bundle --format=iife --outfile=dist/client/app.global.js --target=es2020 --sourcemap --jsx=automatic --jsx-import-source=kerfjs --define:__KERF_DEV__=false && npx sass src/client/styles.scss dist/client/styles.css --style compressed --no-source-map","release:beta":"bash scripts/release.sh --beta","prepublishOnly":"npm run build && npm run build:client","build:client:dev":"node -e \"require('fs').mkdirSync('dist/client',{recursive:true})\" && node -e \"for (const f of ['favicon.svg','logo-full-bleed.svg','wordmark-light.svg','wordmark-dark.svg']) require('fs').copyFileSync('assets/'+f,'dist/client/'+f)\" && npx esbuild src/client/app.tsx --bundle --format=iife --outfile=dist/client/app.global.js --target=es2020 --sourcemap --jsx=automatic --jsx-import-source=kerfjs --define:__KERF_DEV__=true && npx sass src/client/styles.scss dist/client/styles.css --style compressed --no-source-map","release:beta:auto":"bash scripts/release-beta-auto.sh","tauri:build:local":"bash scripts/tauri-build-local.sh"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8c3cb2ab-d327-453d-b74b-c9a4e39b3b62"}},"overrides":{"esbuild":"^0.28.1"},"repository":{"url":"git+https://github.com/Small-Tale/newsmonger.git","type":"git"},"_npmVersion":"11.19.0","description":"Topic-based news tracker: enter topics, and on a configurable interval the app asks Claude (with web search) for new developments, deduplicating against previously seen stories.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"^4.4.3","hono":"^4.12.25","kerfjs":"^4.0.0","openai":"^6.49.0","@anthropic-ai/sdk":"^0.113.0","@hono/node-server":"^2.0.5"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"c8":"^12.0.0","tsx":"^4.22.4","sass":"^1.97.3","tsup":"^8.5.1","eslint":"^10.5.0","vitest":"^4.1.9","esbuild":"^0.28.1","gitgist":"^1.2.0","@eslint/js":"^10.0.1","typescript":"^5.9.3","@types/node":"^25.9.3","domotion-svg":"^0.21.1","@tauri-apps/cli":"^2.11.2","@playwright/test":"^1.61.0","typescript-eslint":"^8.61.1","@vitest/coverage-v8":"^4.1.9","eslint-plugin-tsdoc":"^0.5.2","@axe-core/playwright":"^4.12.1","eslint-plugin-kerfjs":"^4.0.0","eslint-plugin-import-x":"^4.16.2","eslint-plugin-simple-import-sort":"^12.1.1"},"_npmOperationalInternal":{"tmp":"tmp/newsmonger_0.2.0-beta.4_1785452536192_0.4461751441494348","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.5":{"name":"newsmonger","version":"0.2.0-beta.5","author":{"name":"Small Tale Inc."},"license":"MIT","_id":"newsmonger@0.2.0-beta.5","maintainers":[{"name":"bwestphal","email":"brian.westphal@bleugris.com"}],"homepage":"https://github.com/Small-Tale/newsmonger#readme","bugs":{"url":"https://github.com/Small-Tale/newsmonger/issues"},"bin":{"newsmonger":"dist/cli.js"},"dist":{"shasum":"c68746ccf82ce6ef9d052f0fdf72f150aad3d97f","tarball":"https://registry.npmjs.org/newsmonger/-/newsmonger-0.2.0-beta.5.tgz","fileCount":10,"integrity":"sha512-uXor50XZcnHw0vE58FhjB+ITRFfv3JlheoDzC0+DcfpHNeznZ16g5tiEOtpNAW1W84cIaEfxJ/5fgogdpVHI2Q==","signatures":[{"sig":"MEUCIHrwmLKHAXuCEy6ItFwbv3Mh3Am5ttaD9Iwv333VD8C/AiEAm1wIq8V2E4YEgiZwwfnGIy+h/9LLNt1yAp83cfb4JQQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/newsmonger@0.2.0-beta.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1144567},"type":"module","engines":{"node":">=22.5"},"gitHead":"37da8b365f9e343b2eedf1a5a0c063e032349b35","scripts":{"dev":"npm run build:client:dev && tsx src/cli.ts","lint":"eslint src/ tests/","test":"vitest run --coverage","build":"tsup","clean":"rm -rf dist node_modules/.cache","tauri":"tauri","release":"bash scripts/release.sh","test:all":"bash scripts/test-all.sh","test:e2e":"npx playwright test","tauri:dev":"npm run build:client && tauri dev","typecheck":"tsc --noEmit","commit:msg":"gitgist --staged --commit-message","dev:server":"npm run build:client:dev && tsx src/cli.ts --no-open --strict-port","gates:rust":"bash scripts/gates-rust.sh","test:watch":"vitest","tauri:build":"tauri build","build:client":"node -e \"require('fs').mkdirSync('dist/client',{recursive:true})\" && node -e \"for (const f of ['favicon.svg','logo-full-bleed.svg','wordmark-light.svg','wordmark-dark.svg']) require('fs').copyFileSync('assets/'+f,'dist/client/'+f)\" && npx esbuild src/client/app.tsx --bundle --format=iife --outfile=dist/client/app.global.js --target=es2020 --sourcemap --jsx=automatic --jsx-import-source=kerfjs --define:__KERF_DEV__=false && npx sass src/client/styles.scss dist/client/styles.css --style compressed --no-source-map","demo:capture":"npm run build:client && tsx scripts/demo/capture-demo.ts","release:beta":"bash scripts/release.sh --beta","prepublishOnly":"npm run build && npm run build:client","build:client:dev":"node -e \"require('fs').mkdirSync('dist/client',{recursive:true})\" && node -e \"for (const f of ['favicon.svg','logo-full-bleed.svg','wordmark-light.svg','wordmark-dark.svg']) require('fs').copyFileSync('assets/'+f,'dist/client/'+f)\" && npx esbuild src/client/app.tsx --bundle --format=iife --outfile=dist/client/app.global.js --target=es2020 --sourcemap --jsx=automatic --jsx-import-source=kerfjs --define:__KERF_DEV__=true && npx sass src/client/styles.scss dist/client/styles.css --style compressed --no-source-map","release:beta:auto":"bash scripts/release-beta-auto.sh","tauri:build:local":"bash scripts/tauri-build-local.sh"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8c3cb2ab-d327-453d-b74b-c9a4e39b3b62"}},"overrides":{"esbuild":"^0.28.1"},"repository":{"url":"git+https://github.com/Small-Tale/newsmonger.git","type":"git"},"_npmVersion":"11.19.0","description":"Topic-based news tracker: enter topics, and on a configurable interval the app asks Claude (with web search) for new developments, deduplicating against previously seen stories.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"^4.4.3","hono":"^4.12.25","kerfjs":"^4.0.0","openai":"^6.49.0","@anthropic-ai/sdk":"^0.113.0","@hono/node-server":"^2.0.5"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"c8":"^12.0.0","tsx":"^4.22.4","sass":"^1.97.3","tsup":"^8.5.1","eslint":"^10.5.0","vitest":"^4.1.9","esbuild":"^0.28.1","gitgist":"^1.2.0","@eslint/js":"^10.0.1","typescript":"^5.9.3","@types/node":"^25.9.3","domotion-svg":"^0.21.1","@tauri-apps/cli":"^2.11.2","@playwright/test":"^1.61.0","typescript-eslint":"^8.61.1","@vitest/coverage-v8":"^4.1.9","eslint-plugin-tsdoc":"^0.5.2","@axe-core/playwright":"^4.12.1","eslint-plugin-kerfjs":"^4.0.0","eslint-plugin-import-x":"^4.16.2","eslint-plugin-simple-import-sort":"^12.1.1"},"_npmOperationalInternal":{"tmp":"tmp/newsmonger_0.2.0-beta.5_1785457140817_0.6572961232043408","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.6":{"name":"newsmonger","version":"0.2.0-beta.6","author":{"name":"Small Tale Inc."},"license":"MIT","_id":"newsmonger@0.2.0-beta.6","maintainers":[{"name":"bwestphal","email":"brian.westphal@bleugris.com"}],"homepage":"https://github.com/Small-Tale/newsmonger#readme","bugs":{"url":"https://github.com/Small-Tale/newsmonger/issues"},"bin":{"newsmonger":"dist/cli.js"},"dist":{"shasum":"e7dee6ff499d3e48374692e82ddac4ad6bba1ee1","tarball":"https://registry.npmjs.org/newsmonger/-/newsmonger-0.2.0-beta.6.tgz","fileCount":10,"integrity":"sha512-upDJQHcWtWlytdndpE1vSEYw1kERHZ/n+5L+qkKbfScR0ydQ5JVMrtl/skFo/VagMikqHEyu8RQO4eCM7NmRCg==","signatures":[{"sig":"MEQCIGspO2xOAsF13RzQHEpsgr8Ijx7fRbJclsJ2VvYnTGkjAiAPzyP0Rr4nGIvgQ2IdlR8A61SUNP+/YxBScDRdDm2A8A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/newsmonger@0.2.0-beta.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1173792},"type":"module","engines":{"node":">=22.5"},"gitHead":"6bb2fc1f26f0c991aec38e37529d02d32a892389","scripts":{"dev":"npm run build:client:dev && tsx src/cli.ts","lint":"eslint src/ tests/","test":"vitest run --coverage","build":"tsup","clean":"rm -rf dist node_modules/.cache","tauri":"tauri","release":"bash scripts/release.sh","test:all":"bash scripts/test-all.sh","test:e2e":"npx playwright test","tauri:dev":"npm run build:client && tauri dev","typecheck":"tsc --noEmit","commit:msg":"gitgist --staged --commit-message","dev:server":"npm run build:client:dev && tsx src/cli.ts --no-open --strict-port","gates:rust":"bash scripts/gates-rust.sh","test:watch":"vitest","demo:stills":"npm run build:client && tsx scripts/demo/capture-stills.ts","tauri:build":"tauri build","build:client":"node -e \"require('fs').mkdirSync('dist/client',{recursive:true})\" && node -e \"for (const f of ['favicon.svg','logo-full-bleed.svg','wordmark-light.svg','wordmark-dark.svg']) require('fs').copyFileSync('assets/'+f,'dist/client/'+f)\" && npx esbuild src/client/app.tsx --bundle --format=iife --outfile=dist/client/app.global.js --target=es2020 --sourcemap --jsx=automatic --jsx-import-source=kerfjs --define:__KERF_DEV__=false && npx sass src/client/styles.scss dist/client/styles.css --style compressed --no-source-map","demo:capture":"npm run build:client && tsx scripts/demo/capture-demo.ts","release:beta":"bash scripts/release.sh --beta","prepublishOnly":"npm run build && npm run build:client","build:client:dev":"node -e \"require('fs').mkdirSync('dist/client',{recursive:true})\" && node -e \"for (const f of ['favicon.svg','logo-full-bleed.svg','wordmark-light.svg','wordmark-dark.svg']) require('fs').copyFileSync('assets/'+f,'dist/client/'+f)\" && npx esbuild src/client/app.tsx --bundle --format=iife --outfile=dist/client/app.global.js --target=es2020 --sourcemap --jsx=automatic --jsx-import-source=kerfjs --define:__KERF_DEV__=true && npx sass src/client/styles.scss dist/client/styles.css --style compressed --no-source-map","release:beta:auto":"bash scripts/release-beta-auto.sh","tauri:build:local":"bash scripts/tauri-build-local.sh"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8c3cb2ab-d327-453d-b74b-c9a4e39b3b62"}},"overrides":{"esbuild":"^0.28.1"},"repository":{"url":"git+https://github.com/Small-Tale/newsmonger.git","type":"git"},"_npmVersion":"11.19.0","description":"Topic-based news tracker: enter topics, and on a configurable interval the app asks Claude (with web search) for new developments, deduplicating against previously seen stories.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"^4.4.3","hono":"^4.12.25","kerfjs":"^4.1.0","openai":"^6.49.0","@anthropic-ai/sdk":"^0.113.0","@hono/node-server":"^2.0.5"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"c8":"^12.0.0","tsx":"^4.22.4","sass":"^1.97.3","tsup":"^8.5.1","eslint":"^10.5.0","vitest":"^4.1.9","esbuild":"^0.28.1","gitgist":"^1.2.0","@eslint/js":"^10.0.1","typescript":"^5.9.3","@types/node":"^25.9.3","domotion-svg":"^0.21.1","@tauri-apps/cli":"^2.11.2","@playwright/test":"^1.61.0","typescript-eslint":"^8.61.1","@vitest/coverage-v8":"^4.1.9","eslint-plugin-tsdoc":"^0.5.2","@axe-core/playwright":"^4.12.1","eslint-plugin-kerfjs":"^4.1.0","eslint-plugin-import-x":"^4.16.2","eslint-plugin-simple-import-sort":"^12.1.1"},"_npmOperationalInternal":{"tmp":"tmp/newsmonger_0.2.0-beta.6_1785496929691_0.21385709082064142","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.7":{"name":"newsmonger","version":"0.2.0-beta.7","author":{"name":"Small Tale Inc."},"license":"MIT","_id":"newsmonger@0.2.0-beta.7","maintainers":[{"name":"bwestphal","email":"brian.westphal@bleugris.com"}],"homepage":"https://github.com/Small-Tale/newsmonger#readme","bugs":{"url":"https://github.com/Small-Tale/newsmonger/issues"},"bin":{"newsmonger":"dist/cli.js"},"dist":{"shasum":"0d492e933ac0584fcbc81607c66c9b194ca1f4f7","tarball":"https://registry.npmjs.org/newsmonger/-/newsmonger-0.2.0-beta.7.tgz","fileCount":10,"integrity":"sha512-62Z2kwNM/zYutxWhkNPNkaAuUrMHk/8uN5YKieMXtL5yZmDDWv4fqdFdGfwTnDURVlVxyicxcvxGD5b3a34vpA==","signatures":[{"sig":"MEUCIQC3C4baOwv3OMCWiyg2Hn9Qwb/pzn+2lB6pY+745WSDugIgYtEOO0fIPcopmWhxj1tjl9wWQ1/TK9f/uFbMsZB0dx0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/newsmonger@0.2.0-beta.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1173792},"type":"module","engines":{"node":">=22.5"},"gitHead":"529438f3784fefffece754876d765bcd3be71fb5","scripts":{"dev":"npm run build:client:dev && tsx src/cli.ts","lint":"eslint src/ tests/","test":"vitest run --coverage","build":"tsup","clean":"rm -rf dist node_modules/.cache","tauri":"tauri","release":"bash scripts/release.sh","test:all":"bash scripts/test-all.sh","test:e2e":"npx playwright test","tauri:dev":"npm run build:client && tauri dev","typecheck":"tsc --noEmit","commit:msg":"gitgist --staged --commit-message","dev:server":"npm run build:client:dev && tsx src/cli.ts --no-open --strict-port","gates:rust":"bash scripts/gates-rust.sh","test:watch":"vitest","demo:stills":"npm run build:client && tsx scripts/demo/capture-stills.ts","tauri:build":"tauri build","build:client":"node -e \"require('fs').mkdirSync('dist/client',{recursive:true})\" && node -e \"for (const f of ['favicon.svg','logo-full-bleed.svg','wordmark-light.svg','wordmark-dark.svg']) require('fs').copyFileSync('assets/'+f,'dist/client/'+f)\" && npx esbuild src/client/app.tsx --bundle --format=iife --outfile=dist/client/app.global.js --target=es2020 --sourcemap --jsx=automatic --jsx-import-source=kerfjs --define:__KERF_DEV__=false && npx sass src/client/styles.scss dist/client/styles.css --style compressed --no-source-map","demo:capture":"npm run build:client && tsx scripts/demo/capture-demo.ts","release:beta":"bash scripts/release.sh --beta","prepublishOnly":"npm run build && npm run build:client","build:client:dev":"node -e \"require('fs').mkdirSync('dist/client',{recursive:true})\" && node -e \"for (const f of ['favicon.svg','logo-full-bleed.svg','wordmark-light.svg','wordmark-dark.svg']) require('fs').copyFileSync('assets/'+f,'dist/client/'+f)\" && npx esbuild src/client/app.tsx --bundle --format=iife --outfile=dist/client/app.global.js --target=es2020 --sourcemap --jsx=automatic --jsx-import-source=kerfjs --define:__KERF_DEV__=true && npx sass src/client/styles.scss dist/client/styles.css --style compressed --no-source-map","release:beta:auto":"bash scripts/release-beta-auto.sh","tauri:build:local":"bash scripts/tauri-build-local.sh"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8c3cb2ab-d327-453d-b74b-c9a4e39b3b62"}},"overrides":{"esbuild":"^0.28.1"},"repository":{"url":"git+https://github.com/Small-Tale/newsmonger.git","type":"git"},"_npmVersion":"11.19.0","description":"Topic-based news tracker: enter topics, and on a configurable interval the app asks Claude (with web search) for new developments, deduplicating against previously seen stories.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"^4.4.3","hono":"^4.12.25","kerfjs":"^4.1.0","openai":"^6.49.0","@anthropic-ai/sdk":"^0.113.0","@hono/node-server":"^2.0.5"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"c8":"^12.0.0","tsx":"^4.22.4","sass":"^1.97.3","tsup":"^8.5.1","eslint":"^10.5.0","vitest":"^4.1.9","esbuild":"^0.28.1","gitgist":"^1.2.0","@eslint/js":"^10.0.1","typescript":"^5.9.3","@types/node":"^25.9.3","domotion-svg":"^0.21.1","@tauri-apps/cli":"^2.11.2","@playwright/test":"^1.61.0","typescript-eslint":"^8.61.1","@vitest/coverage-v8":"^4.1.9","eslint-plugin-tsdoc":"^0.5.2","@axe-core/playwright":"^4.12.1","eslint-plugin-kerfjs":"^4.1.0","eslint-plugin-import-x":"^4.16.2","eslint-plugin-simple-import-sort":"^12.1.1"},"_npmOperationalInternal":{"tmp":"tmp/newsmonger_0.2.0-beta.7_1785536784830_0.8331973429921522","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.8":{"name":"newsmonger","version":"0.2.0-beta.8","author":{"name":"Small Tale Inc."},"license":"MIT","_id":"newsmonger@0.2.0-beta.8","maintainers":[{"name":"bwestphal","email":"brian.westphal@bleugris.com"}],"homepage":"https://github.com/Small-Tale/newsmonger#readme","bugs":{"url":"https://github.com/Small-Tale/newsmonger/issues"},"bin":{"newsmonger":"dist/cli.js"},"dist":{"shasum":"ba377db9f217c216be21eeda3c6c4697c27281c4","tarball":"https://registry.npmjs.org/newsmonger/-/newsmonger-0.2.0-beta.8.tgz","fileCount":10,"integrity":"sha512-j9uK772VnNz3YvF0VCRxoxmwGS/sELLlV4L8NLthM4lse9lDb+FapUO4hJmNozZjzF+HJt59aznvlFB9aEub2Q==","signatures":[{"sig":"MEUCIFv9vp3aekGLthjMbnKz8wOQQlByrS3jTa9prHYuJphwAiEAjiww7S9BWg4E8fmCQUlIUkJDKRrXkQYF1HTv0yYPIuI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/newsmonger@0.2.0-beta.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1174725},"type":"module","engines":{"node":">=22.5"},"gitHead":"25cb8654d4faf0d35e2d415b3620fff85127c407","scripts":{"dev":"npm run build:client:dev && tsx src/cli.ts","lint":"eslint src/ tests/","test":"vitest run --coverage","build":"tsup","clean":"rm -rf dist node_modules/.cache","tauri":"tauri","release":"bash scripts/release.sh","test:all":"bash scripts/test-all.sh","test:e2e":"npx playwright test","tauri:dev":"npm run build:client && tauri dev","typecheck":"tsc --noEmit","commit:msg":"gitgist --staged --commit-message","dev:server":"npm run build:client:dev && tsx src/cli.ts --no-open --strict-port","gates:rust":"bash scripts/gates-rust.sh","test:watch":"vitest","demo:stills":"npm run build:client && tsx scripts/demo/capture-stills.ts","tauri:build":"tauri build","build:client":"node -e \"require('fs').mkdirSync('dist/client',{recursive:true})\" && node -e \"for (const f of ['favicon.svg','logo-full-bleed.svg','wordmark-light.svg','wordmark-dark.svg']) require('fs').copyFileSync('assets/'+f,'dist/client/'+f)\" && npx esbuild src/client/app.tsx --bundle --format=iife --outfile=dist/client/app.global.js --target=es2020 --sourcemap --jsx=automatic --jsx-import-source=kerfjs --define:__KERF_DEV__=false && npx sass src/client/styles.scss dist/client/styles.css --style compressed --no-source-map","demo:capture":"npm run build:client && tsx scripts/demo/capture-demo.ts","release:beta":"bash scripts/release.sh --beta","prepublishOnly":"npm run build && npm run build:client","build:client:dev":"node -e \"require('fs').mkdirSync('dist/client',{recursive:true})\" && node -e \"for (const f of ['favicon.svg','logo-full-bleed.svg','wordmark-light.svg','wordmark-dark.svg']) require('fs').copyFileSync('assets/'+f,'dist/client/'+f)\" && npx esbuild src/client/app.tsx --bundle --format=iife --outfile=dist/client/app.global.js --target=es2020 --sourcemap --jsx=automatic --jsx-import-source=kerfjs --define:__KERF_DEV__=true && npx sass src/client/styles.scss dist/client/styles.css --style compressed --no-source-map","release:beta:auto":"bash scripts/release-beta-auto.sh","tauri:build:local":"bash scripts/tauri-build-local.sh"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8c3cb2ab-d327-453d-b74b-c9a4e39b3b62"}},"overrides":{"esbuild":"^0.28.1"},"repository":{"url":"git+https://github.com/Small-Tale/newsmonger.git","type":"git"},"_npmVersion":"11.19.0","description":"Topic-based news tracker: enter topics, and on a configurable interval the app asks Claude (with web search) for new developments, deduplicating against previously seen stories.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"^4.4.3","hono":"^4.12.25","kerfjs":"^4.1.0","openai":"^6.49.0","@anthropic-ai/sdk":"^0.113.0","@hono/node-server":"^2.0.5"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"c8":"^12.0.0","tsx":"^4.22.4","sass":"^1.97.3","tsup":"^8.5.1","eslint":"^10.5.0","vitest":"^4.1.9","esbuild":"^0.28.1","gitgist":"^1.2.0","@eslint/js":"^10.0.1","typescript":"^5.9.3","@types/node":"^25.9.3","domotion-svg":"^0.21.1","@tauri-apps/cli":"^2.11.2","@playwright/test":"^1.61.0","typescript-eslint":"^8.61.1","@vitest/coverage-v8":"^4.1.9","eslint-plugin-tsdoc":"^0.5.2","@axe-core/playwright":"^4.12.1","eslint-plugin-kerfjs":"^4.1.0","eslint-plugin-import-x":"^4.16.2","eslint-plugin-simple-import-sort":"^12.1.1"},"_npmOperationalInternal":{"tmp":"tmp/newsmonger_0.2.0-beta.8_1785544863960_0.528469490396525","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.9":{"name":"newsmonger","version":"0.2.0-beta.9","author":{"name":"Small Tale Inc."},"license":"MIT","_id":"newsmonger@0.2.0-beta.9","maintainers":[{"name":"bwestphal","email":"brian.westphal@bleugris.com"}],"homepage":"https://github.com/Small-Tale/newsmonger#readme","bugs":{"url":"https://github.com/Small-Tale/newsmonger/issues"},"bin":{"newsmonger":"dist/cli.js"},"dist":{"shasum":"fb3d09dd760f741b4bf2a778db56c7f06680c0ee","tarball":"https://registry.npmjs.org/newsmonger/-/newsmonger-0.2.0-beta.9.tgz","fileCount":10,"integrity":"sha512-0gxCy4EbfbZM2eC995kyub/MgWX5oaePQByg1BtXAKF2kEI/KdwVNGgjFlkZGJ+/2ufw8+fDIxwq+YJgh4Q+zg==","signatures":[{"sig":"MEYCIQC6sJjw1JKYuYlmH03/jLuWq4hyWY7SuW44MhpLJHJ5ZAIhAOm+qK87ecqNWRmIwLzSaQ9SQxxfWmtTQerLpCn+2uWt","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/newsmonger@0.2.0-beta.9","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1177986},"type":"module","engines":{"node":">=22.5"},"gitHead":"71b4a916fc4839ea2fa0bba2c5d4db67f89475e4","scripts":{"dev":"npm run build:client:dev && tsx src/cli.ts","lint":"eslint src/ tests/","test":"vitest run --coverage","build":"tsup","clean":"rm -rf dist node_modules/.cache","tauri":"tauri","release":"bash scripts/release.sh","test:all":"bash scripts/test-all.sh","test:e2e":"npx playwright test","tauri:dev":"npm run build:client && tauri dev","typecheck":"tsc --noEmit","commit:msg":"gitgist --staged --commit-message","dev:server":"npm run build:client:dev && tsx src/cli.ts --no-open --strict-port","gates:rust":"bash scripts/gates-rust.sh","test:watch":"vitest","demo:stills":"npm run build:client && tsx scripts/demo/capture-stills.ts","tauri:build":"tauri build","build:client":"node -e \"require('fs').mkdirSync('dist/client',{recursive:true})\" && node -e \"for (const f of ['favicon.svg','logo-full-bleed.svg','wordmark-light.svg','wordmark-dark.svg']) require('fs').copyFileSync('assets/'+f,'dist/client/'+f)\" && npx esbuild src/client/app.tsx --bundle --format=iife --outfile=dist/client/app.global.js --target=es2020 --sourcemap --jsx=automatic --jsx-import-source=kerfjs --define:__KERF_DEV__=false && npx sass src/client/styles.scss dist/client/styles.css --style compressed --no-source-map","demo:capture":"npm run build:client && tsx scripts/demo/capture-demo.ts","release:beta":"bash scripts/release.sh --beta","prepublishOnly":"npm run build && npm run build:client","build:client:dev":"node -e \"require('fs').mkdirSync('dist/client',{recursive:true})\" && node -e \"for (const f of ['favicon.svg','logo-full-bleed.svg','wordmark-light.svg','wordmark-dark.svg']) require('fs').copyFileSync('assets/'+f,'dist/client/'+f)\" && npx esbuild src/client/app.tsx --bundle --format=iife --outfile=dist/client/app.global.js --target=es2020 --sourcemap --jsx=automatic --jsx-import-source=kerfjs --define:__KERF_DEV__=true && npx sass src/client/styles.scss dist/client/styles.css --style compressed --no-source-map","release:beta:auto":"bash scripts/release-beta-auto.sh","tauri:build:local":"bash scripts/tauri-build-local.sh"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8c3cb2ab-d327-453d-b74b-c9a4e39b3b62"}},"overrides":{"esbuild":"^0.28.1"},"repository":{"url":"git+https://github.com/Small-Tale/newsmonger.git","type":"git"},"_npmVersion":"11.19.0","description":"Topic-based news tracker: enter topics, and on a configurable interval the app asks Claude (with web search) for new developments, deduplicating against previously seen stories.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"^4.4.3","hono":"^4.12.25","kerfjs":"^4.1.0","openai":"^6.49.0","@anthropic-ai/sdk":"^0.113.0","@hono/node-server":"^2.0.5"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"c8":"^12.0.0","tsx":"^4.22.4","sass":"^1.97.3","tsup":"^8.5.1","eslint":"^10.5.0","vitest":"^4.1.9","esbuild":"^0.28.1","gitgist":"^1.2.0","@eslint/js":"^10.0.1","typescript":"^5.9.3","@types/node":"^25.9.3","domotion-svg":"^0.21.1","@tauri-apps/cli":"^2.11.2","@playwright/test":"^1.61.0","typescript-eslint":"^8.61.1","@vitest/coverage-v8":"^4.1.9","eslint-plugin-tsdoc":"^0.5.2","@axe-core/playwright":"^4.12.1","eslint-plugin-kerfjs":"^4.1.0","eslint-plugin-import-x":"^4.16.2","eslint-plugin-simple-import-sort":"^12.1.1"},"_npmOperationalInternal":{"tmp":"tmp/newsmonger_0.2.0-beta.9_1785555960993_0.048847071675033105","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.10":{"name":"newsmonger","version":"0.2.0-beta.10","author":{"name":"Small Tale Inc."},"license":"MIT","_id":"newsmonger@0.2.0-beta.10","maintainers":[{"name":"bwestphal","email":"brian.westphal@bleugris.com"}],"homepage":"https://github.com/Small-Tale/newsmonger#readme","bugs":{"url":"https://github.com/Small-Tale/newsmonger/issues"},"bin":{"newsmonger":"dist/cli.js"},"dist":{"shasum":"be3b34813daba58c845d3d5a07990938da01a9aa","tarball":"https://registry.npmjs.org/newsmonger/-/newsmonger-0.2.0-beta.10.tgz","fileCount":10,"integrity":"sha512-6p9nGBbd0fP9konmBu3Wf//S2gpGBauti+FGMPytLho3C/0LZ/lnI3AS7YG1QWEYptcPJq1L477fDeYqvFJsfw==","signatures":[{"sig":"MEUCIAKuvmt5ZYy5G4i8Tf8HS9aH4CPxs/9lNo4vBgIqvQO6AiEAvntKGDUC2gy9v5vfbgqM5mPdwMkyb6fSjpv1jIEoCNE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/newsmonger@0.2.0-beta.10","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1183496},"type":"module","engines":{"node":">=22.5"},"gitHead":"5d5cab4b5e27e73b5e7c0288d02cb230e1b2d163","scripts":{"dev":"npm run build:client:dev && tsx src/cli.ts","lint":"eslint src/ tests/","test":"vitest run --coverage","build":"tsup","clean":"rm -rf dist node_modules/.cache","tauri":"tauri","release":"bash scripts/release.sh","test:all":"bash scripts/test-all.sh","test:e2e":"npx playwright test","tauri:dev":"npm run build:client && tauri dev","typecheck":"tsc --noEmit","commit:msg":"gitgist --staged --commit-message","dev:server":"npm run build:client:dev && tsx src/cli.ts --no-open --strict-port","gates:rust":"bash scripts/gates-rust.sh","test:watch":"vitest","demo:stills":"npm run build:client && tsx scripts/demo/capture-stills.ts","tauri:build":"tauri build","build:client":"node -e \"require('fs').mkdirSync('dist/client',{recursive:true})\" && node -e \"for (const f of ['favicon.svg','logo-full-bleed.svg','wordmark-light.svg','wordmark-dark.svg']) require('fs').copyFileSync('assets/'+f,'dist/client/'+f)\" && npx esbuild src/client/app.tsx --bundle --format=iife --outfile=dist/client/app.global.js --target=es2020 --sourcemap --jsx=automatic --jsx-import-source=kerfjs --define:__KERF_DEV__=false && npx sass src/client/styles.scss dist/client/styles.css --style compressed --no-source-map","demo:capture":"npm run build:client && tsx scripts/demo/capture-demo.ts","release:beta":"bash scripts/release.sh --beta","prepublishOnly":"npm run build && npm run build:client","build:client:dev":"node -e \"require('fs').mkdirSync('dist/client',{recursive:true})\" && node -e \"for (const f of ['favicon.svg','logo-full-bleed.svg','wordmark-light.svg','wordmark-dark.svg']) require('fs').copyFileSync('assets/'+f,'dist/client/'+f)\" && npx esbuild src/client/app.tsx --bundle --format=iife --outfile=dist/client/app.global.js --target=es2020 --sourcemap --jsx=automatic --jsx-import-source=kerfjs --define:__KERF_DEV__=true && npx sass src/client/styles.scss dist/client/styles.css --style compressed --no-source-map","release:beta:auto":"bash scripts/release-beta-auto.sh","tauri:build:local":"bash scripts/tauri-build-local.sh"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8c3cb2ab-d327-453d-b74b-c9a4e39b3b62"}},"overrides":{"esbuild":"^0.28.1"},"repository":{"url":"git+https://github.com/Small-Tale/newsmonger.git","type":"git"},"_npmVersion":"11.19.0","description":"Topic-based news tracker: enter topics, and on a configurable interval the app asks Claude (with web search) for new developments, deduplicating against previously seen stories.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"^4.4.3","hono":"^4.12.25","kerfjs":"^4.1.0","openai":"^6.49.0","@anthropic-ai/sdk":"^0.113.0","@hono/node-server":"^2.0.5"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"c8":"^12.0.0","tsx":"^4.22.4","sass":"^1.97.3","tsup":"^8.5.1","eslint":"^10.5.0","vitest":"^4.1.9","esbuild":"^0.28.1","gitgist":"^1.2.0","@eslint/js":"^10.0.1","typescript":"^5.9.3","@types/node":"^25.9.3","domotion-svg":"^0.21.1","@tauri-apps/cli":"^2.11.2","@playwright/test":"^1.61.0","typescript-eslint":"^8.61.1","@vitest/coverage-v8":"^4.1.9","eslint-plugin-tsdoc":"^0.5.2","@axe-core/playwright":"^4.12.1","eslint-plugin-kerfjs":"^4.1.0","eslint-plugin-import-x":"^4.16.2","eslint-plugin-simple-import-sort":"^12.1.1"},"_npmOperationalInternal":{"tmp":"tmp/newsmonger_0.2.0-beta.10_1785562838350_0.2669445445933156","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.11":{"name":"newsmonger","version":"0.2.0-beta.11","author":{"name":"Small Tale Inc."},"license":"MIT","_id":"newsmonger@0.2.0-beta.11","maintainers":[{"name":"bwestphal","email":"brian.westphal@bleugris.com"}],"homepage":"https://github.com/Small-Tale/newsmonger#readme","bugs":{"url":"https://github.com/Small-Tale/newsmonger/issues"},"bin":{"newsmonger":"dist/cli.js"},"dist":{"shasum":"d0fbfe01b78b0b3a2490add4ef1328b39df0e296","tarball":"https://registry.npmjs.org/newsmonger/-/newsmonger-0.2.0-beta.11.tgz","fileCount":10,"integrity":"sha512-KmF0px2oQnnpIHvXPOaqeiMuqe4gZnqa13TAIkW2HeWfqMXmkjPquYRrHu+OwPPQdM7ebQzfZ/8FXB3zs/O2Yg==","signatures":[{"sig":"MEUCIDUdBSG+KCP0pd/6s0l6mWEsJJ2+eairB5QQxKV7UPa2AiEAgPpADDOUErVmBXd0TXlG3qS0Z80cdRPeUy8R0fkWhDw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/newsmonger@0.2.0-beta.11","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1202311},"type":"module","engines":{"node":">=22.5"},"gitHead":"06b567ca7fc2bc272199491689279a6d2608791c","scripts":{"dev":"npm run build:client:dev && tsx src/cli.ts","lint":"eslint src/ tests/","test":"vitest run --coverage","build":"tsup","clean":"rm -rf dist node_modules/.cache","tauri":"tauri","release":"bash scripts/release.sh","test:all":"bash scripts/test-all.sh","test:e2e":"npx playwright test","tauri:dev":"npm run build:client && tauri dev","typecheck":"tsc --noEmit","commit:msg":"gitgist --staged --commit-message","dev:server":"npm run build:client:dev && tsx src/cli.ts --no-open --strict-port","gates:rust":"bash scripts/gates-rust.sh","test:watch":"vitest","demo:stills":"npm run build:client && tsx scripts/demo/capture-stills.ts","tauri:build":"tauri build","build:client":"node -e \"require('fs').mkdirSync('dist/client',{recursive:true})\" && node -e \"for (const f of ['favicon.svg','logo-full-bleed.svg','wordmark-light.svg','wordmark-dark.svg']) require('fs').copyFileSync('assets/'+f,'dist/client/'+f)\" && npx esbuild src/client/app.tsx --bundle --format=iife --outfile=dist/client/app.global.js --target=es2020 --sourcemap --jsx=automatic --jsx-import-source=kerfjs --define:__KERF_DEV__=false && npx sass src/client/styles.scss dist/client/styles.css --style compressed --no-source-map","demo:capture":"npm run build:client && tsx scripts/demo/capture-demo.ts","release:beta":"bash scripts/release.sh --beta","prepublishOnly":"npm run build && npm run build:client","build:client:dev":"node -e \"require('fs').mkdirSync('dist/client',{recursive:true})\" && node -e \"for (const f of ['favicon.svg','logo-full-bleed.svg','wordmark-light.svg','wordmark-dark.svg']) require('fs').copyFileSync('assets/'+f,'dist/client/'+f)\" && npx esbuild src/client/app.tsx --bundle --format=iife --outfile=dist/client/app.global.js --target=es2020 --sourcemap --jsx=automatic --jsx-import-source=kerfjs --define:__KERF_DEV__=true && npx sass src/client/styles.scss dist/client/styles.css --style compressed --no-source-map","release:beta:auto":"bash scripts/release-beta-auto.sh","tauri:build:local":"bash scripts/tauri-build-local.sh"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8c3cb2ab-d327-453d-b74b-c9a4e39b3b62"}},"overrides":{"esbuild":"^0.28.1"},"repository":{"url":"git+https://github.com/Small-Tale/newsmonger.git","type":"git"},"_npmVersion":"11.19.0","description":"Topic-based news tracker: enter topics, and on a configurable interval the app asks Claude (with web search) for new developments, deduplicating against previously seen stories.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"^4.4.3","hono":"^4.12.25","kerfjs":"^4.1.0","openai":"^6.49.0","@anthropic-ai/sdk":"^0.113.0","@hono/node-server":"^2.0.5"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"c8":"^12.0.0","tsx":"^4.22.4","sass":"^1.97.3","tsup":"^8.5.1","eslint":"^10.5.0","vitest":"^4.1.9","esbuild":"^0.28.1","gitgist":"^1.2.0","@eslint/js":"^10.0.1","typescript":"^5.9.3","@types/node":"^25.9.3","domotion-svg":"^0.21.1","@tauri-apps/cli":"^2.11.2","@playwright/test":"^1.61.0","typescript-eslint":"^8.61.1","@vitest/coverage-v8":"^4.1.9","eslint-plugin-tsdoc":"^0.5.2","@axe-core/playwright":"^4.12.1","eslint-plugin-kerfjs":"^4.1.0","eslint-plugin-import-x":"^4.16.2","eslint-plugin-simple-import-sort":"^12.1.1"},"_npmOperationalInternal":{"tmp":"tmp/newsmonger_0.2.0-beta.11_1785638297253_0.27831692198532987","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.12":{"name":"newsmonger","version":"0.2.0-beta.12","author":{"name":"Small Tale Inc."},"license":"MIT","_id":"newsmonger@0.2.0-beta.12","maintainers":[{"name":"bwestphal","email":"brian.westphal@bleugris.com"}],"homepage":"https://github.com/Small-Tale/newsmonger#readme","bugs":{"url":"https://github.com/Small-Tale/newsmonger/issues"},"bin":{"newsmonger":"dist/cli.js"},"dist":{"shasum":"8a1e0fa57db9fc68f5f035cf9f8e915d6edb0b3b","tarball":"https://registry.npmjs.org/newsmonger/-/newsmonger-0.2.0-beta.12.tgz","fileCount":10,"integrity":"sha512-nht0IJ8hMDKy3ZisAX5TKfsgNcFFABAXSdXCsaFbqbOlwpie9vU9wr8de1SfIoCuNEIS4/dT6rwQqGrvUyXVhA==","signatures":[{"sig":"MEQCIEppLzUnp5R4q+1tUUguNLxDGlj+O/5BE1FjkeqGCorzAiA2cOwZ0mxzO1uwlLR/UEq7PBZWvXKXfPDR9CGs7RiN6w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/newsmonger@0.2.0-beta.12","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1211013},"type":"module","engines":{"node":">=22.5"},"gitHead":"f92869f64260886241e0c4d0294db3c31275c294","scripts":{"dev":"npm run build:client:dev && tsx src/cli.ts","lint":"eslint src/ tests/","test":"vitest run --coverage","build":"tsup","clean":"rm -rf dist node_modules/.cache","tauri":"tauri","release":"bash scripts/release.sh","test:all":"bash scripts/test-all.sh","test:e2e":"npx playwright test","tauri:dev":"npm run build:client && tauri dev","typecheck":"tsc --noEmit","commit:msg":"gitgist --staged --commit-message","dev:server":"npm run build:client:dev && tsx src/cli.ts --no-open --strict-port","gates:rust":"bash scripts/gates-rust.sh","test:watch":"vitest","demo:stills":"npm run build:client && tsx scripts/demo/capture-stills.ts","tauri:build":"tauri build","build:client":"node -e \"require('fs').mkdirSync('dist/client',{recursive:true})\" && node -e \"for (const f of ['favicon.svg','logo-full-bleed.svg','wordmark-light.svg','wordmark-dark.svg']) require('fs').copyFileSync('assets/'+f,'dist/client/'+f)\" && npx esbuild src/client/app.tsx --bundle --format=iife --outfile=dist/client/app.global.js --target=es2020 --sourcemap --jsx=automatic --jsx-import-source=kerfjs --define:__KERF_DEV__=false && npx sass src/client/styles.scss dist/client/styles.css --style compressed --no-source-map","demo:capture":"npm run build:client && tsx scripts/demo/capture-demo.ts","release:beta":"bash scripts/release.sh --beta","prepublishOnly":"npm run build && npm run build:client","build:client:dev":"node -e \"require('fs').mkdirSync('dist/client',{recursive:true})\" && node -e \"for (const f of ['favicon.svg','logo-full-bleed.svg','wordmark-light.svg','wordmark-dark.svg']) require('fs').copyFileSync('assets/'+f,'dist/client/'+f)\" && npx esbuild src/client/app.tsx --bundle --format=iife --outfile=dist/client/app.global.js --target=es2020 --sourcemap --jsx=automatic --jsx-import-source=kerfjs --define:__KERF_DEV__=true && npx sass src/client/styles.scss dist/client/styles.css --style compressed --no-source-map","release:beta:auto":"bash scripts/release-beta-auto.sh","tauri:build:local":"bash scripts/tauri-build-local.sh"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8c3cb2ab-d327-453d-b74b-c9a4e39b3b62"}},"overrides":{"esbuild":"^0.28.1"},"repository":{"url":"git+https://github.com/Small-Tale/newsmonger.git","type":"git"},"_npmVersion":"11.19.0","description":"Topic-based news tracker: enter topics, and on a configurable interval the app asks Claude (with web search) for new developments, deduplicating against previously seen stories.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"^4.4.3","hono":"^4.12.25","kerfjs":"^4.1.0","openai":"^6.49.0","@anthropic-ai/sdk":"^0.113.0","@hono/node-server":"^2.0.5"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"c8":"^12.0.0","tsx":"^4.22.4","sass":"^1.97.3","tsup":"^8.5.1","eslint":"^10.5.0","vitest":"^4.1.9","esbuild":"^0.28.1","gitgist":"^1.2.0","@eslint/js":"^10.0.1","typescript":"^5.9.3","@types/node":"^25.9.3","domotion-svg":"^0.21.1","@tauri-apps/cli":"^2.11.2","@playwright/test":"^1.61.0","typescript-eslint":"^8.61.1","@vitest/coverage-v8":"^4.1.9","eslint-plugin-tsdoc":"^0.5.2","@axe-core/playwright":"^4.12.1","eslint-plugin-kerfjs":"^4.1.0","eslint-plugin-import-x":"^4.16.2","eslint-plugin-simple-import-sort":"^12.1.1"},"_npmOperationalInternal":{"tmp":"tmp/newsmonger_0.2.0-beta.12_1785643268225_0.25558377252214703","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.13":{"name":"newsmonger","version":"0.2.0-beta.13","author":{"name":"Small Tale Inc."},"license":"MIT","_id":"newsmonger@0.2.0-beta.13","maintainers":[{"name":"bwestphal","email":"brian.westphal@bleugris.com"}],"homepage":"https://github.com/Small-Tale/newsmonger#readme","bugs":{"url":"https://github.com/Small-Tale/newsmonger/issues"},"bin":{"newsmonger":"dist/cli.js"},"dist":{"shasum":"6c7d9c7636442da4438a9cf42278b4e827f5e8dd","tarball":"https://registry.npmjs.org/newsmonger/-/newsmonger-0.2.0-beta.13.tgz","fileCount":10,"integrity":"sha512-iZO83fQsWq+qgGHR6+uYVMQs1NWRmU6nhzxrQ0Qn+EFFb+GLyMxpUKo9YTjHada0PUx3Mrx8/zivNcvpsIvvQQ==","signatures":[{"sig":"MEUCIAuWpdMG+0i/0eX8tk2wosCGfG1aC8a8STckyNlHLBvEAiEAhf1WwaFIIHJ5AqSvDvzA02fidp8GBAP+znaauBdkshs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/newsmonger@0.2.0-beta.13","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1224673},"type":"module","engines":{"node":">=22.5"},"gitHead":"add38ebef49dd167ad297e094a0cd91c3c7fa5f4","scripts":{"dev":"npm run build:client:dev && tsx src/cli.ts","lint":"eslint src/ tests/ scripts/","test":"vitest run --coverage","build":"tsup","clean":"rm -rf dist node_modules/.cache","tauri":"tauri","release":"bash scripts/release.sh","test:all":"bash scripts/test-all.sh","test:e2e":"npx playwright test","tauri:dev":"npm run build:client && tauri dev","typecheck":"tsc --noEmit","commit:msg":"gitgist --staged --commit-message","dev:server":"npm run build:client:dev && tsx src/cli.ts --no-open --strict-port","gates:rust":"bash scripts/gates-rust.sh","test:watch":"vitest","demo:stills":"npm run build:client && tsx scripts/demo/capture-stills.ts","tauri:build":"tauri build","build:client":"node -e \"require('fs').mkdirSync('dist/client',{recursive:true})\" && node -e \"for (const f of ['favicon.svg','logo-full-bleed.svg','wordmark-light.svg','wordmark-dark.svg']) require('fs').copyFileSync('assets/'+f,'dist/client/'+f)\" && npx esbuild src/client/app.tsx --bundle --format=iife --outfile=dist/client/app.global.js --target=es2020 --sourcemap --jsx=automatic --jsx-import-source=kerfjs --define:__KERF_DEV__=false && npx sass src/client/styles.scss dist/client/styles.css --style compressed --no-source-map","demo:capture":"npm run build:client && tsx scripts/demo/capture-demo.ts","release:beta":"bash scripts/release.sh --beta","prepublishOnly":"npm run build && npm run build:client","build:client:dev":"node -e \"require('fs').mkdirSync('dist/client',{recursive:true})\" && node -e \"for (const f of ['favicon.svg','logo-full-bleed.svg','wordmark-light.svg','wordmark-dark.svg']) require('fs').copyFileSync('assets/'+f,'dist/client/'+f)\" && npx esbuild src/client/app.tsx --bundle --format=iife --outfile=dist/client/app.global.js --target=es2020 --sourcemap --jsx=automatic --jsx-import-source=kerfjs --define:__KERF_DEV__=true && npx sass src/client/styles.scss dist/client/styles.css --style compressed --no-source-map","release:beta:auto":"bash scripts/release-beta-auto.sh","tauri:build:local":"bash scripts/tauri-build-local.sh"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8c3cb2ab-d327-453d-b74b-c9a4e39b3b62"}},"overrides":{"esbuild":"^0.28.1"},"repository":{"url":"git+https://github.com/Small-Tale/newsmonger.git","type":"git"},"_npmVersion":"11.19.0","description":"Topic-based news tracker: enter topics, and on a configurable interval the app asks Claude (with web search) for new developments, deduplicating against previously seen stories.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"^4.4.3","hono":"^4.12.25","kerfjs":"^4.1.0","openai":"^6.49.0","@anthropic-ai/sdk":"^0.113.0","@hono/node-server":"^2.0.5"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"c8":"^12.0.0","tsx":"^4.22.4","sass":"^1.97.3","tsup":"^8.5.1","eslint":"^10.5.0","vitest":"^4.1.9","esbuild":"^0.28.1","gitgist":"^1.2.0","@eslint/js":"^10.0.1","typescript":"^5.9.3","@types/node":"^25.9.3","domotion-svg":"^0.21.1","@tauri-apps/cli":"^2.11.2","@playwright/test":"^1.61.0","typescript-eslint":"^8.61.1","@vitest/coverage-v8":"^4.1.9","eslint-plugin-tsdoc":"^0.5.2","@axe-core/playwright":"^4.12.1","eslint-plugin-kerfjs":"^4.1.0","eslint-plugin-import-x":"^4.16.2","eslint-plugin-simple-import-sort":"^12.1.1"},"_npmOperationalInternal":{"tmp":"tmp/newsmonger_0.2.0-beta.13_1785743743127_0.7179325258628937","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.14":{"name":"newsmonger","version":"0.2.0-beta.14","author":{"name":"Small Tale Inc."},"license":"MIT","_id":"newsmonger@0.2.0-beta.14","maintainers":[{"name":"bwestphal","email":"brian.westphal@bleugris.com"}],"homepage":"https://github.com/Small-Tale/newsmonger#readme","bugs":{"url":"https://github.com/Small-Tale/newsmonger/issues"},"bin":{"newsmonger":"dist/cli.js"},"dist":{"shasum":"e5683b87c16fc78d4b78c8df82ce6d115d4ff0cf","tarball":"https://registry.npmjs.org/newsmonger/-/newsmonger-0.2.0-beta.14.tgz","fileCount":10,"integrity":"sha512-HhGGdu39jnZNWkmRZ+RROAEn89ojBqILTPte8tsOfgnHU0jFVOuiWk4tPOxSaIN3uZ2S9M14qGKBUKgsqV7r6w==","signatures":[{"sig":"MEUCIQDOvJztov4FiTbwc+H5l9vWJRp/Sa+/Ne2hPT9Z5lN43QIgHtURMJaynSe9YkOJLkd8Xke4PZj4vBUVNTnlXzZvIaM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/newsmonger@0.2.0-beta.14","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1227252},"type":"module","engines":{"node":">=22.5"},"gitHead":"8e4eebe8fb5b0b9e8503f8d7ae87c0a7dfaaca43","scripts":{"dev":"npm run build:client:dev && tsx src/cli.ts","lint":"eslint src/ tests/ scripts/","test":"vitest run --coverage","build":"tsup","clean":"rm -rf dist node_modules/.cache","tauri":"tauri","release":"bash scripts/release.sh","test:all":"bash scripts/test-all.sh","test:e2e":"npx playwright test","tauri:dev":"npm run build:client && tauri dev","typecheck":"tsc --noEmit","commit:msg":"gitgist --staged --commit-message","dev:server":"npm run build:client:dev && tsx src/cli.ts --no-open --strict-port","gates:rust":"bash scripts/gates-rust.sh","test:watch":"vitest","demo:stills":"npm run build:client && tsx scripts/demo/capture-stills.ts","tauri:build":"tauri build","build:client":"node -e \"require('fs').mkdirSync('dist/client',{recursive:true})\" && node -e \"for (const f of ['favicon.svg','logo-full-bleed.svg','wordmark-light.svg','wordmark-dark.svg']) require('fs').copyFileSync('assets/'+f,'dist/client/'+f)\" && npx esbuild src/client/app.tsx --bundle --format=iife --outfile=dist/client/app.global.js --target=es2020 --sourcemap --jsx=automatic --jsx-import-source=kerfjs --define:__KERF_DEV__=false && npx sass src/client/styles.scss dist/client/styles.css --style compressed --no-source-map","demo:capture":"npm run build:client && tsx scripts/demo/capture-demo.ts","release:beta":"bash scripts/release.sh --beta","prepublishOnly":"npm run build && npm run build:client","build:client:dev":"node -e \"require('fs').mkdirSync('dist/client',{recursive:true})\" && node -e \"for (const f of ['favicon.svg','logo-full-bleed.svg','wordmark-light.svg','wordmark-dark.svg']) require('fs').copyFileSync('assets/'+f,'dist/client/'+f)\" && npx esbuild src/client/app.tsx --bundle --format=iife --outfile=dist/client/app.global.js --target=es2020 --sourcemap --jsx=automatic --jsx-import-source=kerfjs --define:__KERF_DEV__=true && npx sass src/client/styles.scss dist/client/styles.css --style compressed --no-source-map","release:beta:auto":"bash scripts/release-beta-auto.sh","tauri:build:local":"bash scripts/tauri-build-local.sh"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8c3cb2ab-d327-453d-b74b-c9a4e39b3b62"}},"overrides":{"esbuild":"^0.28.1"},"repository":{"url":"git+https://github.com/Small-Tale/newsmonger.git","type":"git"},"_npmVersion":"11.19.0","description":"Topic-based news tracker: enter topics, and on a configurable interval the app asks Claude (with web search) for new developments, deduplicating against previously seen stories.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"^4.4.3","hono":"^4.12.25","kerfjs":"^4.1.0","openai":"^6.49.0","@anthropic-ai/sdk":"^0.113.0","@hono/node-server":"^2.0.5"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"c8":"^12.0.0","tsx":"^4.22.4","sass":"^1.97.3","tsup":"^8.5.1","eslint":"^10.5.0","vitest":"^4.1.9","esbuild":"^0.28.1","gitgist":"^1.2.0","@eslint/js":"^10.0.1","typescript":"^5.9.3","@types/node":"^25.9.3","domotion-svg":"^0.21.1","@tauri-apps/cli":"^2.11.2","@playwright/test":"^1.61.0","typescript-eslint":"^8.61.1","@vitest/coverage-v8":"^4.1.9","eslint-plugin-tsdoc":"^0.5.2","@axe-core/playwright":"^4.12.1","eslint-plugin-kerfjs":"^4.1.0","eslint-plugin-import-x":"^4.16.2","eslint-plugin-simple-import-sort":"^12.1.1"},"_npmOperationalInternal":{"tmp":"tmp/newsmonger_0.2.0-beta.14_1785747915318_0.8345894466185348","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.15":{"name":"newsmonger","version":"0.2.0-beta.15","author":{"name":"Small Tale Inc."},"license":"MIT","_id":"newsmonger@0.2.0-beta.15","maintainers":[{"name":"bwestphal","email":"brian.westphal@bleugris.com"}],"homepage":"https://github.com/Small-Tale/newsmonger#readme","bugs":{"url":"https://github.com/Small-Tale/newsmonger/issues"},"bin":{"newsmonger":"dist/cli.js"},"dist":{"shasum":"13e1bb3faa22dfccc8a0ec94c08672f2476781db","tarball":"https://registry.npmjs.org/newsmonger/-/newsmonger-0.2.0-beta.15.tgz","fileCount":10,"integrity":"sha512-yVjDgDpou+6N7wS+UCCrwtOtDBJTdRVCYPX9aucWcpZZujrrbXGuNyNcj+3Acul9gXxZmm6zwr9mQdjbozftGg==","signatures":[{"sig":"MEUCIQCN58AKDqnyNTCaSoikMX0iDj83y+FbIncuJODyRf4CAgIgdERl0Kj8peXpqg3NeviwP4t55ppwOehlYegrmA4Z++I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/newsmonger@0.2.0-beta.15","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1235997},"type":"module","engines":{"node":">=22.5"},"gitHead":"341805d3e23f88d9bd165b5766d3485cfdae0cd7","scripts":{"dev":"npm run build:client:dev && tsx src/cli.ts","lint":"eslint src/ tests/ scripts/","test":"vitest run --coverage","build":"tsup","clean":"rm -rf dist node_modules/.cache","tauri":"tauri","release":"bash scripts/release.sh","test:all":"bash scripts/test-all.sh","test:e2e":"npx playwright test","tauri:dev":"npm run build:client && tauri dev","typecheck":"tsc --noEmit","commit:msg":"gitgist --staged --commit-message","dev:server":"npm run build:client:dev && tsx src/cli.ts --no-open --strict-port","gates:rust":"bash scripts/gates-rust.sh","test:watch":"vitest","demo:stills":"npm run build:client && tsx scripts/demo/capture-stills.ts","tauri:build":"tauri build","build:client":"node -e \"require('fs').mkdirSync('dist/client',{recursive:true})\" && node -e \"for (const f of ['favicon.svg','logo-full-bleed.svg','wordmark-light.svg','wordmark-dark.svg']) require('fs').copyFileSync('assets/'+f,'dist/client/'+f)\" && npx esbuild src/client/app.tsx --bundle --format=iife --outfile=dist/client/app.global.js --target=es2020 --sourcemap --jsx=automatic --jsx-import-source=kerfjs --define:__KERF_DEV__=false && npx sass src/client/styles.scss dist/client/styles.css --style compressed --no-source-map","demo:capture":"npm run build:client && tsx scripts/demo/capture-demo.ts","release:beta":"bash scripts/release.sh --beta","test:e2e:real":"NEWSMONGER_E2E_REAL=1 npx playwright test real-providers","prepublishOnly":"npm run build && npm run build:client","build:client:dev":"node -e \"require('fs').mkdirSync('dist/client',{recursive:true})\" && node -e \"for (const f of ['favicon.svg','logo-full-bleed.svg','wordmark-light.svg','wordmark-dark.svg']) require('fs').copyFileSync('assets/'+f,'dist/client/'+f)\" && npx esbuild src/client/app.tsx --bundle --format=iife --outfile=dist/client/app.global.js --target=es2020 --sourcemap --jsx=automatic --jsx-import-source=kerfjs --define:__KERF_DEV__=true && npx sass src/client/styles.scss dist/client/styles.css --style compressed --no-source-map","release:beta:auto":"bash scripts/release-beta-auto.sh","tauri:build:local":"bash scripts/tauri-build-local.sh","record:cli-sessions":"tsx scripts/record-cli-sessions.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8c3cb2ab-d327-453d-b74b-c9a4e39b3b62"}},"overrides":{"esbuild":"^0.28.1"},"repository":{"url":"git+https://github.com/Small-Tale/newsmonger.git","type":"git"},"_npmVersion":"11.19.0","description":"Topic-based news tracker: enter topics, and on a configurable interval the app asks Claude (with web search) for new developments, deduplicating against previously seen stories.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"^4.4.3","hono":"^4.12.25","kerfjs":"^4.1.0","openai":"^6.49.0","@anthropic-ai/sdk":"^0.113.0","@hono/node-server":"^2.0.5"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"c8":"^12.0.0","tsx":"^4.22.4","sass":"^1.97.3","tsup":"^8.5.1","eslint":"^10.5.0","vitest":"^4.1.9","esbuild":"^0.28.1","gitgist":"^1.2.0","@eslint/js":"^10.0.1","typescript":"^5.9.3","@types/node":"^25.9.3","domotion-svg":"^0.21.1","@tauri-apps/cli":"^2.11.2","@playwright/test":"^1.61.0","typescript-eslint":"^8.61.1","@vitest/coverage-v8":"^4.1.9","eslint-plugin-tsdoc":"^0.5.2","@axe-core/playwright":"^4.12.1","eslint-plugin-kerfjs":"^4.1.0","eslint-plugin-import-x":"^4.16.2","eslint-plugin-simple-import-sort":"^12.1.1"},"_npmOperationalInternal":{"tmp":"tmp/newsmonger_0.2.0-beta.15_1785800557801_0.5395265951982584","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.18":{"name":"newsmonger","version":"0.2.0-beta.18","author":{"name":"Small Tale Inc."},"license":"MIT","_id":"newsmonger@0.2.0-beta.18","maintainers":[{"name":"bwestphal","email":"brian.westphal@bleugris.com"}],"homepage":"https://github.com/Small-Tale/newsmonger#readme","bugs":{"url":"https://github.com/Small-Tale/newsmonger/issues"},"bin":{"newsmonger":"dist/cli.js"},"dist":{"shasum":"6deeb84ce223e927cf8dacce4712d4f131f94738","tarball":"https://registry.npmjs.org/newsmonger/-/newsmonger-0.2.0-beta.18.tgz","fileCount":10,"integrity":"sha512-7tf4a/gcHZ1zpvm7c6q8/dDa32dfOKJcuEnQOMaDD0sRMa5doJqNhypUvgJIOXTKFcFmMET0wPT04RY2yCLftQ==","signatures":[{"sig":"MEUCIQCOlDEwYXCoSSXvjQRHCOX4hFpDPdpZVHaYK1iRqcXPtgIgJuw86BwoL/YPxT4BuH+R9w0LJ6LOq/8a0EbkSdLKPf8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/newsmonger@0.2.0-beta.18","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1319766},"type":"module","engines":{"node":">=22.5"},"gitHead":"6d2320865a08bfbb438c190e4dd11aae2222d0a0","scripts":{"dev":"npm run build:client:dev && node --import tsx/esm src/cli.ts","lint":"eslint src/ tests/ scripts/","test":"vitest run --coverage","build":"tsup","clean":"rm -rf dist node_modules/.cache","tauri":"tauri","release":"bash scripts/release.sh","test:all":"bash scripts/test-all.sh","test:e2e":"npx playwright test","tauri:dev":"npm run build:client && tauri dev","typecheck":"tsc --noEmit","commit:msg":"gitgist --staged --commit-message","dev:server":"npm run build:client:dev && node --import tsx/esm src/cli.ts --no-open --strict-port","gate:quick":"bash scripts/gate-quick.sh","gates:rust":"bash scripts/gates-rust.sh","test:watch":"vitest","demo:stills":"npm run build:client && node --import tsx/esm scripts/demo/capture-stills.ts","tauri:build":"tauri build","build:client":"node -e \"require('fs').mkdirSync('dist/client',{recursive:true})\" && node -e \"for (const f of ['favicon.svg','logo-full-bleed.svg','wordmark-light.svg','wordmark-dark.svg']) require('fs').copyFileSync('assets/'+f,'dist/client/'+f)\" && npx esbuild src/client/app.tsx --bundle --format=iife --outfile=dist/client/app.global.js --target=es2020 --sourcemap --jsx=automatic --jsx-import-source=kerfjs --define:__KERF_DEV__=false && npx sass src/client/styles.scss dist/client/styles.css --style compressed --no-source-map","demo:capture":"npm run build:client && node --import tsx/esm scripts/demo/capture-demo.ts","release:beta":"bash scripts/release.sh --beta","test:e2e:real":"NEWSMONGER_E2E_REAL=1 npx playwright test real-providers","prepublishOnly":"npm run build && npm run build:client","build:client:dev":"node -e \"require('fs').mkdirSync('dist/client',{recursive:true})\" && node -e \"for (const f of ['favicon.svg','logo-full-bleed.svg','wordmark-light.svg','wordmark-dark.svg']) require('fs').copyFileSync('assets/'+f,'dist/client/'+f)\" && npx esbuild src/client/app.tsx --bundle --format=iife --outfile=dist/client/app.global.js --target=es2020 --sourcemap --jsx=automatic --jsx-import-source=kerfjs --define:__KERF_DEV__=true && npx sass src/client/styles.scss dist/client/styles.css --style compressed --no-source-map","docs:requirements":"node scripts/build-requirements-summary.mjs","release:beta:auto":"bash scripts/release-beta-auto.sh","tauri:build:local":"bash scripts/tauri-build-local.sh","test:e2e:scramble":"node scripts/e2e-scramble.mjs","record:cli-sessions":"node --import tsx/esm scripts/record-cli-sessions.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8c3cb2ab-d327-453d-b74b-c9a4e39b3b62"}},"overrides":{"esbuild":"^0.28.1"},"repository":{"url":"git+https://github.com/Small-Tale/newsmonger.git","type":"git"},"_npmVersion":"11.19.0","description":"Topic-based news tracker: enter topics, and on a configurable interval the app asks Claude (with web search) for new developments, deduplicating against previously seen stories.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"^4.4.3","hono":"^4.12.25","kerfjs":"^4.1.0","openai":"^6.49.0","@anthropic-ai/sdk":"^0.113.0","@hono/node-server":"^2.0.5"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"c8":"^12.0.0","tsx":"^4.22.4","sass":"^1.97.3","tsup":"^8.5.1","eslint":"^10.5.0","vitest":"^4.1.9","esbuild":"^0.28.1","gitgist":"^1.2.0","@eslint/js":"^10.0.1","typescript":"^5.9.3","@types/node":"^25.9.3","domotion-svg":"^0.21.1","@tauri-apps/cli":"^2.11.2","@playwright/test":"^1.61.0","typescript-eslint":"^8.61.1","@vitest/coverage-v8":"^4.1.9","eslint-plugin-tsdoc":"^0.5.2","@axe-core/playwright":"^4.12.1","eslint-plugin-kerfjs":"^4.1.0","eslint-plugin-import-x":"^4.16.2","eslint-plugin-simple-import-sort":"^12.1.1"},"_npmOperationalInternal":{"tmp":"tmp/newsmonger_0.2.0-beta.18_1786006396424_0.4441531620828578","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.19":{"name":"newsmonger","version":"0.2.0-beta.19","author":{"name":"Small Tale Inc."},"license":"MIT","_id":"newsmonger@0.2.0-beta.19","maintainers":[{"name":"bwestphal","email":"brian.westphal@bleugris.com"}],"homepage":"https://github.com/Small-Tale/newsmonger#readme","bugs":{"url":"https://github.com/Small-Tale/newsmonger/issues"},"bin":{"newsmonger":"dist/cli.js"},"dist":{"shasum":"2b30ae0b564908ee8b48c79b7b0f533a82b2759f","tarball":"https://registry.npmjs.org/newsmonger/-/newsmonger-0.2.0-beta.19.tgz","fileCount":10,"integrity":"sha512-D2+y6hDYQDRpau+SJGzoU5QS8EOly/SFJ6NtgsvkEG1Zfb3KnGOSLjPoAt7vXxfTTV0k08S2IwfnbPZTe1+Pgg==","signatures":[{"sig":"MEUCIGSN8YOhvnyctNfhtEAzB//XoLdOtW0punRTpm1UdrJAAiEAoxjGfeZ3byarbJs+Ldc+LbyI6LAscVSLi4OuQ7DgbEA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/newsmonger@0.2.0-beta.19","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1324181},"type":"module","engines":{"node":">=22.5"},"gitHead":"15b459b04a21c49feb39f72ee1b9bbdfed774d5a","scripts":{"dev":"npm run build:client:dev && node --import tsx/esm src/cli.ts","lint":"eslint src/ tests/ scripts/","test":"vitest run --coverage","build":"tsup","clean":"rm -rf dist node_modules/.cache","tauri":"tauri","release":"bash scripts/release.sh","test:all":"bash scripts/test-all.sh","test:e2e":"npx playwright test","tauri:dev":"npm run build:client && tauri dev","typecheck":"tsc --noEmit","commit:msg":"gitgist --staged --commit-message","dev:server":"npm run build:client:dev && node --import tsx/esm src/cli.ts --no-open --strict-port","gate:quick":"bash scripts/gate-quick.sh","gates:rust":"bash scripts/gates-rust.sh","test:watch":"vitest","demo:stills":"npm run build:client && node --import tsx/esm scripts/demo/capture-stills.ts","tauri:build":"tauri build","build:client":"node -e \"require('fs').mkdirSync('dist/client',{recursive:true})\" && node -e \"for (const f of ['favicon.svg','logo-full-bleed.svg','wordmark-light.svg','wordmark-dark.svg']) require('fs').copyFileSync('assets/'+f,'dist/client/'+f)\" && npx esbuild src/client/app.tsx --bundle --format=iife --outfile=dist/client/app.global.js --target=es2020 --sourcemap --jsx=automatic --jsx-import-source=kerfjs --define:__KERF_DEV__=false && npx sass src/client/styles.scss dist/client/styles.css --style compressed --no-source-map","demo:capture":"npm run build:client && node --import tsx/esm scripts/demo/capture-demo.ts","release:beta":"bash scripts/release.sh --beta","test:e2e:real":"NEWSMONGER_E2E_REAL=1 npx playwright test real-providers","prepublishOnly":"npm run build && npm run build:client","build:client:dev":"node -e \"require('fs').mkdirSync('dist/client',{recursive:true})\" && node -e \"for (const f of ['favicon.svg','logo-full-bleed.svg','wordmark-light.svg','wordmark-dark.svg']) require('fs').copyFileSync('assets/'+f,'dist/client/'+f)\" && npx esbuild src/client/app.tsx --bundle --format=iife --outfile=dist/client/app.global.js --target=es2020 --sourcemap --jsx=automatic --jsx-import-source=kerfjs --define:__KERF_DEV__=true && npx sass src/client/styles.scss dist/client/styles.css --style compressed --no-source-map","docs:requirements":"node scripts/build-requirements-summary.mjs","release:beta:auto":"bash scripts/release-beta-auto.sh","tauri:build:local":"bash scripts/tauri-build-local.sh","test:e2e:scramble":"node scripts/e2e-scramble.mjs","record:cli-sessions":"node --import tsx/esm scripts/record-cli-sessions.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8c3cb2ab-d327-453d-b74b-c9a4e39b3b62"}},"overrides":{"esbuild":"^0.28.1"},"repository":{"url":"git+https://github.com/Small-Tale/newsmonger.git","type":"git"},"_npmVersion":"11.19.0","description":"Topic-based news tracker: enter topics, and on a configurable interval the app asks Claude (with web search) for new developments, deduplicating against previously seen stories.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"^4.4.3","hono":"^4.12.25","kerfjs":"^4.1.0","openai":"^6.49.0","@anthropic-ai/sdk":"^0.113.0","@hono/node-server":"^2.0.5"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"c8":"^12.0.0","tsx":"^4.22.4","sass":"^1.97.3","tsup":"^8.5.1","eslint":"^10.5.0","vitest":"^4.1.9","esbuild":"^0.28.1","gitgist":"^1.2.0","@eslint/js":"^10.0.1","typescript":"^5.9.3","@types/node":"^25.9.3","domotion-svg":"^0.21.1","@tauri-apps/cli":"^2.11.2","@playwright/test":"^1.61.0","typescript-eslint":"^8.61.1","@vitest/coverage-v8":"^4.1.9","eslint-plugin-tsdoc":"^0.5.2","@axe-core/playwright":"^4.12.1","eslint-plugin-kerfjs":"^4.1.0","eslint-plugin-import-x":"^4.16.2","monocart-coverage-reports":"2.12.12","eslint-plugin-simple-import-sort":"^12.1.1"},"_npmOperationalInternal":{"tmp":"tmp/newsmonger_0.2.0-beta.19_1786071089255_0.5618822513201842","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.22":{"name":"newsmonger","version":"0.2.0-beta.22","author":{"name":"Small Tale Inc."},"license":"MIT","_id":"newsmonger@0.2.0-beta.22","maintainers":[{"name":"bwestphal","email":"brian.westphal@bleugris.com"}],"homepage":"https://github.com/Small-Tale/newsmonger#readme","bugs":{"url":"https://github.com/Small-Tale/newsmonger/issues"},"bin":{"newsmonger":"dist/cli.js"},"dist":{"shasum":"0c06abb9952aae6c788799e4bf5bff93b81e4bee","tarball":"https://registry.npmjs.org/newsmonger/-/newsmonger-0.2.0-beta.22.tgz","fileCount":10,"integrity":"sha512-sTDf2PSb/g3nOXT7cQvzJwBkapJrK4G0jKsqOvkPBNUwl9Wf6DwXqjCRrikdpMHYgyhtsNRQLzdahkK+7Nh/wg==","signatures":[{"sig":"MEQCIH9ZR3Bc/3yCPdzBt0e4P6sBhCKK0v92eI+jPFhOOXJQAiAYOEbBFgZ+fPpid/RSX0uP2dK47HEd/kJIRZJ6ytvv5g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/newsmonger@0.2.0-beta.22","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1379782},"type":"module","engines":{"node":">=22.5"},"gitHead":"4cdde0815c9150de0dd15203e9f40b0d564551a1","scripts":{"dev":"npm run build:client:dev && node --import tsx/esm src/cli.ts","lint":"eslint src/ tests/ scripts/","test":"vitest run --coverage","build":"tsup","clean":"rm -rf dist node_modules/.cache","tauri":"tauri","release":"bash scripts/release.sh","test:all":"bash scripts/test-all.sh","test:e2e":"npx playwright test","tauri:dev":"npm run build:client && tauri dev","typecheck":"tsc --noEmit","commit:msg":"gitgist --staged --commit-message","dev:server":"npm run build:client:dev && node --import tsx/esm src/cli.ts --no-open --strict-port","gate:quick":"bash scripts/gate-quick.sh","gates:rust":"bash scripts/gates-rust.sh","test:watch":"vitest","demo:stills":"npm run build:client && node --import tsx/esm scripts/demo/capture-stills.ts","tauri:build":"tauri build","build:client":"node -e \"require('fs').mkdirSync('dist/client',{recursive:true})\" && node -e \"for (const f of ['favicon.svg','logo-full-bleed.svg','wordmark-light.svg','wordmark-dark.svg']) require('fs').copyFileSync('assets/'+f,'dist/client/'+f)\" && npx esbuild src/client/app.tsx --bundle --format=iife --outfile=dist/client/app.global.js --target=es2020 --sourcemap --jsx=automatic --jsx-import-source=kerfjs --define:__KERF_DEV__=false && npx sass src/client/styles.scss dist/client/styles.css --style compressed --no-source-map","demo:capture":"npm run build:client && node --import tsx/esm scripts/demo/capture-demo.ts","release:beta":"bash scripts/release.sh --beta","test:e2e:real":"NEWSMONGER_E2E_REAL=1 npx playwright test real-providers","prepublishOnly":"npm run build && npm run build:client","build:client:dev":"node -e \"require('fs').mkdirSync('dist/client',{recursive:true})\" && node -e \"for (const f of ['favicon.svg','logo-full-bleed.svg','wordmark-light.svg','wordmark-dark.svg']) require('fs').copyFileSync('assets/'+f,'dist/client/'+f)\" && npx esbuild src/client/app.tsx --bundle --format=iife --outfile=dist/client/app.global.js --target=es2020 --sourcemap --jsx=automatic --jsx-import-source=kerfjs --define:__KERF_DEV__=true && npx sass src/client/styles.scss dist/client/styles.css --style compressed --no-source-map","record:demo-data":"node --import tsx/esm scripts/record-demo-data.ts","docs:requirements":"node scripts/build-requirements-summary.mjs","release:beta:auto":"bash scripts/release-beta-auto.sh","tauri:build:local":"bash scripts/tauri-build-local.sh","test:e2e:scramble":"node scripts/e2e-scramble.mjs","record:cli-sessions":"node --import tsx/esm scripts/record-cli-sessions.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8c3cb2ab-d327-453d-b74b-c9a4e39b3b62"}},"overrides":{"esbuild":"^0.28.1"},"repository":{"url":"git+https://github.com/Small-Tale/newsmonger.git","type":"git"},"_npmVersion":"11.19.0","description":"Topic-based news tracker: enter topics, and on a configurable interval the app asks Claude (with web search) for new developments, deduplicating against previously seen stories.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"^4.4.3","hono":"^4.12.25","kerfjs":"^4.1.0","openai":"^6.49.0","@anthropic-ai/sdk":"^0.113.0","@hono/node-server":"^2.0.5"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"c8":"^12.0.0","tsx":"^4.22.4","sass":"^1.97.3","tsup":"^8.5.1","eslint":"^10.5.0","vitest":"^4.1.9","esbuild":"^0.28.1","gitgist":"^1.2.0","@eslint/js":"^10.0.1","typescript":"^5.9.3","@types/node":"^25.9.3","domotion-svg":"^0.21.1","@tauri-apps/cli":"^2.11.2","@playwright/test":"^1.61.0","typescript-eslint":"^8.61.1","@vitest/coverage-v8":"^4.1.9","eslint-plugin-tsdoc":"^0.5.2","@axe-core/playwright":"^4.12.1","eslint-plugin-kerfjs":"^4.1.0","eslint-plugin-import-x":"^4.16.2","monocart-coverage-reports":"2.12.12","eslint-plugin-simple-import-sort":"^12.1.1"},"_npmOperationalInternal":{"tmp":"tmp/newsmonger_0.2.0-beta.22_1786172687707_0.449790710613168","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.23":{"name":"newsmonger","version":"0.2.0-beta.23","author":{"name":"Small Tale Inc."},"license":"MIT","_id":"newsmonger@0.2.0-beta.23","maintainers":[{"name":"bwestphal","email":"brian.westphal@bleugris.com"}],"homepage":"https://github.com/Small-Tale/newsmonger#readme","bugs":{"url":"https://github.com/Small-Tale/newsmonger/issues"},"bin":{"newsmonger":"dist/cli.js"},"dist":{"shasum":"fff37bc60b7c50cbaaa32abd525a137a59cc6b8d","tarball":"https://registry.npmjs.org/newsmonger/-/newsmonger-0.2.0-beta.23.tgz","fileCount":10,"integrity":"sha512-9zqVT7xBeFX26UC8d/S8sKJ8LsAjiDK3YqVYjHigX6ifaG/V7XcGXehxdqV5AQ0NWwyz9lZGqImO6Pn+xRcQow==","signatures":[{"sig":"MEUCIQDU9bnUPHZzXF11mP0E2G+/q4CHnAh30MFrfR0sYN1YigIgJ2UY5XCBjXcr+UrVOBG3rjEL6PEEfxutg3HCGccR6mI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/newsmonger@0.2.0-beta.23","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1379793},"type":"module","engines":{"node":">=22.5"},"gitHead":"bd4f142c83fdcc8adb2b71c7b648c3bb54d44c47","scripts":{"dev":"npm run build:client:dev && node --import tsx/esm src/cli.ts","lint":"eslint src/ tests/ scripts/","test":"vitest run --coverage","build":"tsup","clean":"rm -rf dist node_modules/.cache","tauri":"tauri","release":"bash scripts/release.sh","test:all":"bash scripts/test-all.sh","test:e2e":"npx playwright test","tauri:dev":"npm run build:client && tauri dev","typecheck":"tsc --noEmit","commit:msg":"gitgist --staged --commit-message","dev:server":"npm run build:client:dev && node --import tsx/esm src/cli.ts --no-open --strict-port","gate:quick":"bash scripts/gate-quick.sh","gates:rust":"bash scripts/gates-rust.sh","test:watch":"vitest","demo:stills":"npm run build:client && node --import tsx/esm scripts/demo/capture-stills.ts","tauri:build":"tauri build","build:client":"node -e \"require('fs').mkdirSync('dist/client',{recursive:true})\" && node -e \"for (const f of ['favicon.svg','logo-full-bleed.svg','wordmark-light.svg','wordmark-dark.svg']) require('fs').copyFileSync('assets/'+f,'dist/client/'+f)\" && npx esbuild src/client/app.tsx --bundle --format=iife --outfile=dist/client/app.global.js --target=es2020 --sourcemap --jsx=automatic --jsx-import-source=kerfjs --define:__KERF_DEV__=false && npx sass src/client/styles.scss dist/client/styles.css --style compressed --no-source-map","demo:capture":"npm run build:client && node --import tsx/esm scripts/demo/capture-demo.ts","release:beta":"bash scripts/release.sh --beta","test:e2e:real":"NEWSMONGER_E2E_REAL=1 npx playwright test real-providers","prepublishOnly":"npm run build && npm run build:client","build:client:dev":"node -e \"require('fs').mkdirSync('dist/client',{recursive:true})\" && node -e \"for (const f of ['favicon.svg','logo-full-bleed.svg','wordmark-light.svg','wordmark-dark.svg']) require('fs').copyFileSync('assets/'+f,'dist/client/'+f)\" && npx esbuild src/client/app.tsx --bundle --format=iife --outfile=dist/client/app.global.js --target=es2020 --sourcemap --jsx=automatic --jsx-import-source=kerfjs --define:__KERF_DEV__=true && npx sass src/client/styles.scss dist/client/styles.css --style compressed --no-source-map","record:demo-data":"node --import tsx/esm scripts/record-demo-data.ts","docs:requirements":"node scripts/build-requirements-summary.mjs","release:beta:auto":"bash scripts/release-beta-auto.sh","tauri:build:local":"bash scripts/tauri-build-local.sh","test:e2e:scramble":"node scripts/e2e-scramble.mjs","record:cli-sessions":"node --import tsx/esm scripts/record-cli-sessions.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8c3cb2ab-d327-453d-b74b-c9a4e39b3b62"}},"overrides":{"esbuild":"^0.28.1"},"repository":{"url":"git+https://github.com/Small-Tale/newsmonger.git","type":"git"},"_npmVersion":"11.19.0","description":"Topic-based news tracker: enter topics, and on a configurable interval the app asks Claude (with web search) for new developments, deduplicating against previously seen stories.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"^4.4.3","hono":"^4.12.25","kerfjs":"^4.1.0","openai":"^6.49.0","@anthropic-ai/sdk":"^0.113.0","@hono/node-server":"^2.0.5"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"c8":"^12.0.0","tsx":"^4.22.4","sass":"^1.97.3","tsup":"^8.5.1","eslint":"^10.5.0","vitest":"^4.1.9","esbuild":"^0.28.1","gitgist":"^1.2.0","@eslint/js":"^10.0.1","typescript":"^5.9.3","@types/node":"^25.9.3","domotion-svg":"^0.21.1","@tauri-apps/cli":"^2.11.2","@playwright/test":"^1.61.0","typescript-eslint":"^8.61.1","@vitest/coverage-v8":"^4.1.9","eslint-plugin-tsdoc":"^0.5.2","@axe-core/playwright":"^4.12.1","eslint-plugin-kerfjs":"^4.1.0","eslint-plugin-import-x":"^4.16.2","monocart-coverage-reports":"2.12.12","eslint-plugin-simple-import-sort":"^12.1.1"},"_npmOperationalInternal":{"tmp":"tmp/newsmonger_0.2.0-beta.23_1786243137877_0.09011379195448277","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.24":{"name":"newsmonger","version":"0.2.0-beta.24","author":{"name":"Small Tale Inc."},"license":"MIT","_id":"newsmonger@0.2.0-beta.24","maintainers":[{"name":"bwestphal","email":"brian.westphal@bleugris.com"}],"homepage":"https://github.com/Small-Tale/newsmonger#readme","bugs":{"url":"https://github.com/Small-Tale/newsmonger/issues"},"bin":{"newsmonger":"dist/cli.js"},"dist":{"shasum":"28bb0c460f967ef688cbc1b9f998c6df6e0897a6","tarball":"https://registry.npmjs.org/newsmonger/-/newsmonger-0.2.0-beta.24.tgz","fileCount":10,"integrity":"sha512-QGkAz5TdWG7MgFvELYb2obC03LIFtEdjU8Q1aMh1PYfnXiB+vPrQBhO6B089qRSi+Kgzvr8iDyDCZjS+RzcreA==","signatures":[{"sig":"MEUCIQCy1xMC/qeHLZWKRnw/Sn+ZhvqssD/8E3x2f6RS5fAHRwIgZhyWNcVCsHYUwoF8YRrqQ8S88ajPMmWTxAJUt/rdT9Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/newsmonger@0.2.0-beta.24","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1382724},"type":"module","engines":{"node":">=22.5"},"gitHead":"2e4153222c05f52c931dd14397c40eb549b2938e","scripts":{"dev":"npm run build:client:dev && node --import tsx/esm src/cli.ts","lint":"eslint src/ tests/ scripts/","test":"vitest run --coverage","build":"tsup","clean":"rm -rf dist node_modules/.cache","tauri":"tauri","release":"bash scripts/release.sh","test:all":"bash scripts/test-all.sh","test:e2e":"npx playwright test","tauri:dev":"npm run build:client && tauri dev","typecheck":"tsc --noEmit","commit:msg":"gitgist --staged --commit-message","dev:server":"npm run build:client:dev && node --import tsx/esm src/cli.ts --no-open --strict-port","gate:quick":"bash scripts/gate-quick.sh","gates:rust":"bash scripts/gates-rust.sh","test:watch":"vitest","demo:stills":"npm run build:client && node --import tsx/esm scripts/demo/capture-stills.ts","tauri:build":"tauri build","build:client":"node -e \"require('fs').mkdirSync('dist/client',{recursive:true})\" && node -e \"for (const f of ['favicon.svg','logo-full-bleed.svg','wordmark-light.svg','wordmark-dark.svg']) require('fs').copyFileSync('assets/'+f,'dist/client/'+f)\" && npx esbuild src/client/app.tsx --bundle --format=iife --outfile=dist/client/app.global.js --target=es2020 --sourcemap --jsx=automatic --jsx-import-source=kerfjs --define:__KERF_DEV__=false && npx sass src/client/styles.scss dist/client/styles.css --style compressed --no-source-map","demo:capture":"npm run build:client && node --import tsx/esm scripts/demo/capture-demo.ts","release:beta":"bash scripts/release.sh --beta","test:e2e:real":"NEWSMONGER_E2E_REAL=1 npx playwright test real-providers","prepublishOnly":"npm run build && npm run build:client","build:client:dev":"node -e \"require('fs').mkdirSync('dist/client',{recursive:true})\" && node -e \"for (const f of ['favicon.svg','logo-full-bleed.svg','wordmark-light.svg','wordmark-dark.svg']) require('fs').copyFileSync('assets/'+f,'dist/client/'+f)\" && npx esbuild src/client/app.tsx --bundle --format=iife --outfile=dist/client/app.global.js --target=es2020 --sourcemap --jsx=automatic --jsx-import-source=kerfjs --define:__KERF_DEV__=true && npx sass src/client/styles.scss dist/client/styles.css --style compressed --no-source-map","record:demo-data":"node --import tsx/esm scripts/record-demo-data.ts","docs:requirements":"node scripts/build-requirements-summary.mjs","release:beta:auto":"bash scripts/release-beta-auto.sh","tauri:build:local":"bash scripts/tauri-build-local.sh","test:e2e:scramble":"node scripts/e2e-scramble.mjs","record:cli-sessions":"node --import tsx/esm scripts/record-cli-sessions.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8c3cb2ab-d327-453d-b74b-c9a4e39b3b62"}},"overrides":{"esbuild":"^0.28.1"},"repository":{"url":"git+https://github.com/Small-Tale/newsmonger.git","type":"git"},"_npmVersion":"11.19.0","description":"Topic-based news tracker: enter topics, and on a configurable interval the app asks Claude (with web search) for new developments, deduplicating against previously seen stories.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"^4.4.3","hono":"^4.12.25","kerfjs":"^4.1.0","openai":"^6.49.0","@anthropic-ai/sdk":"^0.113.0","@hono/node-server":"^2.0.5"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"c8":"^12.0.0","tsx":"^4.22.4","sass":"^1.97.3","tsup":"^8.5.1","eslint":"^10.5.0","vitest":"^4.1.9","esbuild":"^0.28.1","gitgist":"^1.2.0","@eslint/js":"^10.0.1","typescript":"^5.9.3","@types/node":"^25.9.3","domotion-svg":"^0.21.1","@tauri-apps/cli":"^2.11.2","@playwright/test":"^1.61.0","typescript-eslint":"^8.61.1","@vitest/coverage-v8":"^4.1.9","eslint-plugin-tsdoc":"^0.5.2","@axe-core/playwright":"^4.12.1","eslint-plugin-kerfjs":"^4.1.0","eslint-plugin-import-x":"^4.16.2","monocart-coverage-reports":"2.12.12","eslint-plugin-simple-import-sort":"^12.1.1"},"_npmOperationalInternal":{"tmp":"tmp/newsmonger_0.2.0-beta.24_1786320608446_0.9557224688121928","host":"s3://npm-registry-packages-npm-production"}},"0.3.0-rc.1":{"name":"newsmonger","version":"0.3.0-rc.1","author":{"name":"Small Tale Inc."},"license":"MIT","_id":"newsmonger@0.3.0-rc.1","maintainers":[{"name":"bwestphal","email":"brian.westphal@bleugris.com"}],"homepage":"https://github.com/Small-Tale/newsmonger#readme","bugs":{"url":"https://github.com/Small-Tale/newsmonger/issues"},"bin":{"newsmonger":"dist/cli.js"},"dist":{"shasum":"59073c5dc32bc2d199ec78f39561038a6ac57c50","tarball":"https://registry.npmjs.org/newsmonger/-/newsmonger-0.3.0-rc.1.tgz","fileCount":10,"integrity":"sha512-rwYpUgodLYJN4vAWTEhjoQ8mLusDg1Hwi6a2qi+X4b1Zo2V4OTz9m+2N4wbozMhn0fWtitkx6sfcRPkjJY5mxg==","signatures":[{"sig":"MEQCIEbiGnDNdqMAfkWkaaKr8NHcJOWJFdR1D9M2liFt/fwiAiAkTeuYSShaHaSJ91iHg5j+TgLw4ROcSJ869sHpY73+yw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/newsmonger@0.3.0-rc.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1382721},"type":"module","engines":{"node":">=22.5"},"gitHead":"493fe12e9daf8f5dbc44dccbefaf41468adcb95a","scripts":{"dev":"npm run build:client:dev && node --import tsx/esm src/cli.ts","lint":"eslint src/ tests/ scripts/","test":"vitest run --coverage","build":"tsup","clean":"rm -rf dist node_modules/.cache","tauri":"tauri","release":"bash scripts/release.sh","test:all":"bash scripts/test-all.sh","test:e2e":"npx playwright test","tauri:dev":"npm run build:client && tauri dev","typecheck":"tsc --noEmit","commit:msg":"gitgist --staged --commit-message","dev:server":"npm run build:client:dev && node --import tsx/esm src/cli.ts --no-open --strict-port","gate:quick":"bash scripts/gate-quick.sh","gates:rust":"bash scripts/gates-rust.sh","test:watch":"vitest","demo:stills":"npm run build:client && node --import tsx/esm scripts/demo/capture-stills.ts","tauri:build":"tauri build","build:client":"node -e \"require('fs').mkdirSync('dist/client',{recursive:true})\" && node -e \"for (const f of ['favicon.svg','logo-full-bleed.svg','wordmark-light.svg','wordmark-dark.svg']) require('fs').copyFileSync('assets/'+f,'dist/client/'+f)\" && npx esbuild src/client/app.tsx --bundle --format=iife --outfile=dist/client/app.global.js --target=es2020 --sourcemap --jsx=automatic --jsx-import-source=kerfjs --define:__KERF_DEV__=false && npx sass src/client/styles.scss dist/client/styles.css --style compressed --no-source-map","demo:capture":"npm run build:client && node --import tsx/esm scripts/demo/capture-demo.ts","release:beta":"bash scripts/release.sh --beta","test:e2e:real":"NEWSMONGER_E2E_REAL=1 npx playwright test real-providers","prepublishOnly":"npm run build && npm run build:client","build:client:dev":"node -e \"require('fs').mkdirSync('dist/client',{recursive:true})\" && node -e \"for (const f of ['favicon.svg','logo-full-bleed.svg','wordmark-light.svg','wordmark-dark.svg']) require('fs').copyFileSync('assets/'+f,'dist/client/'+f)\" && npx esbuild src/client/app.tsx --bundle --format=iife --outfile=dist/client/app.global.js --target=es2020 --sourcemap --jsx=automatic --jsx-import-source=kerfjs --define:__KERF_DEV__=true && npx sass src/client/styles.scss dist/client/styles.css --style compressed --no-source-map","record:demo-data":"node --import tsx/esm scripts/record-demo-data.ts","docs:requirements":"node scripts/build-requirements-summary.mjs","release:beta:auto":"bash scripts/release-beta-auto.sh","tauri:build:local":"bash scripts/tauri-build-local.sh","test:e2e:scramble":"node scripts/e2e-scramble.mjs","record:cli-sessions":"node --import tsx/esm scripts/record-cli-sessions.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8c3cb2ab-d327-453d-b74b-c9a4e39b3b62"}},"overrides":{"esbuild":"^0.28.1"},"repository":{"url":"git+https://github.com/Small-Tale/newsmonger.git","type":"git"},"_npmVersion":"11.19.0","description":"Topic-based news tracker: enter topics, and on a configurable interval the app asks Claude (with web search) for new developments, deduplicating against previously seen stories.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"^4.4.3","hono":"^4.12.25","kerfjs":"^4.1.0","openai":"^6.49.0","@anthropic-ai/sdk":"^0.113.0","@hono/node-server":"^2.0.5"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"c8":"^12.0.0","tsx":"^4.22.4","sass":"^1.97.3","tsup":"^8.5.1","eslint":"^10.5.0","vitest":"^4.1.9","esbuild":"^0.28.1","gitgist":"^1.2.0","@eslint/js":"^10.0.1","typescript":"^5.9.3","@types/node":"^25.9.3","domotion-svg":"^0.21.1","@tauri-apps/cli":"^2.11.2","@playwright/test":"^1.61.0","typescript-eslint":"^8.61.1","@vitest/coverage-v8":"^4.1.9","eslint-plugin-tsdoc":"^0.5.2","@axe-core/playwright":"^4.12.1","eslint-plugin-kerfjs":"^4.1.0","eslint-plugin-import-x":"^4.16.2","monocart-coverage-reports":"2.12.12","eslint-plugin-simple-import-sort":"^12.1.1"},"_npmOperationalInternal":{"tmp":"tmp/newsmonger_0.3.0-rc.1_1786323262695_0.04936890817776041","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"newsmonger","version":"0.3.0","author":{"name":"Small Tale Inc."},"license":"MIT","_id":"newsmonger@0.3.0","maintainers":[{"name":"bwestphal","email":"brian.westphal@bleugris.com"}],"homepage":"https://github.com/Small-Tale/newsmonger#readme","bugs":{"url":"https://github.com/Small-Tale/newsmonger/issues"},"bin":{"newsmonger":"dist/cli.js"},"dist":{"shasum":"8025087c06c6d1944c3e1fab35ccc3eb623dd1e0","tarball":"https://registry.npmjs.org/newsmonger/-/newsmonger-0.3.0.tgz","fileCount":10,"integrity":"sha512-Pj8GxmX20nIs89X/JPsz+s5lR1bhSOeGOUra6sTS6THeHRtdKF7i6U6NzLF12OdzoClixkSfz+0jQfAWIt8dVg==","signatures":[{"sig":"MEQCIF/7lcb7BJJU2Il4HPjZoHF2ZxW7tCcJUlGdJQsGJozkAiBC6dWdq/BKlA7bc3MuxbE/HaH6RbnQyx6YB+dOF0vuKg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/newsmonger@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1382716},"type":"module","engines":{"node":">=22.5"},"gitHead":"493fe12e9daf8f5dbc44dccbefaf41468adcb95a","scripts":{"dev":"npm run build:client:dev && node --import tsx/esm src/cli.ts","lint":"eslint src/ tests/ scripts/","test":"vitest run --coverage","build":"tsup","clean":"rm -rf dist node_modules/.cache","tauri":"tauri","release":"bash scripts/release.sh","test:all":"bash scripts/test-all.sh","test:e2e":"npx playwright test","tauri:dev":"npm run build:client && tauri dev","typecheck":"tsc --noEmit","commit:msg":"gitgist --staged --commit-message","dev:server":"npm run build:client:dev && node --import tsx/esm src/cli.ts --no-open --strict-port","gate:quick":"bash scripts/gate-quick.sh","gates:rust":"bash scripts/gates-rust.sh","test:watch":"vitest","demo:stills":"npm run build:client && node --import tsx/esm scripts/demo/capture-stills.ts","tauri:build":"tauri build","build:client":"node -e \"require('fs').mkdirSync('dist/client',{recursive:true})\" && node -e \"for (const f of ['favicon.svg','logo-full-bleed.svg','wordmark-light.svg','wordmark-dark.svg']) require('fs').copyFileSync('assets/'+f,'dist/client/'+f)\" && npx esbuild src/client/app.tsx --bundle --format=iife --outfile=dist/client/app.global.js --target=es2020 --sourcemap --jsx=automatic --jsx-import-source=kerfjs --define:__KERF_DEV__=false && npx sass src/client/styles.scss dist/client/styles.css --style compressed --no-source-map","demo:capture":"npm run build:client && node --import tsx/esm scripts/demo/capture-demo.ts","release:beta":"bash scripts/release.sh --beta","test:e2e:real":"NEWSMONGER_E2E_REAL=1 npx playwright test real-providers","prepublishOnly":"npm run build && npm run build:client","build:client:dev":"node -e \"require('fs').mkdirSync('dist/client',{recursive:true})\" && node -e \"for (const f of ['favicon.svg','logo-full-bleed.svg','wordmark-light.svg','wordmark-dark.svg']) require('fs').copyFileSync('assets/'+f,'dist/client/'+f)\" && npx esbuild src/client/app.tsx --bundle --format=iife --outfile=dist/client/app.global.js --target=es2020 --sourcemap --jsx=automatic --jsx-import-source=kerfjs --define:__KERF_DEV__=true && npx sass src/client/styles.scss dist/client/styles.css --style compressed --no-source-map","record:demo-data":"node --import tsx/esm scripts/record-demo-data.ts","docs:requirements":"node scripts/build-requirements-summary.mjs","release:beta:auto":"bash scripts/release-beta-auto.sh","tauri:build:local":"bash scripts/tauri-build-local.sh","test:e2e:scramble":"node scripts/e2e-scramble.mjs","record:cli-sessions":"node --import tsx/esm scripts/record-cli-sessions.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8c3cb2ab-d327-453d-b74b-c9a4e39b3b62"}},"overrides":{"esbuild":"^0.28.1"},"repository":{"url":"git+https://github.com/Small-Tale/newsmonger.git","type":"git"},"_npmVersion":"11.19.0","description":"Topic-based news tracker: enter topics, and on a configurable interval the app asks Claude (with web search) for new developments, deduplicating against previously seen stories.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"^4.4.3","hono":"^4.12.25","kerfjs":"^4.1.0","openai":"^6.49.0","@anthropic-ai/sdk":"^0.113.0","@hono/node-server":"^2.0.5"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^12.0.0","tsx":"^4.22.4","sass":"^1.97.3","tsup":"^8.5.1","eslint":"^10.5.0","vitest":"^4.1.9","esbuild":"^0.28.1","gitgist":"^1.2.0","@eslint/js":"^10.0.1","typescript":"^5.9.3","@types/node":"^25.9.3","domotion-svg":"^0.21.1","@tauri-apps/cli":"^2.11.2","@playwright/test":"^1.61.0","typescript-eslint":"^8.61.1","@vitest/coverage-v8":"^4.1.9","eslint-plugin-tsdoc":"^0.5.2","@axe-core/playwright":"^4.12.1","eslint-plugin-kerfjs":"^4.1.0","eslint-plugin-import-x":"^4.16.2","monocart-coverage-reports":"2.12.12","eslint-plugin-simple-import-sort":"^12.1.1"},"_npmOperationalInternal":{"tmp":"tmp/newsmonger_0.3.0_1786323325063_0.08423791002622472","host":"s3://npm-registry-packages-npm-production"}},"0.4.0-beta.1":{"name":"newsmonger","version":"0.4.0-beta.1","author":{"name":"Small Tale Inc."},"license":"MIT","_id":"newsmonger@0.4.0-beta.1","maintainers":[{"name":"bwestphal","email":"brian.westphal@bleugris.com"}],"homepage":"https://github.com/Small-Tale/newsmonger#readme","bugs":{"url":"https://github.com/Small-Tale/newsmonger/issues"},"bin":{"newsmonger":"dist/cli.js"},"dist":{"shasum":"43ab599490aefd2f751a17d0f071c182328b7ea8","tarball":"https://registry.npmjs.org/newsmonger/-/newsmonger-0.4.0-beta.1.tgz","fileCount":10,"integrity":"sha512-3MC9P5rhli/Rvw088onmKZgFrPtfpSoKT6LgLW1gkfYu3d+cpQnDKVDYIw08UkJ+XqlGdFODcwPnDm8UxjQZ+A==","signatures":[{"sig":"MEQCICDQwuQsYqCPDaZ2Z0SMXAftVfi3PCUFXiOfY6mYspVjAiBzgfOs+lVofMM/6SYMEFMLBrm2u3v4tn1oRGQWFw8Ckw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/newsmonger@0.4.0-beta.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1383026},"type":"module","engines":{"node":">=22.5"},"gitHead":"5f881429f35e311d21714382b0883a1141d63ebc","scripts":{"dev":"npm run build:client:dev && node --import tsx/esm src/cli.ts","lint":"eslint src/ tests/ scripts/","test":"vitest run --coverage","build":"tsup","clean":"rm -rf dist node_modules/.cache","tauri":"tauri","release":"bash scripts/release.sh","test:all":"bash scripts/test-all.sh","test:e2e":"npx playwright test","tauri:dev":"npm run build:client && tauri dev","typecheck":"tsc --noEmit","commit:msg":"gitgist --staged --commit-message","dev:server":"npm run build:client:dev && node --import tsx/esm src/cli.ts --no-open --strict-port","gate:quick":"bash scripts/gate-quick.sh","gates:rust":"bash scripts/gates-rust.sh","test:watch":"vitest","demo:stills":"npm run build:client && node --import tsx/esm scripts/demo/capture-stills.ts","tauri:build":"tauri build","build:client":"node -e \"require('fs').mkdirSync('dist/client',{recursive:true})\" && node -e \"for (const f of ['favicon.svg','logo-full-bleed.svg','wordmark-light.svg','wordmark-dark.svg']) require('fs').copyFileSync('assets/'+f,'dist/client/'+f)\" && npx esbuild src/client/app.tsx --bundle --format=iife --outfile=dist/client/app.global.js --target=es2020 --sourcemap --jsx=automatic --jsx-import-source=kerfjs --define:__KERF_DEV__=false && npx sass src/client/styles.scss dist/client/styles.css --style compressed --no-source-map","demo:capture":"npm run build:client && node --import tsx/esm scripts/demo/capture-demo.ts","release:beta":"bash scripts/release.sh --beta","test:e2e:real":"NEWSMONGER_E2E_REAL=1 npx playwright test real-providers","prepublishOnly":"npm run build && npm run build:client","build:client:dev":"node -e \"require('fs').mkdirSync('dist/client',{recursive:true})\" && node -e \"for (const f of ['favicon.svg','logo-full-bleed.svg','wordmark-light.svg','wordmark-dark.svg']) require('fs').copyFileSync('assets/'+f,'dist/client/'+f)\" && npx esbuild src/client/app.tsx --bundle --format=iife --outfile=dist/client/app.global.js --target=es2020 --sourcemap --jsx=automatic --jsx-import-source=kerfjs --define:__KERF_DEV__=true && npx sass src/client/styles.scss dist/client/styles.css --style compressed --no-source-map","record:demo-data":"node --import tsx/esm scripts/record-demo-data.ts","docs:requirements":"node scripts/build-requirements-summary.mjs","release:beta:auto":"bash scripts/release-beta-auto.sh","tauri:build:local":"bash scripts/tauri-build-local.sh","test:e2e:scramble":"node scripts/e2e-scramble.mjs","record:cli-sessions":"node --import tsx/esm scripts/record-cli-sessions.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8c3cb2ab-d327-453d-b74b-c9a4e39b3b62"}},"overrides":{"esbuild":"^0.28.1"},"repository":{"url":"git+https://github.com/Small-Tale/newsmonger.git","type":"git"},"_npmVersion":"11.19.0","description":"Topic-based news tracker: enter topics, and on a configurable interval the app asks Claude (with web search) for new developments, deduplicating against previously seen stories.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"^4.4.3","hono":"^4.12.25","kerfjs":"^4.1.0","openai":"^6.49.0","@anthropic-ai/sdk":"^0.113.0","@hono/node-server":"^2.0.5"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"c8":"^12.0.0","tsx":"^4.22.4","sass":"^1.97.3","tsup":"^8.5.1","eslint":"^10.5.0","vitest":"^4.1.9","esbuild":"^0.28.1","gitgist":"^1.2.0","@eslint/js":"^10.0.1","typescript":"^5.9.3","@types/node":"^25.9.3","domotion-svg":"^0.21.1","@tauri-apps/cli":"^2.11.2","@playwright/test":"^1.61.0","typescript-eslint":"^8.61.1","@vitest/coverage-v8":"^4.1.9","eslint-plugin-tsdoc":"^0.5.2","@axe-core/playwright":"^4.12.1","eslint-plugin-kerfjs":"^4.1.0","eslint-plugin-import-x":"^4.16.2","monocart-coverage-reports":"2.12.12","eslint-plugin-simple-import-sort":"^12.1.1"},"_npmOperationalInternal":{"tmp":"tmp/newsmonger_0.4.0-beta.1_1786329078270_0.542406412972797","host":"s3://npm-registry-packages-npm-production"}},"0.4.0-beta.2":{"name":"newsmonger","version":"0.4.0-beta.2","author":{"name":"Small Tale Inc."},"license":"MIT","_id":"newsmonger@0.4.0-beta.2","maintainers":[{"name":"bwestphal","email":"brian.westphal@bleugris.com"}],"homepage":"https://github.com/Small-Tale/newsmonger#readme","bugs":{"url":"https://github.com/Small-Tale/newsmonger/issues"},"bin":{"newsmonger":"dist/cli.js"},"dist":{"shasum":"f581d7b69dafb023463e87bc2bd8d7fd59b99ac7","tarball":"https://registry.npmjs.org/newsmonger/-/newsmonger-0.4.0-beta.2.tgz","fileCount":10,"integrity":"sha512-vxCXO/6sQ6q0J6x0waB1GMfcYPwk4eWfoS3fbHk1V8+c/hPsZwRPdZK8jOArfxZ6iejEa3S4aOWuSmZz+aRlSw==","signatures":[{"sig":"MEUCIQDMaasXLV6pYQqX1BI/9SBSHCPn+qG7A2Xij06BVlMyOQIgKbvfrHEjPbmvTBn1qvM+yeR1tKJ9GYs3Tde1Bifr67k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/newsmonger@0.4.0-beta.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1383026},"type":"module","engines":{"node":">=22.5"},"gitHead":"baaa2a5e96e59fee2ac505b5cb711edb0f2757f2","scripts":{"dev":"npm run build:client:dev && node --import tsx/esm src/cli.ts","lint":"eslint src/ tests/ scripts/","test":"vitest run --coverage","build":"tsup","clean":"rm -rf dist node_modules/.cache","tauri":"tauri","release":"bash scripts/release.sh","test:all":"bash scripts/test-all.sh","test:e2e":"npx playwright test","tauri:dev":"npm run build:client && tauri dev","typecheck":"tsc --noEmit","commit:msg":"gitgist --staged --commit-message","dev:server":"npm run build:client:dev && node --import tsx/esm src/cli.ts --no-open --strict-port","gate:quick":"bash scripts/gate-quick.sh","gates:rust":"bash scripts/gates-rust.sh","test:watch":"vitest","demo:stills":"npm run build:client && node --import tsx/esm scripts/demo/capture-stills.ts","tauri:build":"tauri build","build:client":"node -e \"require('fs').mkdirSync('dist/client',{recursive:true})\" && node -e \"for (const f of ['favicon.svg','logo-full-bleed.svg','wordmark-light.svg','wordmark-dark.svg']) require('fs').copyFileSync('assets/'+f,'dist/client/'+f)\" && npx esbuild src/client/app.tsx --bundle --format=iife --outfile=dist/client/app.global.js --target=es2020 --sourcemap --jsx=automatic --jsx-import-source=kerfjs --define:__KERF_DEV__=false && npx sass src/client/styles.scss dist/client/styles.css --style compressed --no-source-map","demo:capture":"npm run build:client && node --import tsx/esm scripts/demo/capture-demo.ts","release:beta":"bash scripts/release.sh --beta","test:e2e:real":"NEWSMONGER_E2E_REAL=1 npx playwright test real-providers","prepublishOnly":"npm run build && npm run build:client","build:client:dev":"node -e \"require('fs').mkdirSync('dist/client',{recursive:true})\" && node -e \"for (const f of ['favicon.svg','logo-full-bleed.svg','wordmark-light.svg','wordmark-dark.svg']) require('fs').copyFileSync('assets/'+f,'dist/client/'+f)\" && npx esbuild src/client/app.tsx --bundle --format=iife --outfile=dist/client/app.global.js --target=es2020 --sourcemap --jsx=automatic --jsx-import-source=kerfjs --define:__KERF_DEV__=true && npx sass src/client/styles.scss dist/client/styles.css --style compressed --no-source-map","record:demo-data":"node --import tsx/esm scripts/record-demo-data.ts","docs:requirements":"node scripts/build-requirements-summary.mjs","release:beta:auto":"bash scripts/release-beta-auto.sh","tauri:build:local":"bash scripts/tauri-build-local.sh","test:e2e:scramble":"node scripts/e2e-scramble.mjs","record:cli-sessions":"node --import tsx/esm scripts/record-cli-sessions.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8c3cb2ab-d327-453d-b74b-c9a4e39b3b62"}},"overrides":{"esbuild":"^0.28.1"},"repository":{"url":"git+https://github.com/Small-Tale/newsmonger.git","type":"git"},"_npmVersion":"11.19.0","description":"Topic-based news tracker: enter topics, and on a configurable interval the app asks Claude (with web search) for new developments, deduplicating against previously seen stories.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"^4.4.3","hono":"^4.12.25","kerfjs":"^4.1.0","openai":"^6.49.0","@anthropic-ai/sdk":"^0.113.0","@hono/node-server":"^2.0.5"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"c8":"^12.0.0","tsx":"^4.22.4","sass":"^1.97.3","tsup":"^8.5.1","eslint":"^10.5.0","vitest":"^4.1.9","esbuild":"^0.28.1","gitgist":"^1.2.0","@eslint/js":"^10.0.1","typescript":"^5.9.3","@types/node":"^25.9.3","domotion-svg":"^0.21.1","@tauri-apps/cli":"^2.11.2","@playwright/test":"^1.61.0","typescript-eslint":"^8.61.1","@vitest/coverage-v8":"^4.1.9","eslint-plugin-tsdoc":"^0.5.2","@axe-core/playwright":"^4.12.1","eslint-plugin-kerfjs":"^4.1.0","eslint-plugin-import-x":"^4.16.2","monocart-coverage-reports":"2.12.12","eslint-plugin-simple-import-sort":"^12.1.1"},"_npmOperationalInternal":{"tmp":"tmp/newsmonger_0.4.0-beta.2_1786350986873_0.8664836501616862","host":"s3://npm-registry-packages-npm-production"}},"0.4.0-beta.3":{"name":"newsmonger","version":"0.4.0-beta.3","author":{"name":"Small Tale Inc."},"license":"MIT","_id":"newsmonger@0.4.0-beta.3","maintainers":[{"name":"bwestphal","email":"brian.westphal@bleugris.com"}],"homepage":"https://github.com/Small-Tale/newsmonger#readme","bugs":{"url":"https://github.com/Small-Tale/newsmonger/issues"},"bin":{"newsmonger":"dist/cli.js"},"dist":{"shasum":"3b8dd7f7447bc9bd6b9600f5e4ee853f14a3ec81","tarball":"https://registry.npmjs.org/newsmonger/-/newsmonger-0.4.0-beta.3.tgz","fileCount":10,"integrity":"sha512-Md42R1t6cfS/E2zHn1Dn7mD+O0TFbCR+mjgCnP/MqS7D4VHXGGGC3sxlJHtwBpbYofCTzLUM2TDnAGtWTQR0Fg==","signatures":[{"sig":"MEMCIC/w0occUR8fqMoHRYS/3p8UmlfKt3aE56bv4k7Iw8DUAh8aSVQugWGM7FytOavIEtQUyMLQ+jKr2PFaGLyZf8tl","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/newsmonger@0.4.0-beta.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1383026},"type":"module","engines":{"node":">=22.5"},"gitHead":"eb8a7210a94fd8aede6a3e6115d42ad57c559de0","scripts":{"dev":"npm run build:client:dev && node --import tsx/esm src/cli.ts","lint":"eslint src/ tests/ scripts/","test":"vitest run --coverage","build":"tsup","clean":"rm -rf dist node_modules/.cache","tauri":"tauri","release":"bash scripts/release.sh","test:all":"bash scripts/test-all.sh","test:e2e":"npx playwright test","tauri:dev":"npm run build:client && tauri dev","typecheck":"tsc --noEmit","commit:msg":"gitgist --staged --commit-message","dev:server":"npm run build:client:dev && node --import tsx/esm src/cli.ts --no-open --strict-port","gate:quick":"bash scripts/gate-quick.sh","gates:rust":"bash scripts/gates-rust.sh","test:watch":"vitest","demo:stills":"npm run build:client && node --import tsx/esm scripts/demo/capture-stills.ts","tauri:build":"tauri build","build:client":"node -e \"require('fs').mkdirSync('dist/client',{recursive:true})\" && node -e \"for (const f of ['favicon.svg','logo-full-bleed.svg','wordmark-light.svg','wordmark-dark.svg']) require('fs').copyFileSync('assets/'+f,'dist/client/'+f)\" && npx esbuild src/client/app.tsx --bundle --format=iife --outfile=dist/client/app.global.js --target=es2020 --sourcemap --jsx=automatic --jsx-import-source=kerfjs --define:__KERF_DEV__=false && npx sass src/client/styles.scss dist/client/styles.css --style compressed --no-source-map","demo:capture":"npm run build:client && node --import tsx/esm scripts/demo/capture-demo.ts","release:beta":"bash scripts/release.sh --beta","test:e2e:real":"NEWSMONGER_E2E_REAL=1 npx playwright test real-providers","prepublishOnly":"npm run build && npm run build:client","build:client:dev":"node -e \"require('fs').mkdirSync('dist/client',{recursive:true})\" && node -e \"for (const f of ['favicon.svg','logo-full-bleed.svg','wordmark-light.svg','wordmark-dark.svg']) require('fs').copyFileSync('assets/'+f,'dist/client/'+f)\" && npx esbuild src/client/app.tsx --bundle --format=iife --outfile=dist/client/app.global.js --target=es2020 --sourcemap --jsx=automatic --jsx-import-source=kerfjs --define:__KERF_DEV__=true && npx sass src/client/styles.scss dist/client/styles.css --style compressed --no-source-map","record:demo-data":"node --import tsx/esm scripts/record-demo-data.ts","docs:requirements":"node scripts/build-requirements-summary.mjs","release:beta:auto":"bash scripts/release-beta-auto.sh","tauri:build:local":"bash scripts/tauri-build-local.sh","test:e2e:scramble":"node scripts/e2e-scramble.mjs","record:cli-sessions":"node --import tsx/esm scripts/record-cli-sessions.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8c3cb2ab-d327-453d-b74b-c9a4e39b3b62"}},"overrides":{"esbuild":"^0.28.1"},"repository":{"url":"git+https://github.com/Small-Tale/newsmonger.git","type":"git"},"_npmVersion":"11.19.0","description":"Topic-based news tracker: enter topics, and on a configurable interval the app asks Claude (with web search) for new developments, deduplicating against previously seen stories.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"^4.4.3","hono":"^4.12.25","kerfjs":"^4.1.0","openai":"^6.49.0","@anthropic-ai/sdk":"^0.113.0","@hono/node-server":"^2.0.5"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"c8":"^12.0.0","tsx":"^4.22.4","sass":"^1.97.3","tsup":"^8.5.1","eslint":"^10.5.0","vitest":"^4.1.9","esbuild":"^0.28.1","gitgist":"^1.2.0","@eslint/js":"^10.0.1","typescript":"^5.9.3","@types/node":"^25.9.3","domotion-svg":"^0.21.1","@tauri-apps/cli":"^2.11.2","@playwright/test":"^1.61.0","typescript-eslint":"^8.61.1","@vitest/coverage-v8":"^4.1.9","eslint-plugin-tsdoc":"^0.5.2","@axe-core/playwright":"^4.12.1","eslint-plugin-kerfjs":"^4.1.0","eslint-plugin-import-x":"^4.16.2","monocart-coverage-reports":"2.12.12","eslint-plugin-simple-import-sort":"^12.1.1"},"_npmOperationalInternal":{"tmp":"tmp/newsmonger_0.4.0-beta.3_1786354149725_0.7080091951494027","host":"s3://npm-registry-packages-npm-production"}},"0.4.0-rc.2":{"name":"newsmonger","version":"0.4.0-rc.2","author":{"name":"Small Tale Inc."},"license":"MIT","_id":"newsmonger@0.4.0-rc.2","maintainers":[{"name":"bwestphal","email":"brian.westphal@bleugris.com"}],"homepage":"https://github.com/Small-Tale/newsmonger#readme","bugs":{"url":"https://github.com/Small-Tale/newsmonger/issues"},"bin":{"newsmonger":"dist/cli.js"},"dist":{"shasum":"65e6398bd24868b20ec8918d2dbe592e51e2ba4c","tarball":"https://registry.npmjs.org/newsmonger/-/newsmonger-0.4.0-rc.2.tgz","fileCount":10,"integrity":"sha512-iOEsfELAKG2Utsk2kopB6FBlBSwyR9fetywAuNwI2PKbpntdwPGG/Cz8ySwPi+WFY+hJTVCN6A1gtP3iH/0wtw==","signatures":[{"sig":"MEQCIHMmtxI1yp1UODwDDPP7D6z7hefAEHgv94vtRkMipb5PAiBMYOaaCEAgwg1ItpGZrFDxGcwV+JNfwSDcXmg+GRUl4g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/newsmonger@0.4.0-rc.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1383024},"type":"module","engines":{"node":">=22.5"},"gitHead":"0832b65c2bd2537e53a63281cad4357f03f73c0f","scripts":{"dev":"npm run build:client:dev && node --import tsx/esm src/cli.ts","lint":"eslint src/ tests/ scripts/","test":"vitest run --coverage","build":"tsup","clean":"rm -rf dist node_modules/.cache","tauri":"tauri","release":"bash scripts/release.sh","test:all":"bash scripts/test-all.sh","test:e2e":"npx playwright test","tauri:dev":"npm run build:client && tauri dev","typecheck":"tsc --noEmit","commit:msg":"gitgist --staged --commit-message","dev:server":"npm run build:client:dev && node --import tsx/esm src/cli.ts --no-open --strict-port","gate:quick":"bash scripts/gate-quick.sh","gates:rust":"bash scripts/gates-rust.sh","test:watch":"vitest","demo:stills":"npm run build:client && node --import tsx/esm scripts/demo/capture-stills.ts","tauri:build":"tauri build","build:client":"node -e \"require('fs').mkdirSync('dist/client',{recursive:true})\" && node -e \"for (const f of ['favicon.svg','logo-full-bleed.svg','wordmark-light.svg','wordmark-dark.svg']) require('fs').copyFileSync('assets/'+f,'dist/client/'+f)\" && npx esbuild src/client/app.tsx --bundle --format=iife --outfile=dist/client/app.global.js --target=es2020 --sourcemap --jsx=automatic --jsx-import-source=kerfjs --define:__KERF_DEV__=false && npx sass src/client/styles.scss dist/client/styles.css --style compressed --no-source-map","demo:capture":"npm run build:client && node --import tsx/esm scripts/demo/capture-demo.ts","release:beta":"bash scripts/release.sh --beta","test:e2e:real":"NEWSMONGER_E2E_REAL=1 npx playwright test real-providers","prepublishOnly":"npm run build && npm run build:client","build:client:dev":"node -e \"require('fs').mkdirSync('dist/client',{recursive:true})\" && node -e \"for (const f of ['favicon.svg','logo-full-bleed.svg','wordmark-light.svg','wordmark-dark.svg']) require('fs').copyFileSync('assets/'+f,'dist/client/'+f)\" && npx esbuild src/client/app.tsx --bundle --format=iife --outfile=dist/client/app.global.js --target=es2020 --sourcemap --jsx=automatic --jsx-import-source=kerfjs --define:__KERF_DEV__=true && npx sass src/client/styles.scss dist/client/styles.css --style compressed --no-source-map","record:demo-data":"node --import tsx/esm scripts/record-demo-data.ts","docs:requirements":"node scripts/build-requirements-summary.mjs","release:beta:auto":"bash scripts/release-beta-auto.sh","tauri:build:local":"bash scripts/tauri-build-local.sh","test:e2e:scramble":"node scripts/e2e-scramble.mjs","record:cli-sessions":"node --import tsx/esm scripts/record-cli-sessions.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8c3cb2ab-d327-453d-b74b-c9a4e39b3b62"}},"overrides":{"esbuild":"^0.28.1"},"repository":{"url":"git+https://github.com/Small-Tale/newsmonger.git","type":"git"},"_npmVersion":"11.19.0","description":"Topic-based news tracker: enter topics, and on a configurable interval the app asks Claude (with web search) for new developments, deduplicating against previously seen stories.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"^4.4.3","hono":"^4.12.25","kerfjs":"^4.1.0","openai":"^6.49.0","@anthropic-ai/sdk":"^0.113.0","@hono/node-server":"^2.0.5"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"c8":"^12.0.0","tsx":"^4.22.4","sass":"^1.97.3","tsup":"^8.5.1","eslint":"^10.5.0","vitest":"^4.1.9","esbuild":"^0.28.1","gitgist":"^1.2.0","@eslint/js":"^10.0.1","typescript":"^5.9.3","@types/node":"^25.9.3","domotion-svg":"^0.21.1","@tauri-apps/cli":"^2.11.2","@playwright/test":"^1.61.0","typescript-eslint":"^8.61.1","@vitest/coverage-v8":"^4.1.9","eslint-plugin-tsdoc":"^0.5.2","@axe-core/playwright":"^4.12.1","eslint-plugin-kerfjs":"^4.1.0","eslint-plugin-import-x":"^4.16.2","monocart-coverage-reports":"2.12.12","eslint-plugin-simple-import-sort":"^12.1.1"},"_npmOperationalInternal":{"tmp":"tmp/newsmonger_0.4.0-rc.2_1786399750106_0.14779976095507852","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"newsmonger","version":"0.4.0","author":{"name":"Small Tale Inc."},"license":"MIT","_id":"newsmonger@0.4.0","maintainers":[{"name":"bwestphal","email":"brian.westphal@bleugris.com"}],"homepage":"https://github.com/Small-Tale/newsmonger#readme","bugs":{"url":"https://github.com/Small-Tale/newsmonger/issues"},"bin":{"newsmonger":"dist/cli.js"},"dist":{"shasum":"39251831a5bef8a0924cae8b00843c9666794f5a","tarball":"https://registry.npmjs.org/newsmonger/-/newsmonger-0.4.0.tgz","fileCount":10,"integrity":"sha512-ifsXiFOFqPQb5U09CwgWdVboC8yW21Oi3kJxhdLT0My7LQFbiWqNYhXdYq1EAQR3WFttObRK+f6fnFiO59EeDg==","signatures":[{"sig":"MEYCIQDWKlVAqRO6eoYCqeryw6Rsx1bf5YoiIh8FtQdPh1dKtgIhAL/uUlDDtZuhyQQdj5I5jYfqiG7zgaoVl8Kkpmphz5Bs","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/newsmonger@0.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1383019},"type":"module","engines":{"node":">=22.5"},"gitHead":"0832b65c2bd2537e53a63281cad4357f03f73c0f","scripts":{"dev":"npm run build:client:dev && node --import tsx/esm src/cli.ts","lint":"eslint src/ tests/ scripts/","test":"vitest run --coverage","build":"tsup","clean":"rm -rf dist node_modules/.cache","tauri":"tauri","release":"bash scripts/release.sh","test:all":"bash scripts/test-all.sh","test:e2e":"npx playwright test","tauri:dev":"npm run build:client && tauri dev","typecheck":"tsc --noEmit","commit:msg":"gitgist --staged --commit-message","dev:server":"npm run build:client:dev && node --import tsx/esm src/cli.ts --no-open --strict-port","gate:quick":"bash scripts/gate-quick.sh","gates:rust":"bash scripts/gates-rust.sh","test:watch":"vitest","demo:stills":"npm run build:client && node --import tsx/esm scripts/demo/capture-stills.ts","tauri:build":"tauri build","build:client":"node -e \"require('fs').mkdirSync('dist/client',{recursive:true})\" && node -e \"for (const f of ['favicon.svg','logo-full-bleed.svg','wordmark-light.svg','wordmark-dark.svg']) require('fs').copyFileSync('assets/'+f,'dist/client/'+f)\" && npx esbuild src/client/app.tsx --bundle --format=iife --outfile=dist/client/app.global.js --target=es2020 --sourcemap --jsx=automatic --jsx-import-source=kerfjs --define:__KERF_DEV__=false && npx sass src/client/styles.scss dist/client/styles.css --style compressed --no-source-map","demo:capture":"npm run build:client && node --import tsx/esm scripts/demo/capture-demo.ts","release:beta":"bash scripts/release.sh --beta","test:e2e:real":"NEWSMONGER_E2E_REAL=1 npx playwright test real-providers","prepublishOnly":"npm run build && npm run build:client","build:client:dev":"node -e \"require('fs').mkdirSync('dist/client',{recursive:true})\" && node -e \"for (const f of ['favicon.svg','logo-full-bleed.svg','wordmark-light.svg','wordmark-dark.svg']) require('fs').copyFileSync('assets/'+f,'dist/client/'+f)\" && npx esbuild src/client/app.tsx --bundle --format=iife --outfile=dist/client/app.global.js --target=es2020 --sourcemap --jsx=automatic --jsx-import-source=kerfjs --define:__KERF_DEV__=true && npx sass src/client/styles.scss dist/client/styles.css --style compressed --no-source-map","record:demo-data":"node --import tsx/esm scripts/record-demo-data.ts","docs:requirements":"node scripts/build-requirements-summary.mjs","release:beta:auto":"bash scripts/release-beta-auto.sh","tauri:build:local":"bash scripts/tauri-build-local.sh","test:e2e:scramble":"node scripts/e2e-scramble.mjs","record:cli-sessions":"node --import tsx/esm scripts/record-cli-sessions.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8c3cb2ab-d327-453d-b74b-c9a4e39b3b62"}},"overrides":{"esbuild":"^0.28.1"},"repository":{"url":"git+https://github.com/Small-Tale/newsmonger.git","type":"git"},"_npmVersion":"11.19.0","description":"Topic-based news tracker: enter topics, and on a configurable interval the app asks Claude (with web search) for new developments, deduplicating against previously seen stories.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"^4.4.3","hono":"^4.12.25","kerfjs":"^4.1.0","openai":"^6.49.0","@anthropic-ai/sdk":"^0.113.0","@hono/node-server":"^2.0.5"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^12.0.0","tsx":"^4.22.4","sass":"^1.97.3","tsup":"^8.5.1","eslint":"^10.5.0","vitest":"^4.1.9","esbuild":"^0.28.1","gitgist":"^1.2.0","@eslint/js":"^10.0.1","typescript":"^5.9.3","@types/node":"^25.9.3","domotion-svg":"^0.21.1","@tauri-apps/cli":"^2.11.2","@playwright/test":"^1.61.0","typescript-eslint":"^8.61.1","@vitest/coverage-v8":"^4.1.9","eslint-plugin-tsdoc":"^0.5.2","@axe-core/playwright":"^4.12.1","eslint-plugin-kerfjs":"^4.1.0","eslint-plugin-import-x":"^4.16.2","monocart-coverage-reports":"2.12.12","eslint-plugin-simple-import-sort":"^12.1.1"},"_npmOperationalInternal":{"tmp":"tmp/newsmonger_0.4.0_1786399815843_0.8781420709075505","host":"s3://npm-registry-packages-npm-production"}},"0.5.0-beta.2":{"name":"newsmonger","version":"0.5.0-beta.2","author":{"name":"Small Tale Inc."},"license":"MIT","_id":"newsmonger@0.5.0-beta.2","maintainers":[{"name":"bwestphal","email":"brian.westphal@bleugris.com"}],"homepage":"https://github.com/Small-Tale/newsmonger#readme","bugs":{"url":"https://github.com/Small-Tale/newsmonger/issues"},"bin":{"newsmonger":"dist/cli.js"},"dist":{"shasum":"9d72aac1ffe5c555630e0eefc66a3b82f88be4b1","tarball":"https://registry.npmjs.org/newsmonger/-/newsmonger-0.5.0-beta.2.tgz","fileCount":10,"integrity":"sha512-ADJnpTZCFFFb/JlFX4GOUXwAnEO5btvytr9+FpC4r72ICNlf8kMHUxkJMMOGIIrak4k9GpNeff2yViaLibidmw==","signatures":[{"sig":"MEUCIQCB7s29CYP0BPzRVqIhSc3bKvevnTuHdvhklhr+OowxwgIgBZ49U4bZykkADK4oWUhGNurA5DjyZPQ6UWiHDpzT1jo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/newsmonger@0.5.0-beta.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1422839},"type":"module","engines":{"node":">=22.5"},"gitHead":"ffd58d2c48205ea78ce1a9fbd2e8886cc67a4d21","scripts":{"dev":"npm run build:client:dev && node --import tsx/esm src/cli.ts","lint":"eslint src/ tests/ scripts/","test":"vitest run --coverage","build":"tsup","clean":"rm -rf dist node_modules/.cache","tauri":"tauri","release":"bash scripts/release.sh","test:all":"bash scripts/test-all.sh","test:e2e":"npx playwright test","tauri:dev":"npm run build:client && tauri dev","typecheck":"tsc --noEmit","commit:msg":"gitgist --staged --commit-message","dev:server":"npm run build:client:dev && node --import tsx/esm src/cli.ts --no-open --strict-port","gate:quick":"bash scripts/gate-quick.sh","gates:rust":"bash scripts/gates-rust.sh","test:watch":"vitest","demo:stills":"npm run build:client && node --import tsx/esm scripts/demo/capture-stills.ts","tauri:build":"tauri build","build:client":"node -e \"require('fs').mkdirSync('dist/client',{recursive:true})\" && node -e \"for (const f of ['favicon.svg','logo-full-bleed.svg','wordmark-light.svg','wordmark-dark.svg']) require('fs').copyFileSync('assets/'+f,'dist/client/'+f)\" && npx esbuild src/client/app.tsx --bundle --format=iife --outfile=dist/client/app.global.js --target=es2020 --sourcemap --jsx=automatic --jsx-import-source=kerfjs --define:__KERF_DEV__=false && npx sass src/client/styles.scss dist/client/styles.css --style compressed --no-source-map","demo:capture":"npm run build:client && node --import tsx/esm scripts/demo/capture-demo.ts","release:beta":"bash scripts/release.sh --beta","test:e2e:real":"NEWSMONGER_E2E_REAL=1 npx playwright test real-providers","prepublishOnly":"npm run build && npm run build:client","build:client:dev":"node -e \"require('fs').mkdirSync('dist/client',{recursive:true})\" && node -e \"for (const f of ['favicon.svg','logo-full-bleed.svg','wordmark-light.svg','wordmark-dark.svg']) require('fs').copyFileSync('assets/'+f,'dist/client/'+f)\" && npx esbuild src/client/app.tsx --bundle --format=iife --outfile=dist/client/app.global.js --target=es2020 --sourcemap --jsx=automatic --jsx-import-source=kerfjs --define:__KERF_DEV__=true && npx sass src/client/styles.scss dist/client/styles.css --style compressed --no-source-map","record:demo-data":"node --import tsx/esm scripts/record-demo-data.ts","docs:requirements":"node scripts/build-requirements-summary.mjs","release:beta:auto":"bash scripts/release-beta-auto.sh","tauri:build:local":"bash scripts/tauri-build-local.sh","test:e2e:scramble":"node scripts/e2e-scramble.mjs","record:cli-sessions":"node --import tsx/esm scripts/record-cli-sessions.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8c3cb2ab-d327-453d-b74b-c9a4e39b3b62"}},"overrides":{"esbuild":"^0.28.1"},"repository":{"url":"git+https://github.com/Small-Tale/newsmonger.git","type":"git"},"_npmVersion":"11.19.0","description":"Topic-based news tracker: enter topics, and on a configurable interval the app asks Claude (with web search) for new developments, deduplicating against previously seen stories.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"^4.4.3","hono":"^4.12.25","kerfjs":"^4.1.0","openai":"^6.49.0","@anthropic-ai/sdk":"^0.113.0","@hono/node-server":"^2.0.5"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"c8":"^12.0.0","tsx":"^4.22.4","sass":"^1.97.3","tsup":"^8.5.1","eslint":"^10.5.0","vitest":"^4.1.9","esbuild":"^0.28.1","gitgist":"^1.2.0","@eslint/js":"^10.0.1","typescript":"^5.9.3","@types/node":"^25.9.3","domotion-svg":"^0.21.1","@tauri-apps/cli":"^2.11.2","@playwright/test":"^1.61.0","typescript-eslint":"^8.61.1","@vitest/coverage-v8":"^4.1.9","eslint-plugin-tsdoc":"^0.5.2","@axe-core/playwright":"^4.12.1","eslint-plugin-kerfjs":"^4.1.0","eslint-plugin-import-x":"^4.16.2","monocart-coverage-reports":"2.12.12","eslint-plugin-simple-import-sort":"^12.1.1"},"_npmOperationalInternal":{"tmp":"tmp/newsmonger_0.5.0-beta.2_1786428374480_0.6293894139037213","host":"s3://npm-registry-packages-npm-production"}},"0.5.0-rc.1":{"name":"newsmonger","version":"0.5.0-rc.1","author":{"name":"Small Tale Inc."},"license":"MIT","_id":"newsmonger@0.5.0-rc.1","maintainers":[{"name":"bwestphal","email":"brian.westphal@bleugris.com"}],"homepage":"https://github.com/Small-Tale/newsmonger#readme","bugs":{"url":"https://github.com/Small-Tale/newsmonger/issues"},"bin":{"newsmonger":"dist/cli.js"},"dist":{"shasum":"bdafcd4de7a94be1cde03595bd32f1ea21293f86","tarball":"https://registry.npmjs.org/newsmonger/-/newsmonger-0.5.0-rc.1.tgz","fileCount":10,"integrity":"sha512-8farFqrTnsR5nYBpSUiFha5bOalivyt6OrkjbIdYIl/U4TMrUC9upZ7/zl9KPKVwxNtSO2911g3Pgv+/nZYOOg==","signatures":[{"sig":"MEUCIDWNnNdm16azMGBfTIG2h/hNlzo6++hemTf5m5qiJYZGAiEAuDbV5hoZ0CESJM/cPN0xVw9tQiqQMq9OD5g1VXyBmSE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/newsmonger@0.5.0-rc.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1422837},"type":"module","engines":{"node":">=22.5"},"gitHead":"e3159b0e6b49740fa49b52cc713b041f070c7700","scripts":{"dev":"npm run build:client:dev && node --import tsx/esm src/cli.ts","lint":"eslint src/ tests/ scripts/","test":"vitest run --coverage","build":"tsup","clean":"rm -rf dist node_modules/.cache","tauri":"tauri","release":"bash scripts/release.sh","test:all":"bash scripts/test-all.sh","test:e2e":"npx playwright test","tauri:dev":"npm run build:client && tauri dev","typecheck":"tsc --noEmit","commit:msg":"gitgist --staged --commit-message","dev:server":"npm run build:client:dev && node --import tsx/esm src/cli.ts --no-open --strict-port","gate:quick":"bash scripts/gate-quick.sh","gates:rust":"bash scripts/gates-rust.sh","test:watch":"vitest","demo:stills":"npm run build:client && node --import tsx/esm scripts/demo/capture-stills.ts","tauri:build":"tauri build","build:client":"node -e \"require('fs').mkdirSync('dist/client',{recursive:true})\" && node -e \"for (const f of ['favicon.svg','logo-full-bleed.svg','wordmark-light.svg','wordmark-dark.svg']) require('fs').copyFileSync('assets/'+f,'dist/client/'+f)\" && npx esbuild src/client/app.tsx --bundle --format=iife --outfile=dist/client/app.global.js --target=es2020 --sourcemap --jsx=automatic --jsx-import-source=kerfjs --define:__KERF_DEV__=false && npx sass src/client/styles.scss dist/client/styles.css --style compressed --no-source-map","demo:capture":"npm run build:client && node --import tsx/esm scripts/demo/capture-demo.ts","release:beta":"bash scripts/release.sh --beta","test:e2e:real":"NEWSMONGER_E2E_REAL=1 npx playwright test real-providers","prepublishOnly":"npm run build && npm run build:client","build:client:dev":"node -e \"require('fs').mkdirSync('dist/client',{recursive:true})\" && node -e \"for (const f of ['favicon.svg','logo-full-bleed.svg','wordmark-light.svg','wordmark-dark.svg']) require('fs').copyFileSync('assets/'+f,'dist/client/'+f)\" && npx esbuild src/client/app.tsx --bundle --format=iife --outfile=dist/client/app.global.js --target=es2020 --sourcemap --jsx=automatic --jsx-import-source=kerfjs --define:__KERF_DEV__=true && npx sass src/client/styles.scss dist/client/styles.css --style compressed --no-source-map","record:demo-data":"node --import tsx/esm scripts/record-demo-data.ts","docs:requirements":"node scripts/build-requirements-summary.mjs","release:beta:auto":"bash scripts/release-beta-auto.sh","tauri:build:local":"bash scripts/tauri-build-local.sh","test:e2e:scramble":"node scripts/e2e-scramble.mjs","record:cli-sessions":"node --import tsx/esm scripts/record-cli-sessions.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8c3cb2ab-d327-453d-b74b-c9a4e39b3b62"}},"overrides":{"esbuild":"^0.28.1"},"repository":{"url":"git+https://github.com/Small-Tale/newsmonger.git","type":"git"},"_npmVersion":"11.19.0","description":"Topic-based news tracker: enter topics, and on a configurable interval the app asks Claude (with web search) for new developments, deduplicating against previously seen stories.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"^4.4.3","hono":"^4.12.25","kerfjs":"^4.1.0","openai":"^6.49.0","@anthropic-ai/sdk":"^0.113.0","@hono/node-server":"^2.0.5"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"c8":"^12.0.0","tsx":"^4.22.4","sass":"^1.97.3","tsup":"^8.5.1","eslint":"^10.5.0","vitest":"^4.1.9","esbuild":"^0.28.1","gitgist":"^1.2.0","@eslint/js":"^10.0.1","typescript":"^5.9.3","@types/node":"^25.9.3","domotion-svg":"^0.21.1","@tauri-apps/cli":"^2.11.2","@playwright/test":"^1.61.0","typescript-eslint":"^8.61.1","@vitest/coverage-v8":"^4.1.9","eslint-plugin-tsdoc":"^0.5.2","@axe-core/playwright":"^4.12.1","eslint-plugin-kerfjs":"^4.1.0","eslint-plugin-import-x":"^4.16.2","monocart-coverage-reports":"2.12.12","eslint-plugin-simple-import-sort":"^12.1.1"},"_npmOperationalInternal":{"tmp":"tmp/newsmonger_0.5.0-rc.1_1786430968118_0.40165844866885525","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"newsmonger","version":"0.5.0","description":"Topic-based news tracker: enter topics, and on a configurable interval the app asks Claude (with web search) for new developments, deduplicating against previously seen stories.","type":"module","license":"MIT","author":{"name":"Small Tale Inc."},"repository":{"type":"git","url":"git+https://github.com/Small-Tale/newsmonger.git"},"bugs":{"url":"https://github.com/Small-Tale/newsmonger/issues"},"homepage":"https://github.com/Small-Tale/newsmonger#readme","engines":{"node":">=22.5"},"bin":{"newsmonger":"dist/cli.js"},"scripts":{"dev":"npm run build:client:dev && node --import tsx/esm src/cli.ts","dev:server":"npm run build:client:dev && node --import tsx/esm src/cli.ts --no-open --strict-port","build":"tsup","build:client":"node -e \"require('fs').mkdirSync('dist/client',{recursive:true})\" && node -e \"for (const f of ['favicon.svg','logo-full-bleed.svg','wordmark-light.svg','wordmark-dark.svg']) require('fs').copyFileSync('assets/'+f,'dist/client/'+f)\" && npx esbuild src/client/app.tsx --bundle --format=iife --outfile=dist/client/app.global.js --target=es2020 --sourcemap --jsx=automatic --jsx-import-source=kerfjs --define:__KERF_DEV__=false && npx sass src/client/styles.scss dist/client/styles.css --style compressed --no-source-map","demo:capture":"npm run build:client && node --import tsx/esm scripts/demo/capture-demo.ts","demo:stills":"npm run build:client && node --import tsx/esm scripts/demo/capture-stills.ts","prepublishOnly":"npm run build && npm run build:client","tauri":"tauri","tauri:dev":"npm run build:client && tauri dev","tauri:build":"tauri build","tauri:build:local":"bash scripts/tauri-build-local.sh","test":"vitest run --coverage","test:watch":"vitest","test:e2e":"npx playwright test","record:cli-sessions":"node --import tsx/esm scripts/record-cli-sessions.ts","record:demo-data":"node --import tsx/esm scripts/record-demo-data.ts","test:e2e:real":"NEWSMONGER_E2E_REAL=1 npx playwright test real-providers","test:e2e:scramble":"node scripts/e2e-scramble.mjs","docs:requirements":"node scripts/build-requirements-summary.mjs","test:all":"bash scripts/test-all.sh","gate:quick":"bash scripts/gate-quick.sh","gates:rust":"bash scripts/gates-rust.sh","release":"bash scripts/release.sh","release:beta":"bash scripts/release.sh --beta","release:beta:auto":"bash scripts/release-beta-auto.sh","commit:msg":"gitgist --staged --commit-message","lint":"eslint src/ tests/ scripts/","typecheck":"tsc --noEmit","clean":"rm -rf dist node_modules/.cache","build:client:dev":"node -e \"require('fs').mkdirSync('dist/client',{recursive:true})\" && node -e \"for (const f of ['favicon.svg','logo-full-bleed.svg','wordmark-light.svg','wordmark-dark.svg']) require('fs').copyFileSync('assets/'+f,'dist/client/'+f)\" && npx esbuild src/client/app.tsx --bundle --format=iife --outfile=dist/client/app.global.js --target=es2020 --sourcemap --jsx=automatic --jsx-import-source=kerfjs --define:__KERF_DEV__=true && npx sass src/client/styles.scss dist/client/styles.css --style compressed --no-source-map"},"dependencies":{"@anthropic-ai/sdk":"^0.113.0","@hono/node-server":"^2.0.5","hono":"^4.12.25","kerfjs":"^4.1.0","openai":"^6.49.0","zod":"^4.4.3"},"devDependencies":{"@axe-core/playwright":"^4.12.1","@eslint/js":"^10.0.1","@playwright/test":"^1.61.0","@tauri-apps/cli":"^2.11.2","@types/node":"^25.9.3","@vitest/coverage-v8":"^4.1.9","c8":"^12.0.0","domotion-svg":"^0.21.1","esbuild":"^0.28.1","eslint":"^10.5.0","eslint-plugin-import-x":"^4.16.2","eslint-plugin-kerfjs":"^4.1.0","eslint-plugin-simple-import-sort":"^12.1.1","eslint-plugin-tsdoc":"^0.5.2","gitgist":"^1.2.0","monocart-coverage-reports":"2.12.12","sass":"^1.97.3","tsup":"^8.5.1","tsx":"^4.22.4","typescript":"^5.9.3","typescript-eslint":"^8.61.1","vitest":"^4.1.9"},"overrides":{"esbuild":"^0.28.1"},"gitHead":"e3159b0e6b49740fa49b52cc713b041f070c7700","_id":"newsmonger@0.5.0","_nodeVersion":"22.23.1","_npmVersion":"11.19.0","dist":{"integrity":"sha512-Yg5IKTV3DxFRFsgc22SZNQpz3hPmJdCEtYL9dxZa1SjDhBg/aeQoB7xfoq8FDTdpftb72doeebh7JTvSoQZsYg==","shasum":"66c8c0d6f00f573fd3011af671aee0fb228a9e9a","tarball":"https://registry.npmjs.org/newsmonger/-/newsmonger-0.5.0.tgz","fileCount":10,"unpackedSize":1422832,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/newsmonger@0.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIDifJmPfrEwmHS50eAz0KKUBcwUwXbhI85W8gtOqL3a4AiEAyN4psCZVP23Uy/oSA546D6PGXfALo4XyTpk3+WO0o0E="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8c3cb2ab-d327-453d-b74b-c9a4e39b3b62"}},"directories":{},"maintainers":[{"name":"bwestphal","email":"brian.westphal@bleugris.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/newsmonger_0.5.0_1786431385833_0.13806280953823813"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-30T08:21:42.313Z","modified":"2026-08-11T06:56:26.444Z","0.1.0":"2026-07-30T08:21:42.671Z","0.2.0-beta.3":"2026-07-30T12:50:07.893Z","0.2.0-beta.4":"2026-07-30T23:02:16.361Z","0.2.0-beta.5":"2026-07-31T00:19:00.973Z","0.2.0-beta.6":"2026-07-31T11:22:09.843Z","0.2.0-beta.7":"2026-07-31T22:26:24.974Z","0.2.0-beta.8":"2026-08-01T00:41:04.113Z","0.2.0-beta.9":"2026-08-01T03:46:01.155Z","0.2.0-beta.10":"2026-08-01T05:40:38.503Z","0.2.0-beta.11":"2026-08-02T02:38:17.436Z","0.2.0-beta.12":"2026-08-02T04:01:08.411Z","0.2.0-beta.13":"2026-08-03T07:55:43.284Z","0.2.0-beta.14":"2026-08-03T09:05:15.458Z","0.2.0-beta.15":"2026-08-03T23:42:37.970Z","0.2.0-beta.18":"2026-08-06T08:53:16.622Z","0.2.0-beta.19":"2026-08-07T02:51:29.408Z","0.2.0-beta.22":"2026-08-08T07:04:47.872Z","0.2.0-beta.23":"2026-08-09T02:38:58.050Z","0.2.0-beta.24":"2026-08-10T00:10:08.631Z","0.3.0-rc.1":"2026-08-10T00:54:22.857Z","0.3.0":"2026-08-10T00:55:25.231Z","0.4.0-beta.1":"2026-08-10T02:31:18.450Z","0.4.0-beta.2":"2026-08-10T08:36:27.073Z","0.4.0-beta.3":"2026-08-10T09:29:09.864Z","0.4.0-rc.2":"2026-08-10T22:09:10.262Z","0.4.0":"2026-08-10T22:10:16.030Z","0.5.0-beta.2":"2026-08-11T06:06:14.661Z","0.5.0-rc.1":"2026-08-11T06:49:28.268Z","0.5.0":"2026-08-11T06:56:25.994Z"},"bugs":{"url":"https://github.com/Small-Tale/newsmonger/issues"},"author":{"name":"Small Tale Inc."},"license":"MIT","homepage":"https://github.com/Small-Tale/newsmonger#readme","repository":{"type":"git","url":"git+https://github.com/Small-Tale/newsmonger.git"},"description":"Topic-based news tracker: enter topics, and on a configurable interval the app asks Claude (with web search) for new developments, deduplicating against previously seen stories.","maintainers":[{"name":"bwestphal","email":"brian.westphal@bleugris.com"}],"readme":"# Newsmonger\n\n<img src=\"assets/demo.svg\" alt=\"Newsmonger walkthrough: topics being watched, summarized stories with source links, topic discovery, and a later check reporting only what's new\" width=\"100%\">\n\nFollow topics, not feeds. Enter a list of topics and, on a schedule you pick (e.g. once a day), the app asks an AI — with live web search — whether there's anything genuinely new on each one. New stories are summarized in a feed with links to the sources; anything already reported on a previous check is deduplicated away.\n\nBuilt with [kerfjs](https://github.com/brianwestphal/kerf) + Hono + Tauri (hybrid web / desktop, same architecture as glassbox).\n\n## What it looks like\n\n<img src=\"assets/stills/feed.png\" alt=\"The Newsmonger feed: watched topics in the sidebar, and summarized stories with links to their sources.\" width=\"100%\">\n\nStories arrive grouped by day, each tagged with the topic that found it and carrying links to the sources it was summarized from. A wide window lays the feed out in columns.\n\n<img src=\"assets/stills/discover.png\" alt=\"Topic discovery: browse by section and subject, with a reason given for every suggestion.\" width=\"49%\"> <img src=\"assets/stills/tuner.png\" alt=\"The keep/skip tuner: one candidate topic at a time, with a round counter and a way out at any point.\" width=\"49%\">\n\n**Finding topics worth following.** Browse by section and subject, or go deeper with the keep/skip tuner — one candidate at a time, asking *narrower than this* or *more like this*, and endable at any point.\n\n<img src=\"assets/stills/thread.png\" alt=\"An expanded story card showing the story so far: every earlier instalment on the same subject, dated and attributed, with a way to see the whole run.\" width=\"49%\">\n\n**Following a story, not just a headline.** When several stories turn out to be the same subject unfolding, they collect into a thread: a collapsed card says where it sits (\"6th update\"), and opening it shows how the subject got here — dated, attributed, and linked to each instalment's own source. Grouping is computed locally from the stories already stored, so it costs no AI spend.\n\n<img src=\"assets/stills/review.png\" alt=\"Review mode: the stories flagged off-topic, gathered so the topic can be corrected.\" width=\"100%\">\n\n**Telling a topic what you meant.** Flag a story off-topic and it leaves the feed; review mode gathers the flagged ones for a topic, and their titles are fed back into that topic's next prompt as negative examples.\n\n<img src=\"assets/stills/topics.png\" alt=\"The topics sidebar: each watched topic with its category and a dial counting down to its next check, with one marked high priority.\" width=\"32%\"> <img src=\"assets/stills/export.png\" alt=\"The export dialog: stories out as Markdown or JSON, all of them or just the bookmarks.\" width=\"32%\"> <img src=\"assets/stills/settings-source.png\" alt=\"Settings: which AI provider does the searching, at what reasoning effort, and where its API key goes.\" width=\"32%\">\n\nEvery image above is a screenshot of the real app, regenerated by `npm run demo:stills` — they cannot drift from the product without the capture breaking.\n\n## Also in the box\n\n- **Your briefing as a feed.** Newsmonger publishes its own output at `/feed.xml` — subscribe to it in any reader, or add `?scope=saved` for just your bookmarks. Stories also export as Markdown or JSON, and both come back in: import a topic list to set up a second machine, or import a story archive and it deduplicates against what you already have.\n- **Search** across every story you've collected, and bookmark the ones worth keeping.\n- **Checks on your schedule** — every N hours, or at set times of day. Mark a topic high priority for a shorter interval of its own. A topic that keeps failing backs off on its own and says so rather than retrying silently.\n- **Sections and subjects.** Topics are classified automatically, so the sidebar groups and the feed filters by them.\n- **Light, dark, or whatever your system is doing** — chosen server-side, so there's no flash of the wrong palette on load.\n- **Your data stays yours, and stays recoverable.** Back up to a folder you pick (iCloud Drive, Dropbox, anywhere) and restore from it. If a database ever fails to open, Newsmonger sets it aside rather than deleting it, tells you where it went, and offers to put it back.\n\n## Quick start\n\n```sh\nnpm install -g newsmonger\nnewsmonger\n```\n\nThat's it — it starts the server and opens the app in your browser at `http://127.0.0.1:4187`.\n\n**No API key needed.** If you're signed in to [Claude Code](https://claude.com/claude-code) or the [Codex CLI](https://developers.openai.com/codex/cli), Newsmonger uses that subscription — it drives the CLI you already have, so checks come out of your existing plan rather than a metered key. That's the default and the recommended way to run it. Add `--ai-test` for an offline mock, or set an API key in Settings if you'd rather pay per call.\n\nUseful flags: `--port N`, `--data-dir PATH`, `--no-open` (don't launch a browser), `--strict-port` (fail rather than fall forward if the port is taken). `newsmonger --help` lists them all.\n\nData lives in `~/.newsmonger/newsmonger.db`, a SQLite database (override the directory with `--data-dir` or `NEWSMONGER_DATA_DIR`). A `data.json` left by an older build is imported automatically on first start and renamed.\n\n## AI providers\n\nPick which AI finds and summarizes news, from the Source block in the UI or with `--provider` / `NEWSMONGER_PROVIDER`. Only platforms that do their own web search are supported — finding genuinely new news needs live browsing:\n\n| Provider | Config |\n|---|---|\n| `auto` (default) | first available, in the order below — **subscriptions before API keys** |\n| `claude-cli` | none — your **Claude subscription**, via the signed-in `claude` CLI |\n| `codex-cli` | none — your **ChatGPT subscription**, via the signed-in `codex` CLI |\n| `anthropic` | `ANTHROPIC_API_KEY` (Claude + web search) |\n| `openai` | `OPENAI_API_KEY`, `OPENAI_BASE_URL` (Responses API + web search) |\n| `mock` | offline deterministic (`--ai-test`) |\n\nThe two subscription providers are tried first on purpose: if you hold a subscription, you expect its quota spent before a key you also happen to have configured. They're **attended** — scheduled checks run only while Newsmonger is open, so it never becomes an unattended background agent on your account. Manual checks always run. See [docs/9-subscription-providers.md](docs/9-subscription-providers.md).\n\nSeed at startup with `--provider <name> --model <id> --endpoint <url>` (or `NEWSMONGER_PROVIDER`/`NEWSMONGER_MODEL`/`NEWSMONGER_ENDPOINT`); change any time in the UI. See [docs/6-providers.md](docs/6-providers.md).\n\n## Privacy\n\nNewsmonger has no servers and collects no telemetry. Two kinds of data, and it's worth being precise about which is which:\n\n**Sent to the AI provider you chose, on every check** — the topic's name, its guidance if you wrote any, the titles of stories already reported for that topic (that is how repeats are avoided), and the titles of stories you flagged off-topic (that is how it infers what you meant). Nothing else: not the feed, not your other topics, not your bookmarks.\n\n**Stored on your machine only** — topics, the stories found, and cached article images, all under `~/.newsmonger`. **API keys are not stored there**: they go in your OS keychain (macOS Keychain, GNOME Keyring/KWallet, Windows Credential Manager), or come from an environment variable. See [docs/7-api-keys.md](docs/7-api-keys.md).\n\nThe only other outbound traffic is fetching an article's lead image (proxied through the app so your browser never talks to a news site directly — [docs/8-article-images.md](docs/8-article-images.md)) and opening links you click.\n\nThe same note is in the app, under Settings → Privacy.\n\n## Desktop app\n\nNewsmonger also ships as a **desktop app** — the same application in a native window, which keeps it out of a browser tab and lets it send real notifications when new stories arrive. Download it from [Releases](https://github.com/Small-Tale/newsmonger/releases): a `.dmg` for macOS (Apple Silicon and Intel, signed and notarized), a `.exe` installer for Windows, and `.deb` / `.rpm` / `.AppImage` for Linux. It updates itself: when a new version ships, the app offers to install it and asks you to restart.\n\nAll three platforms are verified end to end from the published bundle — installed, launched, the sidecar started, the real UI served, and closed without leaving a stray process behind.\n\n## Contributing\n\nWorking on Newsmonger rather than using it? See [CONTRIBUTING.md](CONTRIBUTING.md).\n","readmeFilename":"README.md"}