{"_id":"@bildungsroman/content-generator","_rev":"4-ed73bb3548784fe23e014fd88e7a65b5","name":"@bildungsroman/content-generator","dist-tags":{"latest":"0.1.2"},"versions":{"0.1.0":{"name":"@bildungsroman/content-generator","version":"0.1.0","keywords":["openrouter","content-generation","ai","llm"],"author":{"name":"bildungsroman"},"license":"MIT","_id":"@bildungsroman/content-generator@0.1.0","maintainers":[{"name":"bildungsroman","email":"anna@annaspysz.com"}],"dist":{"shasum":"4e56018e9b846663829929f3bb76b20c86bd0833","tarball":"https://registry.npmjs.org/@bildungsroman/content-generator/-/content-generator-0.1.0.tgz","fileCount":5,"integrity":"sha512-58JE46XreikCVxulOxjQuotDPJlQubsVzLDItPyPJcg6nPLzTZicoWChYUsj868EHWLzO0UPUrWQdZ7BPbP7+g==","signatures":[{"sig":"MEQCIGpXkm6/AUrv+/OiVWNhxhZJ4jBkKwZryr2bwzgbleV7AiAJG8D06HGb3PfXuiYQDof35D1bhHh3JSVEPbe0QXJaCA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":9915},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"5e6ac3f5093c13a2b05ff98b7d969f782137e3ce","scripts":{"build":"tsc","prepare":"tsc"},"_npmUser":{"name":"bildungsroman","email":"anna@annaspysz.com"},"_npmVersion":"10.9.4","description":"OpenRouter-backed content generator (safe article + image generation) used by the Content's Not Dead demo. Optional and not required by the app.","directories":{},"_nodeVersion":"22.22.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.3","@types/node":"^22.20.1"},"_npmOperationalInternal":{"tmp":"tmp/content-generator_0.1.0_1784580958954_0.01133615004399191","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Folded into the private contentsnotdead.com deployment; no longer maintained as a package."},"0.1.1":{"name":"@bildungsroman/content-generator","version":"0.1.1","keywords":["openrouter","content-generation","ai","llm"],"author":{"name":"bildungsroman"},"license":"MIT","_id":"@bildungsroman/content-generator@0.1.1","maintainers":[{"name":"bildungsroman","email":"anna@annaspysz.com"}],"dist":{"shasum":"495e49f0377570d9060f2d76e5979e1a53fd02da","tarball":"https://registry.npmjs.org/@bildungsroman/content-generator/-/content-generator-0.1.1.tgz","fileCount":5,"integrity":"sha512-MDHG/VAs+af/uKapAf86lzLa88664QfqhhDoec4l0ggE77nVsGcMsHIbejQQzVmGhMmvGpETb7rDT7TZNmCWkQ==","signatures":[{"sig":"MEUCIQDWHGq8EDWbQvL/13KDmPrDdZrQmh+r6HxPeR2KcAMF+gIgf+P2fwTvdkwGDogNYTMLUidM+0gkAbbVbc1IvCbFeaY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":9707},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=24"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"30d5532c9d22d5999b26ae782783305c11c20bf0","scripts":{"build":"tsc","prepare":"tsc"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a16cc174-6761-4a31-a097-c44bc7b29547"}},"_npmVersion":"12.0.2","description":"OpenRouter-backed content generator (safe article + image generation) used by the Content's Not Dead demo. Optional and not required by the app.","directories":{},"_nodeVersion":"24.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.3","@types/node":"^24.0.0"},"_npmOperationalInternal":{"tmp":"tmp/content-generator_0.1.1_1786509101375_0.709126684119904","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Folded into the private contentsnotdead.com deployment; no longer maintained as a package."},"0.1.2":{"name":"@bildungsroman/content-generator","version":"0.1.2","keywords":["openrouter","content-generation","ai","llm"],"author":{"name":"bildungsroman"},"license":"MIT","_id":"@bildungsroman/content-generator@0.1.2","maintainers":[{"name":"bildungsroman","email":"anna@annaspysz.com"}],"dist":{"shasum":"1bce5ec33c62edb5acc4695b48122ca1f76df3e5","tarball":"https://registry.npmjs.org/@bildungsroman/content-generator/-/content-generator-0.1.2.tgz","fileCount":5,"integrity":"sha512-G3aDqg9+/SF0gfqBZc5LFowU4/CU3h1lkDaEZjdtsLQvGA0TlRdGPzUijQJ+ZZH5lIB8j7kdr92coSxhq2VRxw==","signatures":[{"sig":"MEUCIQChO/eINCn6hTnSf1dv9qWz/zhhTRAi6CcVss51cdN9wgIgDPcZ7AgJ5Il5qSz+DyP9Fyz+/ZdfEu8wb/pyCXwCTHM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":9707},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=24"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"b29a83e37a0c39d09185674709b3e51c0ce8b38b","scripts":{"build":"tsc","prepare":"tsc"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a16cc174-6761-4a31-a097-c44bc7b29547"}},"_npmVersion":"12.0.2","description":"OpenRouter-backed content generator (safe article + image generation) used by the Content's Not Dead demo. Optional and not required by the app.","directories":{},"_nodeVersion":"24.20.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.3","@types/node":"^24.0.0"},"_npmOperationalInternal":{"tmp":"tmp/content-generator_0.1.2_1789488892998_0.7115451917769824","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Folded into the private contentsnotdead.com deployment; no longer maintained as a package."}},"time":{"created":"2026-07-20T20:55:58.738Z","modified":"2026-09-17T01:04:33.099Z","0.1.0":"2026-07-20T20:55:59.081Z","0.1.1":"2026-08-12T04:31:41.538Z","0.1.2":"2026-09-15T16:14:53.145Z"},"author":{"name":"bildungsroman"},"license":"MIT","keywords":["openrouter","content-generation","ai","llm"],"description":"OpenRouter-backed content generator (safe article + image generation) used by the Content's Not Dead demo. Optional and not required by the app.","maintainers":[{"name":"bildungsroman","email":"anna@annaspysz.com"}],"readme":"# @bildungsroman/content-generator\n\nOpen-source, OpenRouter-backed content generator for the **Content's Not Dead**\ndemo deployment. This package is **optional** — it is not a production\ndependency of the `contents-not-dead` app. The app loads it at runtime only in\ndemo mode and gracefully degrades when it isn't installed.\n\n## Install\n\n```bash\nnpm install @bildungsroman/content-generator\n```\n\n## API\n\n```ts\nimport { generateArticle, generateImage } from \"@bildungsroman/content-generator\";\n\nconst post = await generateArticle({\n  type: \"article\",\n  tags: [\"space\", \"optimism\"],\n  description: \"A hopeful short essay about small daily wins\",\n});\n```\n\nBoth functions return a bounded, session-deliverable post payload:\n\n```ts\ninterface GeneratedPost {\n  id: string;\n  title: string;\n  summary: string;\n  authors: string[];\n  date: string;\n  tags: string[];\n  type: \"article\" | \"image\";\n  contents: string; // Markdown\n  image?: string;   // data URL for image posts\n}\n```\n\n## Environment\n\n- `OPENROUTER_API_KEY` — required.\n- `CONTENT_GENERATOR_TEXT_MODELS` — comma-separated allowlist; first is used.\n- `CONTENT_GENERATOR_IMAGE_MODELS` — comma-separated allowlist; first is used.\n\n## Safety\n\nEvery generation is constrained by a system prompt that forbids profanity,\nhate, sexual content, explicit violence, self-harm, and illegal instructions,\nsteering output toward wholesome, family-friendly content.\n\n## Build\n\n```bash\nnpm install\nnpm run build\n```\n","readmeFilename":"README.md"}