{"_id":"@andersonfda/springy","_rev":"15-b90b5ba1be6eb644a05a0fbf42998426","name":"@andersonfda/springy","dist-tags":{"latest":"0.19.1"},"versions":{"0.14.3":{"name":"@andersonfda/springy","version":"0.14.3","keywords":["content-automation","social-media","ai","claude","anthropic","linkedin","twitter","bluesky","threads","medium","cascade","orchestrator"],"author":"","license":"MIT","_id":"@andersonfda/springy@0.14.3","maintainers":[{"name":"andersonfda","email":"andersonfda@gmail.com"}],"contributors":[{"name":"Anderson Andrade","email":"andersonfda@gmail.com"}],"homepage":"https://github.com/andersonfda/springy#readme","bugs":{"url":"https://github.com/andersonfda/springy/issues"},"bin":{"springy":"bin/cli.js","springy-mcp":"bin/springy-mcp.js"},"dist":{"shasum":"7222606363c99e498132294ae51f08392f3b028a","tarball":"https://registry.npmjs.org/@andersonfda/springy/-/springy-0.14.3.tgz","fileCount":221,"integrity":"sha512-Xy+GlPbQ9gr167N4xzXt09zij00evnNZQ8/fNRD+lYCrYDZ4HZ3zfQjURM2c+SGKvFSYiURlucjidajiJDK/5Q==","signatures":[{"sig":"MEQCICPOnVAxslp2UPEBWa7f2phH4JZm5W9E7PLvn7Tsu1TsAiBUfsnXq+K6ttsYZ7RkWVm+Klz6qwMXzzeqIeGfu0L4Xg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1335224},"main":"./src/index.js","type":"module","engines":{"node":">=20"},"gitHead":"0ec4871ea9a2fb4c89e9fb4b205bf7656d475d9a","scripts":{"lint":"eslint src/ bin/ tests/","test":"vitest run","evals":"vitest run tests/evals","smoke":"node scripts/live-smoke.js","pretest":"node scripts/pretest.js","lint:fix":"eslint src/ bin/ tests/ --fix","evals:live":"node scripts/eval-live.js","test:watch":"vitest","test:rehearsal":"node scripts/tester-rehearsal.js"},"_npmUser":{"name":"andersonfda","email":"andersonfda@gmail.com"},"repository":{"url":"git+https://github.com/andersonfda/springy.git","type":"git"},"_npmVersion":"10.8.2","description":"Open-source content automation — one idea into a coordinated post for every platform, in your voice.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"open":"^11.0.0","uuid":"^13.0.0","yaml":"^2.5.0","react":"^19.2.4","dotenv":"^17.3.1","openai":"^6.25.0","remotion":"^4.0.441","voyageai":"^0.2.1","commander":"^14.0.3","node-cron":"^4.2.1","react-dom":"^19.2.4","replicate":"^1.0.1","googleapis":"^171.4.0","playwright":"^1.58.2","@atproto/api":"^0.19.0","@remotion/cli":"^4.0.441","better-sqlite3":"^12.8.0","twitter-api-v2":"^1.29.0","@lancedb/lancedb":"^0.27.2","@anthropic-ai/sdk":"^0.78.0","@inquirer/prompts":"^8.4.1","@remotion/renderer":"^4.0.441","@remotion/media-utils":"^4.0.441","@elevenlabs/elevenlabs-js":"^2.41.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.10.0","vitest":"^2.1.0","globals":"^17.5.0"},"_npmOperationalInternal":{"tmp":"tmp/springy_0.14.3_1780353916227_0.6227127058493576","host":"s3://npm-registry-packages-npm-production"}},"0.14.4":{"name":"@andersonfda/springy","version":"0.14.4","keywords":["content-automation","social-media","ai","claude","anthropic","linkedin","twitter","bluesky","threads","medium","cascade","orchestrator"],"author":"","license":"MIT","_id":"@andersonfda/springy@0.14.4","maintainers":[{"name":"andersonfda","email":"andersonfda@gmail.com"}],"contributors":[{"name":"Anderson Andrade","email":"andersonfda@gmail.com"}],"homepage":"https://github.com/andersonfda/springy#readme","bugs":{"url":"https://github.com/andersonfda/springy/issues"},"bin":{"springy":"bin/cli.js","springy-mcp":"bin/springy-mcp.js"},"dist":{"shasum":"8a0f9a956e7764ee2c740b572a1195db97e5b054","tarball":"https://registry.npmjs.org/@andersonfda/springy/-/springy-0.14.4.tgz","fileCount":221,"integrity":"sha512-rEy+rUbVraQ7I3GNakTrhLq8jD6fy9IbaYA4QEg+dxSnhZC7LsSH3DgtPS646716b6M3aJqBy/OhRE0ryRoclw==","signatures":[{"sig":"MEQCIGNh+tC24j47hEwEq2N7KykMh1YTpVid094FtvgOQ2rrAiBJnfrgcVBpIB61hFZoMiPYQ7HfEnGbkwNId1v2K8kgtA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1340333},"main":"./src/index.js","type":"module","engines":{"node":">=20"},"gitHead":"a4742af52777f03186a3531fd45ee330f1f14f9f","scripts":{"lint":"eslint src/ bin/ tests/","test":"vitest run","evals":"vitest run tests/evals","smoke":"node scripts/live-smoke.js","pretest":"node scripts/pretest.js","lint:fix":"eslint src/ bin/ tests/ --fix","evals:live":"node scripts/eval-live.js","test:watch":"vitest","test:rehearsal":"node scripts/tester-rehearsal.js"},"_npmUser":{"name":"andersonfda","email":"andersonfda@gmail.com"},"repository":{"url":"git+https://github.com/andersonfda/springy.git","type":"git"},"_npmVersion":"10.8.2","description":"Open-source content automation — one idea into a coordinated post for every platform, in your voice.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"open":"^11.0.0","uuid":"^13.0.0","yaml":"^2.5.0","react":"^19.2.4","dotenv":"^17.3.1","openai":"^6.25.0","remotion":"^4.0.441","voyageai":"^0.2.1","commander":"^14.0.3","node-cron":"^4.2.1","react-dom":"^19.2.4","replicate":"^1.0.1","googleapis":"^171.4.0","playwright":"^1.58.2","@atproto/api":"^0.19.0","@remotion/cli":"^4.0.441","better-sqlite3":"^12.8.0","twitter-api-v2":"^1.29.0","@lancedb/lancedb":"^0.27.2","@anthropic-ai/sdk":"^0.78.0","@inquirer/prompts":"^8.4.1","@remotion/renderer":"^4.0.441","@remotion/media-utils":"^4.0.441","@elevenlabs/elevenlabs-js":"^2.41.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.10.0","vitest":"^2.1.0","globals":"^17.5.0"},"_npmOperationalInternal":{"tmp":"tmp/springy_0.14.4_1780363883576_0.7759687915627018","host":"s3://npm-registry-packages-npm-production"}},"0.14.5":{"name":"@andersonfda/springy","version":"0.14.5","keywords":["content-automation","social-media","ai","claude","anthropic","linkedin","twitter","bluesky","threads","medium","cascade","orchestrator"],"author":"","license":"MIT","_id":"@andersonfda/springy@0.14.5","maintainers":[{"name":"andersonfda","email":"andersonfda@gmail.com"}],"contributors":[{"name":"Anderson Andrade","email":"andersonfda@gmail.com"}],"homepage":"https://github.com/andersonfda/springy#readme","bugs":{"url":"https://github.com/andersonfda/springy/issues"},"bin":{"springy":"bin/cli.js","springy-mcp":"bin/springy-mcp.js"},"dist":{"shasum":"8c6e4fefff8941c039f972a6b320696544eaa7d0","tarball":"https://registry.npmjs.org/@andersonfda/springy/-/springy-0.14.5.tgz","fileCount":221,"integrity":"sha512-v67gB8K5Zi4mNNNJOMRDtqiCYrOnkfAVa2Zx+hKNRySDBRqAJ5x5+V1xoOBiBnj30x0T3fou9mza4zQnAY8Lvw==","signatures":[{"sig":"MEUCIQD9/SiRu7Jc7tNP8/SZSeadQVZN5+40t8K1rYSvpO21KAIgRWMdPQFMdWPZZhoUQvu3lTaD6ZBG4StJZGnmRgce4UI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1343560},"main":"./src/index.js","type":"module","engines":{"node":">=20"},"gitHead":"64aeeb536ac35f51c946465f07e4ff0b11e9cc76","scripts":{"lint":"eslint src/ bin/ tests/","test":"vitest run","evals":"vitest run tests/evals","smoke":"node scripts/live-smoke.js","pretest":"node scripts/pretest.js","lint:fix":"eslint src/ bin/ tests/ --fix","evals:live":"node scripts/eval-live.js","test:watch":"vitest","test:rehearsal":"node scripts/tester-rehearsal.js"},"_npmUser":{"name":"andersonfda","email":"andersonfda@gmail.com"},"repository":{"url":"git+https://github.com/andersonfda/springy.git","type":"git"},"_npmVersion":"10.8.2","description":"Open-source content automation — one idea into a coordinated post for every platform, in your voice.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"open":"^11.0.0","uuid":"^13.0.0","yaml":"^2.5.0","react":"^19.2.4","dotenv":"^17.3.1","openai":"^6.25.0","remotion":"^4.0.441","voyageai":"^0.2.1","commander":"^14.0.3","node-cron":"^4.2.1","react-dom":"^19.2.4","replicate":"^1.0.1","googleapis":"^171.4.0","playwright":"^1.58.2","@atproto/api":"^0.19.0","@remotion/cli":"^4.0.441","better-sqlite3":"^12.8.0","twitter-api-v2":"^1.29.0","@lancedb/lancedb":"^0.27.2","@anthropic-ai/sdk":"^0.78.0","@inquirer/prompts":"^8.4.1","@remotion/renderer":"^4.0.441","@remotion/media-utils":"^4.0.441","@elevenlabs/elevenlabs-js":"^2.41.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.10.0","vitest":"^2.1.0","globals":"^17.5.0"},"_npmOperationalInternal":{"tmp":"tmp/springy_0.14.5_1780365006402_0.9847483435741236","host":"s3://npm-registry-packages-npm-production"}},"0.14.6":{"name":"@andersonfda/springy","version":"0.14.6","keywords":["content-automation","social-media","ai","claude","anthropic","linkedin","twitter","bluesky","threads","medium","cascade","orchestrator"],"author":"","license":"MIT","_id":"@andersonfda/springy@0.14.6","maintainers":[{"name":"andersonfda","email":"andersonfda@gmail.com"}],"contributors":[{"name":"Anderson Andrade","email":"andersonfda@gmail.com"}],"homepage":"https://github.com/andersonfda/springy#readme","bugs":{"url":"https://github.com/andersonfda/springy/issues"},"bin":{"springy":"bin/cli.js","springy-mcp":"bin/springy-mcp.js"},"dist":{"shasum":"5f7ffbde242407c8c584929c6ea2f6b1892038e0","tarball":"https://registry.npmjs.org/@andersonfda/springy/-/springy-0.14.6.tgz","fileCount":221,"integrity":"sha512-e6fAyZryzadUTJz3x4cd+y5PZDDx+rZuBO03ngzmRGffTL5ayUelUJ0+YhKWg+68I5LbrEdXpsvIjAv5XNILDg==","signatures":[{"sig":"MEQCIEzrmeavDDF8nFFti8DAeqlryn7o00dD8NeTXfVQ0PcfAiAqFCwjKDywtPLijb8gYu1AxlfSYzGUmWmD2JmH/HShoA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1349854},"main":"./src/index.js","type":"module","engines":{"node":">=20"},"gitHead":"db1a3dec42ba043cf709bc299513fb431e683ebf","scripts":{"lint":"eslint src/ bin/ tests/","test":"vitest run","evals":"vitest run tests/evals","smoke":"node scripts/live-smoke.js","pretest":"node scripts/pretest.js","lint:fix":"eslint src/ bin/ tests/ --fix","evals:live":"node scripts/eval-live.js","test:watch":"vitest","test:rehearsal":"node scripts/tester-rehearsal.js"},"_npmUser":{"name":"andersonfda","email":"andersonfda@gmail.com"},"repository":{"url":"git+https://github.com/andersonfda/springy.git","type":"git"},"_npmVersion":"10.8.2","description":"Open-source content automation — one idea into a coordinated post for every platform, in your voice.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"open":"^11.0.0","uuid":"^13.0.0","yaml":"^2.5.0","react":"^19.2.4","dotenv":"^17.3.1","openai":"^6.25.0","remotion":"^4.0.441","voyageai":"^0.2.1","commander":"^14.0.3","node-cron":"^4.2.1","react-dom":"^19.2.4","replicate":"^1.0.1","googleapis":"^171.4.0","playwright":"^1.58.2","@atproto/api":"^0.19.0","@remotion/cli":"^4.0.441","better-sqlite3":"^12.8.0","twitter-api-v2":"^1.29.0","@lancedb/lancedb":"^0.27.2","@anthropic-ai/sdk":"^0.78.0","@inquirer/prompts":"^8.4.1","@remotion/renderer":"^4.0.441","@remotion/media-utils":"^4.0.441","@elevenlabs/elevenlabs-js":"^2.41.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.10.0","vitest":"^2.1.0","globals":"^17.5.0"},"_npmOperationalInternal":{"tmp":"tmp/springy_0.14.6_1780367589697_0.20213482029239782","host":"s3://npm-registry-packages-npm-production"}},"0.14.7":{"name":"@andersonfda/springy","version":"0.14.7","keywords":["content-automation","social-media","ai","claude","anthropic","linkedin","twitter","bluesky","threads","medium","cascade","orchestrator"],"author":"","license":"MIT","_id":"@andersonfda/springy@0.14.7","maintainers":[{"name":"andersonfda","email":"andersonfda@gmail.com"}],"contributors":[{"name":"Anderson Andrade","email":"andersonfda@gmail.com"}],"homepage":"https://github.com/andersonfda/springy#readme","bugs":{"url":"https://github.com/andersonfda/springy/issues"},"bin":{"springy":"bin/cli.js","springy-mcp":"bin/springy-mcp.js"},"dist":{"shasum":"b9eee135959db6cb121cd4fdcaa191aab0fa50c5","tarball":"https://registry.npmjs.org/@andersonfda/springy/-/springy-0.14.7.tgz","fileCount":221,"integrity":"sha512-Oznr6nWChusnPmckdEdNYhRDtrnJq5gDrueCM815PVQSnhlA3TXzpCdUPHsjpwghrCNcvJfD2sy/+vwX+oCNJw==","signatures":[{"sig":"MEUCIQDnPpN4ba7aFik+3Vwwm9Mnjs4+WMrjnXxFEDs0D4AszwIgGasfLBT4wcTuD4f5W3a4FK8yNdPCslN1vcT5Yjk00mQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1354069},"main":"./src/index.js","type":"module","engines":{"node":">=20"},"gitHead":"ab90e2d070ef42a4d6a5e4ba9d05c5fa36665336","scripts":{"lint":"eslint src/ bin/ tests/","test":"vitest run","evals":"vitest run tests/evals","smoke":"node scripts/live-smoke.js","pretest":"node scripts/pretest.js","lint:fix":"eslint src/ bin/ tests/ --fix","evals:live":"node scripts/eval-live.js","test:watch":"vitest","test:rehearsal":"node scripts/tester-rehearsal.js"},"_npmUser":{"name":"andersonfda","email":"andersonfda@gmail.com"},"repository":{"url":"git+https://github.com/andersonfda/springy.git","type":"git"},"_npmVersion":"10.8.2","description":"Open-source content automation — one idea into a coordinated post for every platform, in your voice.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"open":"^11.0.0","uuid":"^13.0.0","yaml":"^2.5.0","react":"^19.2.4","dotenv":"^17.3.1","openai":"^6.25.0","remotion":"^4.0.441","voyageai":"^0.2.1","commander":"^14.0.3","node-cron":"^4.2.1","react-dom":"^19.2.4","replicate":"^1.0.1","googleapis":"^171.4.0","playwright":"^1.58.2","@atproto/api":"^0.19.0","@remotion/cli":"^4.0.441","better-sqlite3":"^12.8.0","twitter-api-v2":"^1.29.0","@lancedb/lancedb":"^0.27.2","@anthropic-ai/sdk":"^0.78.0","@inquirer/prompts":"^8.4.1","@remotion/renderer":"^4.0.441","@remotion/media-utils":"^4.0.441","@elevenlabs/elevenlabs-js":"^2.41.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.10.0","vitest":"^2.1.0","globals":"^17.5.0"},"_npmOperationalInternal":{"tmp":"tmp/springy_0.14.7_1780369501740_0.9738388151843103","host":"s3://npm-registry-packages-npm-production"}},"0.14.8":{"name":"@andersonfda/springy","version":"0.14.8","keywords":["content-automation","social-media","ai","claude","anthropic","linkedin","twitter","bluesky","threads","medium","cascade","orchestrator"],"author":"","license":"MIT","_id":"@andersonfda/springy@0.14.8","maintainers":[{"name":"andersonfda","email":"andersonfda@gmail.com"}],"contributors":[{"name":"Anderson Andrade","email":"andersonfda@gmail.com"}],"homepage":"https://github.com/andersonfda/springy#readme","bugs":{"url":"https://github.com/andersonfda/springy/issues"},"bin":{"springy":"bin/cli.js","springy-mcp":"bin/springy-mcp.js"},"dist":{"shasum":"4164298fa7373b5dbf742458089e9ebc1ddc3030","tarball":"https://registry.npmjs.org/@andersonfda/springy/-/springy-0.14.8.tgz","fileCount":221,"integrity":"sha512-a0CWPR0Td32kLufmRvYr1s3F/AMvhVCK32h2tIKsyWCUqk5yF3gkg5JSYOU0SZJjaTXitrmYEgNqa6UQFYAT9A==","signatures":[{"sig":"MEYCIQCy8pmH3YGDszxl4uzhqIHopkUYImvSzjy93kcDgsBlmQIhAOCtRAxh0UfW2ftCYENXw4D1DZCOFM8wD9JyKbhGJRrL","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1356933},"main":"./src/index.js","type":"module","engines":{"node":">=20"},"gitHead":"283797afe3195b30eb553144a37187888a2b653f","scripts":{"lint":"eslint src/ bin/ tests/","test":"vitest run","evals":"vitest run tests/evals","smoke":"node scripts/live-smoke.js","pretest":"node scripts/pretest.js","lint:fix":"eslint src/ bin/ tests/ --fix","evals:live":"node scripts/eval-live.js","test:watch":"vitest","test:rehearsal":"node scripts/tester-rehearsal.js"},"_npmUser":{"name":"andersonfda","email":"andersonfda@gmail.com"},"repository":{"url":"git+https://github.com/andersonfda/springy.git","type":"git"},"_npmVersion":"10.8.2","description":"Open-source content automation — one idea into a coordinated post for every platform, in your voice.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"open":"^11.0.0","uuid":"^13.0.0","yaml":"^2.5.0","react":"^19.2.4","dotenv":"^17.3.1","openai":"^6.25.0","remotion":"^4.0.441","voyageai":"^0.2.1","commander":"^14.0.3","node-cron":"^4.2.1","react-dom":"^19.2.4","replicate":"^1.0.1","googleapis":"^171.4.0","playwright":"^1.58.2","@atproto/api":"^0.19.0","@remotion/cli":"^4.0.441","better-sqlite3":"^12.8.0","twitter-api-v2":"^1.29.0","@lancedb/lancedb":"^0.27.2","@anthropic-ai/sdk":"^0.78.0","@inquirer/prompts":"^8.4.1","@remotion/renderer":"^4.0.441","@remotion/media-utils":"^4.0.441","@elevenlabs/elevenlabs-js":"^2.41.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.10.0","vitest":"^2.1.0","globals":"^17.5.0"},"_npmOperationalInternal":{"tmp":"tmp/springy_0.14.8_1780371802623_0.933754627854001","host":"s3://npm-registry-packages-npm-production"}},"0.14.9":{"name":"@andersonfda/springy","version":"0.14.9","keywords":["content-automation","social-media","ai","claude","anthropic","linkedin","twitter","bluesky","threads","medium","cascade","orchestrator"],"author":"","license":"MIT","_id":"@andersonfda/springy@0.14.9","maintainers":[{"name":"andersonfda","email":"andersonfda@gmail.com"}],"contributors":[{"name":"Anderson Andrade","email":"andersonfda@gmail.com"}],"homepage":"https://github.com/andersonfda/springy#readme","bugs":{"url":"https://github.com/andersonfda/springy/issues"},"bin":{"springy":"bin/cli.js","springy-mcp":"bin/springy-mcp.js"},"dist":{"shasum":"c21f8f05283249c6b6890b0503f7543044982043","tarball":"https://registry.npmjs.org/@andersonfda/springy/-/springy-0.14.9.tgz","fileCount":221,"integrity":"sha512-QScbnKSpr6KVCvN1Bx72qOSjuUKCZMZH/Nomz/aVZ+NmoHZ+hAD8OVZi+PGhFa7PTZVuKHQrKbyESR215vJLKw==","signatures":[{"sig":"MEUCIQD0IpXxFv1aBcXbOWMhRRL227uMknNgsSgUzJAQnXxrgAIgIdokf6DSsC9UDeiGpc1YBBPLbhYsVoU+Y/Iq2VPe1BQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1359218},"main":"./src/index.js","type":"module","engines":{"node":">=20"},"gitHead":"c4642ad0613110414d0fc7d7778c7b723f2d4d66","scripts":{"lint":"eslint src/ bin/ tests/","test":"vitest run","evals":"vitest run tests/evals","smoke":"node scripts/live-smoke.js","pretest":"node scripts/pretest.js","lint:fix":"eslint src/ bin/ tests/ --fix","evals:live":"node scripts/eval-live.js","test:watch":"vitest","test:rehearsal":"node scripts/tester-rehearsal.js"},"_npmUser":{"name":"andersonfda","email":"andersonfda@gmail.com"},"repository":{"url":"git+https://github.com/andersonfda/springy.git","type":"git"},"_npmVersion":"10.8.2","description":"Open-source content automation — one idea into a coordinated post for every platform, in your voice.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"open":"^11.0.0","uuid":"^13.0.0","yaml":"^2.5.0","react":"^19.2.4","dotenv":"^17.3.1","openai":"^6.25.0","remotion":"^4.0.441","voyageai":"^0.2.1","commander":"^14.0.3","node-cron":"^4.2.1","react-dom":"^19.2.4","replicate":"^1.0.1","googleapis":"^171.4.0","playwright":"^1.58.2","@atproto/api":"^0.19.0","@remotion/cli":"^4.0.441","better-sqlite3":"^12.8.0","twitter-api-v2":"^1.29.0","@lancedb/lancedb":"^0.27.2","@anthropic-ai/sdk":"^0.78.0","@inquirer/prompts":"^8.4.1","@remotion/renderer":"^4.0.441","@remotion/media-utils":"^4.0.441","@elevenlabs/elevenlabs-js":"^2.41.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.10.0","vitest":"^2.1.0","globals":"^17.5.0"},"_npmOperationalInternal":{"tmp":"tmp/springy_0.14.9_1780699764824_0.6969071301539653","host":"s3://npm-registry-packages-npm-production"}},"0.15.0":{"name":"@andersonfda/springy","version":"0.15.0","keywords":["content-automation","social-media","ai","claude","anthropic","linkedin","twitter","bluesky","threads","medium","cascade","orchestrator"],"author":"","license":"MIT","_id":"@andersonfda/springy@0.15.0","maintainers":[{"name":"andersonfda","email":"andersonfda@gmail.com"}],"contributors":[{"name":"Anderson Andrade","email":"andersonfda@gmail.com"}],"homepage":"https://github.com/andersonfda/springy#readme","bugs":{"url":"https://github.com/andersonfda/springy/issues"},"bin":{"springy":"bin/cli.js","springy-mcp":"bin/springy-mcp.js"},"dist":{"shasum":"468acc022130efcea0c79aeea82ed78017b6d951","tarball":"https://registry.npmjs.org/@andersonfda/springy/-/springy-0.15.0.tgz","fileCount":225,"integrity":"sha512-l5O/myISLnt+W6pw3zR/VDXRUCGj/Zef2L2FNrUVETE2CA2RdGuSHlln49rH9/aEg/hLOBlRNRqSQPZPtjXG9Q==","signatures":[{"sig":"MEQCIEmPAcKJ6rrIzUlVbu5V1uGz+R1HkcuulRNGzpIt52uzAiAzaUcYUUvSkmcGBmYgsixOjyYvK3h1xJ8MRZdRWt2bZA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1408530},"main":"./src/index.js","type":"module","engines":{"node":">=20"},"gitHead":"da4669d3974a1e30c78f9e67409fbd034e68eac3","scripts":{"lint":"eslint src/ bin/ tests/","test":"vitest run","evals":"vitest run tests/evals","smoke":"node scripts/live-smoke.js","pretest":"node scripts/pretest.js","lint:fix":"eslint src/ bin/ tests/ --fix","evals:live":"node scripts/eval-live.js","test:watch":"vitest","test:rehearsal":"node scripts/tester-rehearsal.js","benchmark:anti-slop":"node scripts/anti-slop-benchmark.js"},"_npmUser":{"name":"andersonfda","email":"andersonfda@gmail.com"},"repository":{"url":"git+https://github.com/andersonfda/springy.git","type":"git"},"_npmVersion":"10.8.2","description":"Open-source content automation — one idea into a coordinated post for every platform, in your voice.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"open":"^11.0.0","uuid":"^13.0.0","yaml":"^2.5.0","react":"^19.2.4","dotenv":"^17.3.1","openai":"^6.25.0","remotion":"^4.0.441","voyageai":"^0.2.1","commander":"^14.0.3","node-cron":"^4.2.1","react-dom":"^19.2.4","replicate":"^1.0.1","googleapis":"^171.4.0","playwright":"^1.58.2","@atproto/api":"^0.19.0","@remotion/cli":"^4.0.441","better-sqlite3":"^12.8.0","twitter-api-v2":"^1.29.0","@lancedb/lancedb":"^0.27.2","@anthropic-ai/sdk":"^0.78.0","@inquirer/prompts":"^8.4.1","@remotion/renderer":"^4.0.441","@remotion/media-utils":"^4.0.441","@elevenlabs/elevenlabs-js":"^2.41.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.10.0","vitest":"^2.1.0","globals":"^17.5.0"},"_npmOperationalInternal":{"tmp":"tmp/springy_0.15.0_1781119020887_0.3416412955409305","host":"s3://npm-registry-packages-npm-production"}},"0.15.1":{"name":"@andersonfda/springy","version":"0.15.1","keywords":["content-automation","social-media","ai","claude","anthropic","linkedin","twitter","bluesky","threads","medium","cascade","orchestrator"],"author":"","license":"MIT","_id":"@andersonfda/springy@0.15.1","maintainers":[{"name":"andersonfda","email":"andersonfda@gmail.com"}],"contributors":[{"name":"Anderson Andrade","email":"andersonfda@gmail.com"}],"homepage":"https://github.com/andersonfda/springy#readme","bugs":{"url":"https://github.com/andersonfda/springy/issues"},"bin":{"springy":"bin/cli.js","springy-mcp":"bin/springy-mcp.js"},"dist":{"shasum":"da200e68d82260974e04d0e2d34825cdc890f78e","tarball":"https://registry.npmjs.org/@andersonfda/springy/-/springy-0.15.1.tgz","fileCount":226,"integrity":"sha512-Ux/bWTd78LGyVgrAAYlS8gpJyDLdAYtjWDXvXlyYfLHwVcRwGxNfc+0mPBfrPbc7R/e46oI56h/eue+W99u0sQ==","signatures":[{"sig":"MEYCIQCydtYhgBpI6rs8C1I4QtFzYa+UAuEwKVlopmMiF5VocAIhANecv4ownBIZKb6C//A4UpNzWsIPnFhOjSNeRwDW1NX6","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1423251},"main":"./src/index.js","type":"module","engines":{"node":">=20"},"gitHead":"6afab833715b22f8ec4702ea0051a249f51c2be7","scripts":{"lint":"eslint src/ bin/ tests/","test":"vitest run","evals":"vitest run tests/evals","smoke":"node scripts/live-smoke.js","pretest":"node scripts/pretest.js","lint:fix":"eslint src/ bin/ tests/ --fix","evals:live":"node scripts/eval-live.js","test:watch":"vitest","test:rehearsal":"node scripts/tester-rehearsal.js","benchmark:anti-slop":"node scripts/anti-slop-benchmark.js"},"_npmUser":{"name":"andersonfda","email":"andersonfda@gmail.com"},"repository":{"url":"git+https://github.com/andersonfda/springy.git","type":"git"},"_npmVersion":"10.8.2","description":"Open-source content automation — one idea into a coordinated post for every platform, in your voice.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"open":"^11.0.0","uuid":"^13.0.0","yaml":"^2.5.0","react":"^19.2.4","dotenv":"^17.3.1","openai":"^6.25.0","remotion":"^4.0.441","voyageai":"^0.2.1","commander":"^14.0.3","node-cron":"^4.2.1","react-dom":"^19.2.4","replicate":"^1.0.1","googleapis":"^171.4.0","playwright":"^1.58.2","@atproto/api":"^0.19.0","@remotion/cli":"^4.0.441","better-sqlite3":"^12.8.0","twitter-api-v2":"^1.29.0","@lancedb/lancedb":"^0.27.2","@anthropic-ai/sdk":"^0.78.0","@inquirer/prompts":"^8.4.1","@remotion/renderer":"^4.0.441","@remotion/media-utils":"^4.0.441","@elevenlabs/elevenlabs-js":"^2.41.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.10.0","vitest":"^2.1.0","globals":"^17.5.0"},"_npmOperationalInternal":{"tmp":"tmp/springy_0.15.1_1781141199783_0.38669393590590495","host":"s3://npm-registry-packages-npm-production"}},"0.16.0":{"name":"@andersonfda/springy","version":"0.16.0","keywords":["content-automation","social-media","ai","claude","anthropic","linkedin","twitter","bluesky","threads","medium","cascade","orchestrator"],"author":"","license":"MIT","_id":"@andersonfda/springy@0.16.0","maintainers":[{"name":"andersonfda","email":"andersonfda@gmail.com"}],"contributors":[{"name":"Anderson Andrade","email":"andersonfda@gmail.com"}],"homepage":"https://github.com/andersonfda/springy#readme","bugs":{"url":"https://github.com/andersonfda/springy/issues"},"bin":{"springy":"bin/cli.js","springy-mcp":"bin/springy-mcp.js"},"dist":{"shasum":"ddc87977f91d81ceb0aa0804c1596acd4cbbf936","tarball":"https://registry.npmjs.org/@andersonfda/springy/-/springy-0.16.0.tgz","fileCount":231,"integrity":"sha512-RAkfXlcjlud8X+x9wza4qU7cZIawMNPGzgIXlS3OEl+nu5S9osgq3eyOPZn4DJJ/safdzLH4E42UJmZ+VQQVyg==","signatures":[{"sig":"MEUCIQCdezrYzNP8hFhc3RlpnzVk8TyZYQTyEBwcbzqCSh09OQIgXeeirNlV1nonGiCQWk1HYYo9S29kdzoOJGtNaBU1Bhc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1450795},"main":"./src/index.js","type":"module","engines":{"node":">=20"},"gitHead":"c802137b908d5fcc15517cd4f3ed934f59eb7210","scripts":{"lint":"eslint src/ bin/ tests/","test":"vitest run","evals":"vitest run tests/evals","smoke":"node scripts/live-smoke.js","pretest":"node scripts/pretest.js","lint:fix":"eslint src/ bin/ tests/ --fix","evals:live":"node scripts/eval-live.js","test:watch":"vitest","test:rehearsal":"node scripts/tester-rehearsal.js","benchmark:anti-slop":"node scripts/anti-slop-benchmark.js"},"_npmUser":{"name":"andersonfda","email":"andersonfda@gmail.com"},"repository":{"url":"git+https://github.com/andersonfda/springy.git","type":"git"},"_npmVersion":"10.8.2","description":"Open-source content automation — one idea into a coordinated post for every platform, in your voice.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"open":"^11.0.0","uuid":"^13.0.0","yaml":"^2.5.0","react":"^19.2.4","dotenv":"^17.3.1","openai":"^6.25.0","remotion":"^4.0.441","voyageai":"^0.2.1","commander":"^14.0.3","node-cron":"^4.2.1","react-dom":"^19.2.4","replicate":"^1.0.1","googleapis":"^171.4.0","playwright":"^1.58.2","@atproto/api":"^0.19.0","@remotion/cli":"^4.0.441","better-sqlite3":"^12.8.0","twitter-api-v2":"^1.29.0","@lancedb/lancedb":"^0.27.2","@anthropic-ai/sdk":"^0.78.0","@inquirer/prompts":"^8.4.1","@remotion/renderer":"^4.0.441","@remotion/media-utils":"^4.0.441","@elevenlabs/elevenlabs-js":"^2.41.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.10.0","vitest":"^2.1.0","globals":"^17.5.0"},"_npmOperationalInternal":{"tmp":"tmp/springy_0.16.0_1781223473354_0.7666871055622602","host":"s3://npm-registry-packages-npm-production"}},"0.16.1":{"name":"@andersonfda/springy","version":"0.16.1","keywords":["content-automation","social-media","ai","claude","anthropic","linkedin","twitter","bluesky","threads","medium","cascade","orchestrator"],"author":"","license":"MIT","_id":"@andersonfda/springy@0.16.1","maintainers":[{"name":"andersonfda","email":"andersonfda@gmail.com"}],"contributors":[{"name":"Anderson Andrade","email":"andersonfda@gmail.com"}],"homepage":"https://github.com/andersonfda/springy#readme","bugs":{"url":"https://github.com/andersonfda/springy/issues"},"bin":{"springy":"bin/cli.js","springy-mcp":"bin/springy-mcp.js"},"dist":{"shasum":"73395e63310fafb91f848ffd78f371f477322650","tarball":"https://registry.npmjs.org/@andersonfda/springy/-/springy-0.16.1.tgz","fileCount":231,"integrity":"sha512-ZudUgp7nmI6r9x4y6HlSFae2DIJC5aqUMeHbUrRGzSWTZA/dqHQzT9ofRbNcQ4CNeMCGUbrhi0Bdz2zTccpD6g==","signatures":[{"sig":"MEUCIDZzAzZaPfNN79P1n3MhUq/iZQYN7G6W8r6f4LRkiRYdAiEAtpli0xSeol6mgu+TEjCFyhhlDSBdQ4aknwTdFQEh9PE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1464176},"main":"./src/index.js","type":"module","engines":{"node":">=20"},"gitHead":"cfd3283190245f45bc59b232e4e7e729d96a5d23","scripts":{"lint":"eslint src/ bin/ tests/","test":"vitest run","evals":"vitest run tests/evals","smoke":"node scripts/live-smoke.js","pretest":"node scripts/pretest.js","lint:fix":"eslint src/ bin/ tests/ --fix","evals:live":"node scripts/eval-live.js","test:watch":"vitest","test:rehearsal":"node scripts/tester-rehearsal.js","benchmark:anti-slop":"node scripts/anti-slop-benchmark.js"},"_npmUser":{"name":"andersonfda","email":"andersonfda@gmail.com"},"repository":{"url":"git+https://github.com/andersonfda/springy.git","type":"git"},"_npmVersion":"10.8.2","description":"Open-source content automation — one idea into a coordinated post for every platform, in your voice.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"open":"^11.0.0","uuid":"^13.0.0","yaml":"^2.5.0","react":"^19.2.4","dotenv":"^17.3.1","openai":"^6.25.0","remotion":"^4.0.441","voyageai":"^0.2.1","commander":"^14.0.3","node-cron":"^4.2.1","react-dom":"^19.2.4","replicate":"^1.0.1","googleapis":"^171.4.0","playwright":"^1.58.2","@atproto/api":"^0.19.0","@remotion/cli":"^4.0.441","better-sqlite3":"^12.8.0","twitter-api-v2":"^1.29.0","@lancedb/lancedb":"^0.27.2","@anthropic-ai/sdk":"^0.78.0","@inquirer/prompts":"^8.4.1","@remotion/renderer":"^4.0.441","@remotion/media-utils":"^4.0.441","@elevenlabs/elevenlabs-js":"^2.41.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.10.0","vitest":"^2.1.0","globals":"^17.5.0"},"_npmOperationalInternal":{"tmp":"tmp/springy_0.16.1_1781618842595_0.2667836016556673","host":"s3://npm-registry-packages-npm-production"}},"0.17.0":{"name":"@andersonfda/springy","version":"0.17.0","keywords":["content-automation","social-media","ai","claude","anthropic","linkedin","twitter","bluesky","threads","medium","cascade","orchestrator"],"author":"","license":"MIT","_id":"@andersonfda/springy@0.17.0","maintainers":[{"name":"andersonfda","email":"andersonfda@gmail.com"}],"contributors":[{"name":"Anderson Andrade","email":"andersonfda@gmail.com"}],"homepage":"https://github.com/andersonfda/springy#readme","bugs":{"url":"https://github.com/andersonfda/springy/issues"},"bin":{"springy":"bin/cli.js","springy-mcp":"bin/springy-mcp.js"},"dist":{"shasum":"c5c2edb04e1ffe1a7f3ae940b78e2005c9c33395","tarball":"https://registry.npmjs.org/@andersonfda/springy/-/springy-0.17.0.tgz","fileCount":233,"integrity":"sha512-CEhL0k9heYRifKnbd9hdTtPIgrghotzBdWku711CFGIr/jRigTDCUXEqKs+8mAVz/tJHhp0Qv6SCwy9zMadjTA==","signatures":[{"sig":"MEUCICoAJgsexdR3VhPJQO6rV4UCV9jI9QbRaBwYorgBcAHvAiEA76crlGGMY6R9JEf1ljPPoLcMNlrLcnfwaP3rRKScYkU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1502473},"main":"./src/index.js","type":"module","engines":{"node":">=20"},"gitHead":"049a591c10de9d829d2e7238de3f9e526d5c0dd3","scripts":{"lint":"eslint src/ bin/ tests/","test":"vitest run","evals":"vitest run tests/evals","smoke":"node scripts/live-smoke.js","pretest":"node scripts/pretest.js","lint:fix":"eslint src/ bin/ tests/ --fix","evals:live":"node scripts/eval-live.js","test:watch":"vitest","test:rehearsal":"node scripts/tester-rehearsal.js","benchmark:anti-slop":"node scripts/anti-slop-benchmark.js"},"_npmUser":{"name":"andersonfda","email":"andersonfda@gmail.com"},"repository":{"url":"git+https://github.com/andersonfda/springy.git","type":"git"},"_npmVersion":"10.8.2","description":"Open-source content automation — one idea into a coordinated post for every platform, in your voice.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"open":"^11.0.0","uuid":"^13.0.0","yaml":"^2.5.0","react":"^19.2.4","dotenv":"^17.3.1","openai":"^6.25.0","remotion":"^4.0.441","voyageai":"^0.2.1","commander":"^14.0.3","node-cron":"^4.2.1","react-dom":"^19.2.4","replicate":"^1.0.1","googleapis":"^171.4.0","playwright":"^1.58.2","@atproto/api":"^0.19.0","@remotion/cli":"^4.0.441","better-sqlite3":"^12.8.0","twitter-api-v2":"^1.29.0","@lancedb/lancedb":"^0.27.2","@anthropic-ai/sdk":"^0.78.0","@inquirer/prompts":"^8.4.1","@remotion/renderer":"^4.0.441","@remotion/media-utils":"^4.0.441","@elevenlabs/elevenlabs-js":"^2.41.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.10.0","vitest":"^4.1.10","globals":"^17.5.0"},"_npmOperationalInternal":{"tmp":"tmp/springy_0.17.0_1784148854000_0.20089627555490241","host":"s3://npm-registry-packages-npm-production"}},"0.18.0":{"name":"@andersonfda/springy","version":"0.18.0","keywords":["content-automation","social-media","ai","claude","anthropic","linkedin","twitter","bluesky","threads","medium","cascade","orchestrator","mcp","mcp-server","model-context-protocol","anti-slop","ai-detection","brand-voice","content-repurposing","postiz"],"author":"","license":"MIT","_id":"@andersonfda/springy@0.18.0","maintainers":[{"name":"andersonfda","email":"andersonfda@gmail.com"}],"contributors":[{"name":"Anderson Andrade","email":"andersonfda@gmail.com"}],"homepage":"https://github.com/andersonfda/springy#readme","bugs":{"url":"https://github.com/andersonfda/springy/issues"},"bin":{"springy":"bin/cli.js","springy-mcp":"bin/springy-mcp.js"},"dist":{"shasum":"145bfa3a31d1755bec46e22f4a3728da484030f3","tarball":"https://registry.npmjs.org/@andersonfda/springy/-/springy-0.18.0.tgz","fileCount":237,"integrity":"sha512-c7zmeIxr7NAAZYc82jps2XVYQWL29TWga49Fod17ho+oqSudeWKjPRN/EDJbvMP03P1Dqrvv3yetCDyuyxQ/Ug==","signatures":[{"sig":"MEQCIGmSfDTw2btARc5JvY83HsyUb++7TH5K4BNtWhlRjslEAiBsX/ryqq9rW+yZhvrPdI/53mIelKKDzTIECV3hfJcWAg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1530507},"main":"./src/index.js","type":"module","engines":{"node":">=20"},"gitHead":"52ea70c07a53c4a9b4631722eb9d2a6e408f5610","mcpName":"io.github.andersonfda/springy","scripts":{"lint":"eslint src/ bin/ tests/","test":"vitest run","evals":"vitest run tests/evals","smoke":"node scripts/live-smoke.js","pretest":"node scripts/pretest.js","lint:fix":"eslint src/ bin/ tests/ --fix","evals:live":"node scripts/eval-live.js","test:watch":"vitest","test:rehearsal":"node scripts/tester-rehearsal.js","benchmark:anti-slop":"node scripts/anti-slop-benchmark.js"},"_npmUser":{"name":"andersonfda","email":"andersonfda@gmail.com"},"repository":{"url":"git+https://github.com/andersonfda/springy.git","type":"git"},"_npmVersion":"10.8.2","description":"Open-source content automation — one idea into a coordinated post for every platform, in your voice.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"open":"^11.0.0","uuid":"^13.0.0","yaml":"^2.5.0","react":"^19.2.4","dotenv":"^17.3.1","openai":"^6.25.0","remotion":"^4.0.441","voyageai":"^0.2.1","commander":"^14.0.3","node-cron":"^4.2.1","react-dom":"^19.2.4","replicate":"^1.0.1","googleapis":"^171.4.0","playwright":"^1.58.2","@atproto/api":"^0.19.0","@remotion/cli":"^4.0.441","better-sqlite3":"^12.8.0","twitter-api-v2":"^1.29.0","@lancedb/lancedb":"^0.27.2","@anthropic-ai/sdk":"^0.78.0","@inquirer/prompts":"^8.4.1","@remotion/renderer":"^4.0.441","@remotion/media-utils":"^4.0.441","@elevenlabs/elevenlabs-js":"^2.41.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.10.0","vitest":"^4.1.10","globals":"^17.5.0"},"_npmOperationalInternal":{"tmp":"tmp/springy_0.18.0_1784149053619_0.3688742996318659","host":"s3://npm-registry-packages-npm-production"}},"0.19.0":{"name":"@andersonfda/springy","version":"0.19.0","keywords":["content-automation","social-media","ai","claude","anthropic","linkedin","twitter","bluesky","threads","medium","cascade","orchestrator","mcp","mcp-server","model-context-protocol","anti-slop","ai-detection","brand-voice","content-repurposing","postiz"],"author":"","license":"MIT","_id":"@andersonfda/springy@0.19.0","maintainers":[{"name":"andersonfda","email":"andersonfda@gmail.com"}],"contributors":[{"name":"Anderson Andrade","email":"andersonfda@gmail.com"}],"homepage":"https://github.com/andersonfda/springy#readme","bugs":{"url":"https://github.com/andersonfda/springy/issues"},"bin":{"springy":"bin/cli.js","springy-mcp":"bin/springy-mcp.js"},"dist":{"shasum":"f251fdda5e71b527f8d8949a3eec0d1df0c49367","tarball":"https://registry.npmjs.org/@andersonfda/springy/-/springy-0.19.0.tgz","fileCount":240,"integrity":"sha512-gTYTmigh6GVGGgtiQqaIgywNJrbLCsZ8QIJmAS3boIKMiWo+HQBKaqRXjn2sJZP/gg/83ygKgPHpWCupOdiGzA==","signatures":[{"sig":"MEUCICZgwi5G7DPvu2EixU/vFOk6iHSJViQZnOhIZcz7TVlkAiEA2YDzfnacnZ5lySZAKAdStBQwPUOT823vzQTl9PgwSTw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1545380},"main":"./src/index.js","type":"module","engines":{"node":">=20"},"gitHead":"d0737ce845c67152e3f420a9f3739a037d52830f","mcpName":"io.github.andersonfda/springy","scripts":{"lint":"eslint src/ bin/ tests/","test":"vitest run","evals":"vitest run tests/evals","smoke":"node scripts/live-smoke.js","pretest":"node scripts/pretest.js","lint:fix":"eslint src/ bin/ tests/ --fix","evals:live":"node scripts/eval-live.js","test:watch":"vitest","test:rehearsal":"node scripts/tester-rehearsal.js","benchmark:anti-slop":"node scripts/anti-slop-benchmark.js"},"_npmUser":{"name":"andersonfda","email":"andersonfda@gmail.com"},"repository":{"url":"git+https://github.com/andersonfda/springy.git","type":"git"},"_npmVersion":"10.8.2","description":"Open-source content automation — one idea into a coordinated post for every platform, in your voice.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"open":"^11.0.0","uuid":"^13.0.0","yaml":"^2.5.0","react":"^19.2.4","dotenv":"^17.3.1","openai":"^6.25.0","remotion":"^4.0.441","voyageai":"^0.2.1","commander":"^14.0.3","node-cron":"^4.2.1","react-dom":"^19.2.4","replicate":"^1.0.1","googleapis":"^171.4.0","playwright":"^1.58.2","@atproto/api":"^0.19.0","@remotion/cli":"^4.0.441","better-sqlite3":"^12.8.0","twitter-api-v2":"^1.29.0","@lancedb/lancedb":"^0.27.2","@anthropic-ai/sdk":"^0.78.0","@inquirer/prompts":"^8.4.1","@remotion/renderer":"^4.0.441","@remotion/media-utils":"^4.0.441","@elevenlabs/elevenlabs-js":"^2.41.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.10.0","vitest":"^4.1.10","globals":"^17.5.0"},"_npmOperationalInternal":{"tmp":"tmp/springy_0.19.0_1784149246096_0.40520435766303997","host":"s3://npm-registry-packages-npm-production"}},"0.19.1":{"name":"@andersonfda/springy","version":"0.19.1","mcpName":"io.github.andersonfda/springy","description":"Open-source content automation — one idea into a coordinated post for every platform, in your voice.","type":"module","main":"./src/index.js","bin":{"springy":"bin/cli.js","springy-mcp":"bin/springy-mcp.js"},"engines":{"node":">=20"},"scripts":{"pretest":"node scripts/pretest.js","test":"vitest run","test:watch":"vitest","smoke":"node scripts/live-smoke.js","evals":"vitest run tests/evals","evals:live":"node scripts/eval-live.js","benchmark:anti-slop":"node scripts/anti-slop-benchmark.js","lint":"eslint src/ bin/ tests/","lint:fix":"eslint src/ bin/ tests/ --fix","test:rehearsal":"node scripts/tester-rehearsal.js"},"keywords":["content-automation","social-media","ai","claude","anthropic","linkedin","twitter","bluesky","threads","medium","cascade","orchestrator","mcp","mcp-server","model-context-protocol","anti-slop","ai-detection","brand-voice","content-repurposing","postiz"],"author":"","contributors":[{"name":"Anderson Andrade","email":"andersonfda@gmail.com"}],"license":"MIT","repository":{"type":"git","url":"git+https://github.com/andersonfda/springy.git"},"bugs":{"url":"https://github.com/andersonfda/springy/issues"},"homepage":"https://github.com/andersonfda/springy#readme","dependencies":{"@anthropic-ai/sdk":"^0.78.0","@atproto/api":"^0.19.0","@elevenlabs/elevenlabs-js":"^2.41.0","@inquirer/prompts":"^8.4.1","@lancedb/lancedb":"^0.27.2","@remotion/cli":"^4.0.441","@remotion/media-utils":"^4.0.441","@remotion/renderer":"^4.0.441","better-sqlite3":"^12.8.0","commander":"^14.0.3","dotenv":"^17.3.1","googleapis":"^171.4.0","node-cron":"^4.2.1","open":"^11.0.0","openai":"^6.25.0","playwright":"^1.58.2","react":"^19.2.4","react-dom":"^19.2.4","remotion":"^4.0.441","replicate":"^1.0.1","twitter-api-v2":"^1.29.0","uuid":"^13.0.0","voyageai":"^0.2.1","yaml":"^2.5.0"},"devDependencies":{"eslint":"^9.10.0","globals":"^17.5.0","vitest":"^4.1.10"},"_id":"@andersonfda/springy@0.19.1","gitHead":"bc010b40beac9269503f0f1ac5c82d04792a33ae","_nodeVersion":"20.20.2","_npmVersion":"10.8.2","dist":{"integrity":"sha512-WyfYKqcLpOtxhPUzjWaCtUPW7JaVJinSDB252F7ZeZ6Mj0u4ekorub0wHK0hvJE9UVEjdbwoaNgr5rhLJbolYg==","shasum":"062352b4e251b0218c2c7e3a0efa43dff4852779","tarball":"https://registry.npmjs.org/@andersonfda/springy/-/springy-0.19.1.tgz","fileCount":241,"unpackedSize":1560037,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDy2Fq+CwJjpkle3xcQQROiSkR6CGWqyTlF8U9u05p4rgIhALeIQDu+0WEenOdXrt5CwwW5aSkORnvi1ydOP/n/dD3T"}]},"_npmUser":{"name":"andersonfda","email":"andersonfda@gmail.com"},"directories":{},"maintainers":[{"name":"andersonfda","email":"andersonfda@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/springy_0.19.1_1784149434341_0.21563441335791267"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-01T22:45:16.082Z","modified":"2026-07-15T21:03:54.578Z","0.14.3":"2026-06-01T22:45:16.413Z","0.14.4":"2026-06-02T01:31:23.798Z","0.14.5":"2026-06-02T01:50:06.604Z","0.14.6":"2026-06-02T02:33:09.906Z","0.14.7":"2026-06-02T03:05:01.959Z","0.14.8":"2026-06-02T03:43:22.802Z","0.14.9":"2026-06-05T22:49:25.040Z","0.15.0":"2026-06-10T19:17:01.219Z","0.15.1":"2026-06-11T01:26:39.993Z","0.16.0":"2026-06-12T00:17:53.561Z","0.16.1":"2026-06-16T14:07:22.775Z","0.17.0":"2026-07-15T20:54:14.218Z","0.18.0":"2026-07-15T20:57:33.760Z","0.19.0":"2026-07-15T21:00:46.281Z","0.19.1":"2026-07-15T21:03:54.487Z"},"bugs":{"url":"https://github.com/andersonfda/springy/issues"},"license":"MIT","homepage":"https://github.com/andersonfda/springy#readme","keywords":["content-automation","social-media","ai","claude","anthropic","linkedin","twitter","bluesky","threads","medium","cascade","orchestrator","mcp","mcp-server","model-context-protocol","anti-slop","ai-detection","brand-voice","content-repurposing","postiz"],"repository":{"type":"git","url":"git+https://github.com/andersonfda/springy.git"},"description":"Open-source content automation — one idea into a coordinated post for every platform, in your voice.","contributors":[{"name":"Anderson Andrade","email":"andersonfda@gmail.com"}],"maintainers":[{"name":"andersonfda","email":"andersonfda@gmail.com"}],"readme":"# springy\n\n**Turn one idea into posts for every platform — in your voice, critiqued, queued, tracked.**\n\nSpringy is an open-source content automation stack. You write an anchor essay (or let it draft one from a ranked opportunity); it cascades platform-specific derivatives for LinkedIn, X, Bluesky, and Threads by default — plus Medium / Dev.to / Reel / TikTok as opt-ins. Each draft is critiqued against your brand voice, humanized, and dropped into a publish queue. API where possible, browser automation where not.\n\nLocal-first. Bring your own model — Anthropic Claude or OpenAI GPT, swappable via `SPRINGY_LLM_PROVIDER`. No SaaS required.\n\n---\n\n## Status\n\n**Alpha.** The architecture is audited and working, but the developer experience is rough and error messages assume you know the code. Not yet recommended for non-technical users. Contributors welcome.\n\nIf you're a **technical alpha tester**, start here:\n- [`docs/TESTER_GUIDE.md`](docs/TESTER_GUIDE.md) — copy-pasteable golden path with safety checklist.\n- [`docs/PLATFORM_SUPPORT.md`](docs/PLATFORM_SUPPORT.md) — readiness label per platform (default text / SEO / video / browser fallback).\n- [`docs/KNOWN_LIMITATIONS.md`](docs/KNOWN_LIMITATIONS.md) — explicit list of what isn't yet done (hosted OAuth, built-in video rendering, fine-grained engagement polling, queue-backend swap).\n\nCommunity / contributor operations:\n- [`SUPPORT.md`](SUPPORT.md) — where to ask for help, what to include, and how to route reports.\n- [`CONTRIBUTING.md`](CONTRIBUTING.md) — local setup, PR flow, and contribution expectations.\n- [`ROADMAP.md`](ROADMAP.md) — shipped / beta focus / next / later / not planned.\n- [`docs/COMMUNITY_OPERATIONS.md`](docs/COMMUNITY_OPERATIONS.md) — GitHub, Discord, beta, triage, and release operating model.\n- [`docs/DISCORD_LAUNCH_KIT.md`](docs/DISCORD_LAUNCH_KIT.md) — Discord server setup, roles, pinned posts, and moderation playbooks.\n- [`GOVERNANCE.md`](GOVERNANCE.md) — current maintainer model and how ownership expands.\n\n---\n\n## What it actually does\n\n| Stage | What happens |\n|---|---|\n| **Discovery** | Bring-your-own briefings: drop markdown files into `data/briefings/` (and optionally `data/trending/`), then run `springy opportunities:rank` to score them. RSS / HN / GitHub-trending / competitor scrapers are roadmap, not shipped — wire your own ingestion or paste the day's signals manually. |\n| **Plan** | `springy plan:week` turns ranked opportunities + `config/platforms.yaml` cadence into a local weekly plan. Read-only by default; `--write` saves Markdown, JSON, and `.ics` calendar artifacts under `output/plans/`. |\n| **Anchor** | Generates an essay from the top opportunity. Critiqued against your voice. Humanized. Human-in-the-loop gate. |\n| **Fan-out** | Rewrites the anchor for each platform in parallel. Native style per platform, not copy-paste. Second HITL gate. |\n| **Media** | Generates hero images per platform (Replicate Flux). Reel/TikTok require an MP4 alongside the draft, either manually placed or produced by an opt-in renderer bridge: OpusClip for source-video clips or HeyGen for text-to-video. A built-in Remotion + ElevenLabs renderer is still roadmap. |\n| **Publish** | Queue drainer. API first, browser automation fallback for auth-broken / no-API platforms. Idempotent, retryable. |\n| **Learn** | `springy engage poll` collects inbound engagement for wired collectors (LinkedIn / Bluesky / Reddit), optionally drafts replies, and can be installed as a daily opt-in cron job via `cron:install --engagement`. `voice:refresh` weights collected metrics into the voice corpus and prompt-variant scores. The fine-grained 1h/4h/24h/72h/7d per-post cadence is still roadmap. |\n\n19 platform generators ship today. The default fan-out is the four text platforms (LinkedIn, X, Threads, Bluesky); Medium + Dev.to + Substack are `--seo` opt-ins; Reel + TikTok are `--platforms` overrides once a manual MP4 or configured renderer bridge exists. Publish/engagement clients also exist for Mastodon, Discord, Reddit, Pinterest, Telegram, YouTube, Rumble, and Quora — some via API, the rest via Playwright. Local SQLite for analytics. LanceDB for voice retrieval.\n\n---\n\n## Quick start\n\n```bash\n# 60-second offline tour — no keys, no commitment\nnpx @andersonfda/springy demo\n# (the demo will offer to chain straight into init if you want to keep going)\n\n# Install — scaffolds the project and runs an opt-in brand wizard\nnpx @andersonfda/springy init my-brand\ncd my-brand\n\n# Verify the install (offers to auto-rebuild better-sqlite3 + install chromium if needed)\nnpx springy doctor\n\n# Add a generation provider key to .env. Pick one:\n#   - ANTHROPIC_API_KEY (default; SPRINGY_LLM_PROVIDER=anthropic)\n#   - OPENAI_API_KEY    (set SPRINGY_LLM_PROVIDER=openai;\n#                        or sign in to ChatGPT via `npx springy auth openai`)\n# Plus VOYAGE_API_KEY (strongly recommended for brand-voice RAG).\n# OPENAI_API_KEY is also used for Whisper transcription regardless of the\n# main provider — it's the audio path, not the generation path.\n$EDITOR .env\n\n# Set up a developer portal for each platform (7 browser-guided, 5 terminal, 5 documented)\nnpx springy setup --list            # see all platforms\nnpx springy setup linkedin          # walk through LinkedIn Developer app creation\nnpx springy setup bluesky           # browser-guided app-password flow\n\n# Run OAuth where required (after setup)\nnpx springy auth linkedin\n# After auth/setup, platforms.yaml is auto-flipped to enabled:true.\n\n# Seed your voice corpus — two paths:\n#   a) Bulk-import past content (RSS feed or local markdown directory):\nnpx springy voice:import rss https://yourblog.example.com/feed\nnpx springy voice:import dir ~/old-essays/\n#   b) Or drop 20+ posts into content/drafts/ manually with status: approved\n# Then embed:\nnpx springy voice:seed\n\n# Run the full cascade for today's top opportunity\nnpx springy opportunities:rank\nnpx springy plan:week --write          # optional local calendar before spending tokens\nnpx springy cascade --top\n\n# Drain the queue (dry-run first)\nnpx springy publish\nnpx springy publish --live\n\n# Gate any text with the AI-tell linter — no keys, no LLM, exit 1 on slop.\n# Works on drafts, blog posts, READMEs; CI-friendly.\ncat some-draft.md | npx springy lint\n\n# See what's working — terminal report or the local dashboard\nnpx springy report                  # engagement, top hooks, best hours, evergreen, spend\nnpx springy evergreen               # recycle proven winners (dry-run; --live to enqueue)\nnpx springy ui                      # local dashboard at http://localhost:4000\n```\n\n### Local dashboard\n\n`npx springy ui` starts a read-mostly ops console at `http://localhost:4000` (bound to `127.0.0.1`; set `SPRINGY_UI_TOKEN` if you expose it off-loopback). Pages: dashboard, queue, engagement, **hooks** (which opening styles drive engagement), variants (the A/B leaderboard), **evergreen** (proven posts to re-surface), cascades, and costs. It reads your local `analytics.db` — no cloud, no account.\n\n---\n\n## Use from Claude Code / Cursor (MCP)\n\nSpringy ships an MCP server — `springy-mcp` — so an agent can drive the whole pipeline from your editor or chat, with the same safety rails as the CLI: everything defaults to read-only or dry-run, and live actions require explicit `confirmLive:\"YES\"` / `confirmWrite:\"YES\"` arguments. Springy never lets a model choose arbitrary tools at runtime; the agent calls the same deterministic pipeline you would.\n\n```bash\n# Claude Code\nclaude mcp add springy -- npx -y -p @andersonfda/springy springy-mcp\n\n# Cursor / Claude Desktop (mcpServers JSON)\n{ \"springy\": { \"command\": \"npx\", \"args\": [\"-y\", \"-p\", \"@andersonfda/springy\", \"springy-mcp\"] } }\n```\n\n16 tools: `lint.text` (deterministic AI-tell gate — no keys needed), `voice.search`, `costs.summary`, `status.snapshot`, `queue.list/show/dlq/revive`, `briefings.list/add`, `opportunities.list/add`, `plan.week`, `cascade.run`, `publish.run`, `export.run`. Full reference + safety model: [docs/MCP.md](docs/MCP.md).\n\nThere's also an agent skill: [SKILL.md](SKILL.md) teaches a coding agent the safe operating procedure (dry-run first, respect the HITL gates, never bypass confirmations).\n\n---\n\n## Costs\n\nSpringy itself is free and MIT-licensed. Your bill is whatever upstream providers charge, and nothing else.\n\n| Provider | What it powers | Typical monthly cost for solo use |\n|---|---|---|\n| **Anthropic (Claude)** _or_ **OpenAI (GPT)** | Anchor essay + fan-out + critique loop (one generation provider required; pick via `SPRINGY_LLM_PROVIDER`) | $5–$40 — depends on cascade frequency and fine-grained critic usage. OpenAI usage is comparable; ChatGPT-subscription PKCE auth via `npx springy auth openai` is also supported in lieu of an API key |\n| **Voyage AI** (voyage-3) | Brand-voice RAG (strongly recommended; first-run cascades work without it but degrade to brand.yaml rules only) | <$1 for seed + weekly refresh of a few-hundred-post corpus |\n| **Replicate** (Flux) | Hero images (optional, per platform) | $0–$15 — ~$0.05/image; skip if you don't need images |\n| **ElevenLabs** (TTS) | Voice previews + video voiceover (optional) | $0–$22 — free tier covers ~10 min of audio, paid tiers for more |\n| **OpenAI** (Whisper) | Audio-to-essay transcription (optional; separate from generation provider) | $0–$5 — $0.006/min of audio |\n\nA realistic first month: **~$10–30** if you run a daily cascade with voice-RAG + occasional images; **~$5** if you run weekly with no images.\n\n`springy costs` shows last-30-day spend broken down by provider and caller. `springy costs --trace <id>` shows the cost of one specific cascade. Spending caps in `.env`:\n- `CRITIQUE_BUDGET_USD=0.25` — per-platform cap; aborts further critique iterations once exceeded.\n- `SPRINGY_MONTHLY_BUDGET_USD=20` — month-to-date hard cap; refuses to start a new cascade once crossed.\n\n---\n\n## Why\n\nMost content automation is either a linear cron script that produces generic AI slop, or a SaaS black box you can't extend. Springy is the third thing: an opinionated graph with human gates, a brand-voice retrieval layer so it sounds like *you*, and 14 wired platforms you'd build yourself if you had a year.\n\nIt's designed to be the pipeline for a **builder in public**. It's open source because the pipeline itself is content.\n\n---\n\n## Architecture\n\nSee [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md). Short version: ranked opportunity → anchor essay (critique loop) → HITL → parallel fan-out (critique loop each) → HITL → draft writer → queue → API/browser publisher → metrics collector → voice-corpus back-edge.\n\nRead [docs/QUICKSTART.md](docs/QUICKSTART.md) to go from zero to your first automated post.\n\n---\n\n## Stable vs. dev\n\n- **Stable** — latest `vX.Y.Z` tag on `main`. Published to npm. This is what you want.\n  ```bash\n  # latest stable:\n  npx @andersonfda/springy init my-brand\n  # pin to a specific version:\n  npx @andersonfda/springy@0.19.1 init my-brand\n  ```\n- **Dev** — HEAD of `main` between tagged releases. Everything that's been merged but not yet cut into a release. Expect more churn.\n\n  > **Note:** the GitHub repo is currently **private**, so `npx github:andersonfda/springy` only works if you have clone access (i.e. the maintainer). For everyone else, **npm is the only public install channel** — use the stable path above, or `npx @andersonfda/springy@<version>` to pin. The `github:` path below will start working once the repo is made public.\n\n  ```bash\n  # install from git (main) — requires repo access while private:\n  npx github:andersonfda/springy init my-brand\n  # or a specific tag:\n  npx github:andersonfda/springy#v0.19.1 init my-brand\n  ```\n\n`main` is always deployable — CI enforces that. But tagged releases are the tested, version-pinned artifacts published to npm, so `@andersonfda/springy@<version>` is the recommended install path unless you're hacking on springy itself.\n\nRelease process: [docs/RELEASING.md](docs/RELEASING.md).\n\n## Contributing\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md). The easiest high-value contributions right now:\n- Wire a new platform (30–60 min per platform; see [docs/ADDING_A_PLATFORM.md](docs/ADDING_A_PLATFORM.md))\n- Write a new generator for a content type we don't cover yet\n- Improve an error message so it tells users what to do next\n\n---\n\n## License\n\nMIT. See [LICENSE](LICENSE).\n","readmeFilename":"README.md"}