{"_id":"@danypops/themetic","_rev":"4-5f082202f965eb2a8dffdfd9f40f13b2","name":"@danypops/themetic","dist-tags":{"latest":"0.3.0"},"versions":{"0.1.0":{"name":"@danypops/themetic","version":"0.1.0","keywords":["pi-package","pi-extension","pi-skill","theme","color-theory"],"author":{"name":"danypops","email":"danypops@protonmail.com"},"license":"MIT","_id":"@danypops/themetic@0.1.0","maintainers":[{"name":"danypops","email":"danypops@protonmail.com"}],"homepage":"https://github.com/DanyPops/themetic#readme","bugs":{"url":"https://github.com/DanyPops/themetic/issues"},"pi":{"skills":["./skills"],"extensions":["./index.ts"]},"dist":{"shasum":"7054fe9a9e99daee993bc453b6a3641530c6b96d","tarball":"https://registry.npmjs.org/@danypops/themetic/-/themetic-0.1.0.tgz","fileCount":15,"integrity":"sha512-91t2IeHyWLHFYuxtF37VfFqYe3SKQDf7vTWCuJh1vQ9FhFycFSzb0zgxBGoiRmLXPHYPM5hWIP+U/9h8Q8UuaA==","signatures":[{"sig":"MEYCIQDu5S0CQiyYUrQh7eZmAhgZGvubZIMjpEFvKJVrOfAx/wIhAL4h7tHt4k7hOzjHjm28odWtQgkt/c0aNupv1dh+5L1e","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44917},"main":"index.ts","type":"module","gitHead":"dc627b69966e4c0fd1bd12de17d59d8802012bc6","scripts":{"test":"node --experimental-strip-types --test test/*.test.ts","check":"tsc --noEmit"},"_npmUser":{"name":"danypops","email":"danypops@protonmail.com"},"repository":{"url":"git+https://github.com/DanyPops/themetic.git","type":"git"},"_npmVersion":"11.14.1","description":"Agentic, science-grounded pi theme generator: /skill:themetic <prompt> turns a natural-language mood into a legible, non-'scientifically ugly' pi theme via a deterministic palette/contrast/vibration gate.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"culori":"^4.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0","@types/culori":"^4.0.1"},"peerDependencies":{"@earendil-works/pi-ai":">=0.80.0","@earendil-works/pi-tui":">=0.80.0","@earendil-works/pi-coding-agent":">=0.80.0"},"_npmOperationalInternal":{"tmp":"tmp/themetic_0.1.0_1784636798039_0.32071652814973417","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@danypops/themetic","version":"0.1.1","keywords":["pi-package","pi-extension","pi-skill","theme","color-theory"],"author":{"name":"danypops","email":"danypops@protonmail.com"},"license":"MIT","_id":"@danypops/themetic@0.1.1","maintainers":[{"name":"danypops","email":"danypops@protonmail.com"}],"homepage":"https://github.com/DanyPops/themetic#readme","bugs":{"url":"https://github.com/DanyPops/themetic/issues"},"pi":{"skills":["./skills"],"extensions":["./index.ts"]},"dist":{"shasum":"c93024f06984bc1c9639b5a16aa1b90a882d2adb","tarball":"https://registry.npmjs.org/@danypops/themetic/-/themetic-0.1.1.tgz","fileCount":15,"integrity":"sha512-K/Vygn9A6iG00uubOUmFitz/SHZVc8e+8sxINXMKvmU/Tn46c+S+f4XiUVsEKidhqBQvdU0m7pmiUM+bdLohoA==","signatures":[{"sig":"MEYCIQCdzyWL/lmfgKNATBqeP0g5tJ0hh/C0wb41T5LsdCqakgIhAI8Q5IkmLzd1bQJx6q9jKkx4SsHqnuZ1dK3x9yI913u7","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":45068},"main":"index.ts","type":"module","gitHead":"bf547cdb11ab878ce345151ccd0db43dbff7e1ff","scripts":{"test":"node --experimental-strip-types --test test/*.test.ts","check":"tsc --noEmit"},"_npmUser":{"name":"danypops","email":"danypops@protonmail.com"},"repository":{"url":"git+https://github.com/DanyPops/themetic.git","type":"git"},"_npmVersion":"11.14.1","description":"Agentic, science-grounded pi theme generator: /skill:themetic <prompt> turns a natural-language mood into a legible, non-'scientifically ugly' pi theme via a deterministic palette/contrast/vibration gate.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"culori":"^4.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0","@types/culori":"^4.0.1"},"peerDependencies":{"@earendil-works/pi-ai":">=0.80.0","@earendil-works/pi-tui":">=0.80.0","@earendil-works/pi-coding-agent":">=0.80.0"},"_npmOperationalInternal":{"tmp":"tmp/themetic_0.1.1_1784637917744_0.25265068972259974","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@danypops/themetic","version":"0.2.0","keywords":["color-theory","theme","wcag","oklch"],"author":{"name":"danypops","email":"danypops@protonmail.com"},"license":"MIT","_id":"@danypops/themetic@0.2.0","maintainers":[{"name":"danypops","email":"danypops@protonmail.com"}],"homepage":"https://github.com/DanyPops/themetic#readme","bugs":{"url":"https://github.com/DanyPops/themetic/issues"},"dist":{"shasum":"fab46f6741fdc4800dbcb13d945918181fe0d41b","tarball":"https://registry.npmjs.org/@danypops/themetic/-/themetic-0.2.0.tgz","fileCount":9,"integrity":"sha512-ai5RTD8dY79BiXyobkkcukKgyPqehiMbAOE4LMUJFrfVPNPqObT0LrYVD5qaJ0wCLU1oUJGzdWORvacI7Rw3mw==","signatures":[{"sig":"MEYCIQCP0/Iq7lw1h6I6t4aoTPGLoe5VcOUncUTzeNPJPwlxXAIhAMmN0uiXwAqkaghzI5XjbgUg3717/iXxmv3VTsqqMOOP","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@danypops%2fthemetic@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":33234},"main":"./index.ts","type":"module","types":"./index.ts","gitHead":"4f483f29fee6744168122fb1d4c767650e7b16ab","scripts":{"test":"node --experimental-strip-types --test test/*.test.ts","check":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:6b778050-9853-4f6d-9d65-6e0613656ffe"}},"repository":{"url":"git+https://github.com/DanyPops/themetic.git","type":"git","directory":"packages/themetic"},"_npmVersion":"12.0.1","description":"Deterministic pi color-theme generation: palette generation, token-role assignment, and a WCAG contrast/color-harmony quality gate. No model, no Pi dependency — pure functions over a caller-supplied seed-hue list. The Pi extension and skill live in @danyp","directories":{},"_nodeVersion":"22.23.1","dependencies":{"culori":"^4.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0","@types/culori":"^4.0.1"},"_npmOperationalInternal":{"tmp":"tmp/themetic_0.2.0_1785353353278_0.12339333533316688","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"_id":"@danypops/themetic@0.3.0","bugs":{"url":"https://github.com/DanyPops/themetic/issues"},"dist":{"shasum":"56d3250b8a1dd53357229fe6cefcdbe78c66e50c","tarball":"https://registry.npmjs.org/@danypops/themetic/-/themetic-0.3.0.tgz","fileCount":12,"integrity":"sha512-M3WqgABWYhhWQYXuzQQOP2Hs6E+AkyCucUvxIS06w4bClYFpY9/eaeMctYjIJImZrzSUx8IOybx6J3sfBT/srA==","signatures":[{"sig":"MEUCIQDrE4inNaUsAqgplg4hZvgFSfaXgNjsup6azdh9MPyT1gIgNQnhH7LuOJct6StJGbQKCWyIgA4FMmPA6nnzwGcrzzw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDD2D+u1CRY4hk1faGxOJ2D7t1u3Xd9UC/+JK3EzSI8hwIgARXsTP9GwvoeRJpeXMZ7DEZwHNwRn9FwWi2LY3Jgsv4="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@danypops%2fthemetic@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":43823},"main":"./index.ts","name":"@danypops/themetic","type":"module","types":"./index.ts","author":{"name":"danypops","email":"danypops@protonmail.com"},"gitHead":"a29300f61c0ba40f5dae4ca375142810746a99a3","license":"MIT","scripts":{"test":"node --experimental-strip-types --test test/*.test.ts","check":"tsc --noEmit"},"version":"0.3.0","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:6b778050-9853-4f6d-9d65-6e0613656ffe"}},"homepage":"https://github.com/DanyPops/themetic#readme","keywords":["color-theory","theme","wcag","oklch"],"repository":{"url":"git+https://github.com/DanyPops/themetic.git","type":"git","directory":"packages/themetic"},"_npmVersion":"12.0.2","description":"Deterministic pi color-theme generation: palette generation, token-role assignment, and a WCAG contrast/color-harmony quality gate. No model, no Pi dependency — pure functions over a caller-supplied seed-hue list. The Pi extension and skill live in @danyp","directories":{},"maintainers":[{"name":"danypops","email":"danypops@protonmail.com"}],"_nodeVersion":"22.23.2","dependencies":{"culori":"^4.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0","@types/node":"^22.20.1","@types/culori":"^4.0.1"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/themetic_0.3.0_1788681537575_0.9637184681721465"}}},"time":{"created":"2026-07-21T12:26:37.794Z","modified":"2026-09-06T07:58:57.980Z","0.1.0":"2026-07-21T12:26:38.180Z","0.1.1":"2026-07-21T12:45:17.874Z","0.2.0":"2026-07-29T19:29:13.438Z","0.3.0":"2026-09-06T07:58:57.654Z"},"bugs":{"url":"https://github.com/DanyPops/themetic/issues"},"author":{"name":"danypops","email":"danypops@protonmail.com"},"license":"MIT","homepage":"https://github.com/DanyPops/themetic#readme","keywords":["color-theory","theme","wcag","oklch"],"repository":{"url":"git+https://github.com/DanyPops/themetic.git","type":"git","directory":"packages/themetic"},"description":"Deterministic pi color-theme generation: palette generation, token-role assignment, and a WCAG contrast/color-harmony quality gate. No model, no Pi dependency — pure functions over a caller-supplied seed-hue list. The Pi extension and skill live in @danyp","maintainers":[{"name":"danypops","email":"danypops@protonmail.com"}],"readme":"# @danypops/themetic\n\nDeterministic pi color-theme generation: palette generation, token-role assignment, and a WCAG contrast/color-harmony quality gate. No model, no Pi dependency — pure functions over a caller-supplied seed-hue list.\n\nMost users want [`@danypops/pi-themetic`](https://www.npmjs.com/package/@danypops/pi-themetic) instead — the installable Pi extension and skill that drive this library from a natural-language prompt.\n\n## What's in here\n\n- `generateDarkTheme(spec)` — OKLCH-aware neutral ramp and canonical semantic hues from 1-3 seed hues.\n- `runGate(theme)` / `assertGatePasses(theme)` — WCAG contrast on real co-visible token pairs, an Ecological Valence Theory \"mud zone\" check, and a complementary-color vibration check. See [`RESEARCH.md`](./RESEARCH.md) for the papers behind each check.\n- `writeTheme(theme)` / `serializeTheme(theme)` — write a generated theme to `~/.pi/agent/themes/<name>.json`.\n- Color-math primitives (`contrastRatio`, `hexToOklch`, `isMudZone`, `isVibrating`, `ensureContrast`, ...).\n\n## Install\n\n```bash\nnpm install @danypops/themetic\n```\n\n## Walking-skeleton CLI (no LLM, for testing the deterministic pipeline directly)\n\n```bash\nnode --experimental-strip-types scripts/generate-cli.ts scripts/armenian-mountains.spec.json\n```\n\n## Repository\n\nPart of the [themetic monorepo](https://github.com/DanyPops/themetic) — see its README for the extension/library split.\n\n## License\n\nMIT\n","readmeFilename":"README.md"}