{"_id":"@agilesyndrome/cf-genai-base","_rev":"26-39b935225ebbe61adeadbc841cc25cbc","name":"@agilesyndrome/cf-genai-base","dist-tags":{"latest":"6.0.0"},"versions":{"0.1.0":{"name":"@agilesyndrome/cf-genai-base","version":"0.1.0","license":"MIT","_id":"@agilesyndrome/cf-genai-base@0.1.0","maintainers":[{"name":"clouddrew","email":"drew.easley@calendly.com"}],"homepage":"https://github.com/agilesyndrome/cf-genai-base#readme","bugs":{"url":"https://github.com/agilesyndrome/cf-genai-base/issues"},"dist":{"shasum":"0c5d4af96b2155fec96da9a133dfe9dd6dbf5c3d","tarball":"https://registry.npmjs.org/@agilesyndrome/cf-genai-base/-/cf-genai-base-0.1.0.tgz","fileCount":5,"integrity":"sha512-L8z0L8FLLm0ZlH0+CkC6k8vw4ZLhfUjhaFTjQqHtOsv5JWgO8miNj7KFtNpqg0Haq+HTiVMMlzhq1uRqIC9Frw==","signatures":[{"sig":"MEUCIQDPjasLmNt2XQ8SFkxUziv7dsa4IiT/HR7My6LQUoYIugIgOqhq9sqx5smswlFN97KFX5hQvuUUgyQ7Nef+kCiiTPg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5273},"type":"module","exports":{".":"./src/index.js"},"gitHead":"de631aeca79894f57da82c8d5ecf3ebdcdba68e8","_npmUser":{"name":"clouddrew","email":"drew.easley@calendly.com"},"repository":{"url":"git+https://github.com/agilesyndrome/cf-genai-base.git","type":"git"},"_npmVersion":"11.17.0","description":"Lean Worker lifecycle and security helpers for Cloudflare sites.","directories":{},"_nodeVersion":"24.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/cf-genai-base_0.1.0_1787525969741_0.5398072611419906","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@agilesyndrome/cf-genai-base","version":"0.1.1","license":"MIT","_id":"@agilesyndrome/cf-genai-base@0.1.1","maintainers":[{"name":"clouddrew","email":"drew.easley@calendly.com"}],"homepage":"https://github.com/agilesyndrome/cf-genai-base#readme","bugs":{"url":"https://github.com/agilesyndrome/cf-genai-base/issues"},"dist":{"shasum":"c68bc2a3c903ae62224434d132f769832bfb4a75","tarball":"https://registry.npmjs.org/@agilesyndrome/cf-genai-base/-/cf-genai-base-0.1.1.tgz","fileCount":5,"integrity":"sha512-oLGK6XKYjmiSfd4hPx4QnyRz9lhdWzhwkVL5YjFvtVsYE7wPwffx/pKympt9//S2E2FtgvgmpbKRZhVE8C0AqA==","signatures":[{"sig":"MEUCIQDoXrsxgtssjgf5nMGOBbL5bJr4AtKoK8ZxEZxCJPrK6wIgKzkku8ZK3cqejlJW2vo5TqXIrjfmsQZR2wZE/EcWffY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agilesyndrome%2fcf-genai-base@0.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":5277},"type":"module","exports":{".":"./src/index.js"},"gitHead":"a1b52cce60280767cab8343d2452d648e2acd0fa","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4fbea399-4b0a-4587-8342-5019172cf011"}},"repository":{"url":"git+https://github.com/agilesyndrome/cf-genai-base.git","type":"git"},"_npmVersion":"12.0.2","description":"Lean Worker lifecycle and security helpers for Cloudflare sites.","directories":{},"_nodeVersion":"24.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/cf-genai-base_0.1.1_1787526280567_0.5048148540384392","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@agilesyndrome/cf-genai-base","version":"0.1.2","license":"MIT","_id":"@agilesyndrome/cf-genai-base@0.1.2","maintainers":[{"name":"clouddrew","email":"drew.easley@calendly.com"}],"homepage":"https://github.com/agilesyndrome/cf-genai-base#readme","bugs":{"url":"https://github.com/agilesyndrome/cf-genai-base/issues"},"dist":{"shasum":"772667351effaf22916c48d064fd88a5d6e89e4e","tarball":"https://registry.npmjs.org/@agilesyndrome/cf-genai-base/-/cf-genai-base-0.1.2.tgz","fileCount":5,"integrity":"sha512-SmQAAC5hncfxPgvv5XQwyef1Bd0MGt5mRLTG/y4xVUtiPWZ1mmeN5i8OXR89L63atJiRHVkjW0LZ+dgfstUA/g==","signatures":[{"sig":"MEUCIGQ3COHf7NXOGV04Hwa10PGsJlYGWECxzPvdA1WPFwsUAiEA7Bqaff23CVERHJzEXSO8PkwV3jFprFtMWxNPVQcYeQM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agilesyndrome%2fcf-genai-base@0.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":7909},"type":"module","exports":{".":"./src/index.js"},"gitHead":"5a9d6717f32ba730bc15eb8c09fd46cc4d361287","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4fbea399-4b0a-4587-8342-5019172cf011"}},"repository":{"url":"git+https://github.com/agilesyndrome/cf-genai-base.git","type":"git"},"_npmVersion":"12.0.2","description":"Lean Worker lifecycle and security helpers for Cloudflare sites.","directories":{},"_nodeVersion":"24.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/cf-genai-base_0.1.2_1787526806697_0.036906063024573","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@agilesyndrome/cf-genai-base","version":"0.1.3","license":"MIT","_id":"@agilesyndrome/cf-genai-base@0.1.3","maintainers":[{"name":"clouddrew","email":"drew.easley@calendly.com"}],"homepage":"https://github.com/agilesyndrome/cf-genai-base#readme","bugs":{"url":"https://github.com/agilesyndrome/cf-genai-base/issues"},"dist":{"shasum":"980eaecca182cc397341b7b95411c4db52bdad18","tarball":"https://registry.npmjs.org/@agilesyndrome/cf-genai-base/-/cf-genai-base-0.1.3.tgz","fileCount":5,"integrity":"sha512-h4Go8S8zBOxl4FzB5xH6f3oacIUR9YRDK1pBNgK0WrJDFPQauoijHBZp6TsHm2DgHzdka8pjfkXygSaxLEHVGQ==","signatures":[{"sig":"MEUCICYYC/8Jrg574iuDN/oqC88M9O317PvbFk2Ws6Vn3WY0AiEAvtpgcTKLT4SeZCm7KSquCVNbtv604mnuZ/YN8SNZpAQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agilesyndrome%2fcf-genai-base@0.1.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":8764},"type":"module","exports":{".":"./src/index.js"},"gitHead":"c2edfc8787be0eb76e63a2cb7ae7960d38016053","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4fbea399-4b0a-4587-8342-5019172cf011"}},"repository":{"url":"git+https://github.com/agilesyndrome/cf-genai-base.git","type":"git"},"_npmVersion":"12.0.2","description":"Lean Worker lifecycle and security helpers for Cloudflare sites.","directories":{},"_nodeVersion":"24.20.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/cf-genai-base_0.1.3_1789056703460_0.21950361065172652","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@agilesyndrome/cf-genai-base","version":"0.1.4","license":"MIT","_id":"@agilesyndrome/cf-genai-base@0.1.4","maintainers":[{"name":"clouddrew","email":"drew.easley@calendly.com"}],"homepage":"https://github.com/agilesyndrome/cf-genai-base#readme","bugs":{"url":"https://github.com/agilesyndrome/cf-genai-base/issues"},"dist":{"shasum":"64be10794347a4ec202a0e57dfbe0fd8536e5f5d","tarball":"https://registry.npmjs.org/@agilesyndrome/cf-genai-base/-/cf-genai-base-0.1.4.tgz","fileCount":5,"integrity":"sha512-RdLgWReWhehY9/t2uhVtDbd4mynho5VbnRrS7o0EwfuCBASqSTiGZHlz6HMETBFZs/X4ci+BZvPeqcTWROaEYA==","signatures":[{"sig":"MEUCIQCSvGti098LqaCB+fR8Y2eKlW1/8TKmyxevhlGOKbHIcgIgWMnuaq4OupAbvPAc1QzkRuEGV/p36rl7eeHCszKQaSE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agilesyndrome%2fcf-genai-base@0.1.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":8930},"type":"module","exports":{".":"./src/index.js"},"gitHead":"40e1262b877e0395b4912cb59893ac1e3c10a3c5","scripts":{"test":"node --check src/index.js","build":"npm run check && npm test && npm pack --dry-run","check":"node --check src/index.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4fbea399-4b0a-4587-8342-5019172cf011"}},"repository":{"url":"git+https://github.com/agilesyndrome/cf-genai-base.git","type":"git"},"_npmVersion":"12.0.2","description":"Lean Worker lifecycle and security helpers for Cloudflare sites.","directories":{},"_nodeVersion":"24.20.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/cf-genai-base_0.1.4_1789062198378_0.5906353089257732","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@agilesyndrome/cf-genai-base","version":"0.1.5","license":"MIT","_id":"@agilesyndrome/cf-genai-base@0.1.5","maintainers":[{"name":"clouddrew","email":"drew.easley@calendly.com"}],"homepage":"https://github.com/agilesyndrome/cf-genai-base#readme","bugs":{"url":"https://github.com/agilesyndrome/cf-genai-base/issues"},"dist":{"shasum":"8ab2949414ec82995df926d91e25ce1fa6b43535","tarball":"https://registry.npmjs.org/@agilesyndrome/cf-genai-base/-/cf-genai-base-0.1.5.tgz","fileCount":5,"integrity":"sha512-bvCLlqjNKSOgb8OG8aHNI1tQn4aHgpQ730d5hN7oHHhMemPESSrLLHY2wi40UcWS/kMPSoIaaXFvxu1PQPpo8Q==","signatures":[{"sig":"MEQCIBS263ZDBJdLi2P5s0LChgHoFg/wOZmKR1slwMAfRuKdAiAJkMhXro6B/J2KW9VNubRFoVeRXROfhvoXmjs+crv62g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIE0z8E9v9s7NwtgtkhQTfjHfTxNx92kQK/AECy/THCFeAiEAogCdt+tpJsbJ6JrrbeTTrcdWtEhuEbv9baAX762VZkw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agilesyndrome%2fcf-genai-base@0.1.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":8930},"type":"module","exports":{".":"./src/index.js"},"gitHead":"18208709a11b06a6f6f534755fdd6e5648fa921a","scripts":{"test":"node --check src/index.js","build":"npm run check && npm test && npm pack --dry-run","check":"node --check src/index.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4fbea399-4b0a-4587-8342-5019172cf011"}},"repository":{"url":"git+https://github.com/agilesyndrome/cf-genai-base.git","type":"git"},"_npmVersion":"11.19.0","description":"Lean Worker lifecycle and security helpers for Cloudflare sites.","directories":{},"_nodeVersion":"24.20.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/cf-genai-base_0.1.5_1789071318830_0.10867504361103131","host":"s3://npm-registry-packages-npm-production"}},"0.2.5":{"name":"@agilesyndrome/cf-genai-base","version":"0.2.5","license":"MIT","_id":"@agilesyndrome/cf-genai-base@0.2.5","maintainers":[{"name":"clouddrew","email":"drew.easley@calendly.com"}],"homepage":"https://github.com/agilesyndrome/cf-genai-base#readme","bugs":{"url":"https://github.com/agilesyndrome/cf-genai-base/issues"},"dist":{"shasum":"d79fb38844fe1ca55d0fad4fced1dc67dd056864","tarball":"https://registry.npmjs.org/@agilesyndrome/cf-genai-base/-/cf-genai-base-0.2.5.tgz","fileCount":9,"integrity":"sha512-iAOMTiB5rCfxxVKtcpPo/jijc8yUyV240Dcq1ndMaj/noVHy/A4F1bjRbVotIbAYYI8RoJvnacuRoOUI6Xn23w==","signatures":[{"sig":"MEUCIQCezBa68RGCvGhv2UeFm1Z8F6fL0k60mF+jGiOPFugIlgIgTY9MvEvGIK9dWB8IWDa58MTNPxmByKNiml4Iu1NZfmA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQD9iLJPExz8d3CxP0P6iaIpAFhL7LhgZOQBwFvZtrpzIgIhAOV3/k7/N3ANgNEpJyxuIYgm7wMaMMmmd7b/xwNGdnI+","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agilesyndrome%2fcf-genai-base@0.2.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":28789},"type":"module","exports":{".":"./src/index.js","./ui":"./src/ui/index.js","./authorization":"./src/authorization.js","./ui/styles.css":"./src/ui/styles.css"},"gitHead":"31fcd9145e7a04dcca1dd06a7899ca1ad59785cc","scripts":{"test":"node --test tests/*.test.mjs","build":"npm run check && npm test && npm pack --dry-run","check":"node --check src/index.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4fbea399-4b0a-4587-8342-5019172cf011"}},"repository":{"url":"git+https://github.com/agilesyndrome/cf-genai-base.git","type":"git"},"_npmVersion":"11.19.0","description":"Lean Worker lifecycle and security helpers for Cloudflare sites.","directories":{},"_nodeVersion":"24.20.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/cf-genai-base_0.2.5_1789213596679_0.30389945086707293","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@agilesyndrome/cf-genai-base","version":"1.0.0","license":"MIT","_id":"@agilesyndrome/cf-genai-base@1.0.0","maintainers":[{"name":"clouddrew","email":"drew.easley@calendly.com"}],"homepage":"https://github.com/agilesyndrome/cf-genai-base#readme","bugs":{"url":"https://github.com/agilesyndrome/cf-genai-base/issues"},"dist":{"shasum":"187582f2cb709200e0196ba8affb25ba5aeafc0f","tarball":"https://registry.npmjs.org/@agilesyndrome/cf-genai-base/-/cf-genai-base-1.0.0.tgz","fileCount":11,"integrity":"sha512-0jC4dnjAmcg5XBxD5OR8Rd4ocNeIvVs7CExLcYlLrvOtlbOmeFdrPzIuc19clujKQF2efp5ylmLB30drGqQ1sw==","signatures":[{"sig":"MEUCIQDzYcibWuc12nUgeeqONFuyv8PYx7j8/7thBNGVZQpMOwIgdwxUUS8L+r9LHDwK1+kttzIux5fjdbEPuLYaACOlqNM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIDMlWme04rcRfMRNyuFxqA8DYViRcn0W9jx5Rppfl1a4AiEA/EO0Alph0/KoR2+crXpaodt5H6ubyflekcB0hxUnXKo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agilesyndrome%2fcf-genai-base@1.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":49234},"type":"module","exports":{".":"./src/index.js","./ui":"./src/ui/index.js","./core":"./src/core.js","./authorization":"./src/authorization.js","./ui/styles.css":"./src/ui/styles.css"},"gitHead":"cc1d3e37be60294b4b5cf1e30406aa2f1633217c","scripts":{"test":"node --test tests/*.test.mjs","build":"npm run check && npm test && npm pack --dry-run","check":"node --check src/index.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4fbea399-4b0a-4587-8342-5019172cf011"}},"repository":{"url":"git+https://github.com/agilesyndrome/cf-genai-base.git","type":"git"},"_npmVersion":"11.19.0","description":"Lean Worker lifecycle and security helpers for Cloudflare sites.","directories":{},"_nodeVersion":"24.20.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/cf-genai-base_1.0.0_1789216493275_0.10700568569332192","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@agilesyndrome/cf-genai-base","version":"1.0.1","license":"MIT","_id":"@agilesyndrome/cf-genai-base@1.0.1","maintainers":[{"name":"clouddrew","email":"drew.easley@calendly.com"}],"homepage":"https://github.com/agilesyndrome/cf-genai-base#readme","bugs":{"url":"https://github.com/agilesyndrome/cf-genai-base/issues"},"dist":{"shasum":"2cd27ea9c9fd0e136a09571ef18e02869f24d5a5","tarball":"https://registry.npmjs.org/@agilesyndrome/cf-genai-base/-/cf-genai-base-1.0.1.tgz","fileCount":11,"integrity":"sha512-PQHl7oez74ctvvo1+j8qg9tG3M6EVejvyfi0NTeVPcR8F8eCQtVQPtOSjWUckIgJIXCVkXvUoMBOs0qsqj/9gg==","signatures":[{"sig":"MEQCIG2WQeUPC3Tt8qrBPbHgCNNHZYBm/baP3Ci7+x5wr+Y4AiBoP4GBdNfsWsDPlxR7Ia/qH3qsBKoWTagQD0V9AIniYQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCTppl8SM5DDpEcwfRrjLvkFNw+DubdDms6XCs1wQmfeAIhALpAKNlVPFlfS1+sdSv05zcy7G/4O/RRgwNuqJvtqn2D","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agilesyndrome%2fcf-genai-base@1.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":49558},"type":"module","exports":{".":"./src/index.js","./ui":"./src/ui/index.js","./core":"./src/core.js","./authorization":"./src/authorization.js","./ui/styles.css":"./src/ui/styles.css"},"gitHead":"97d6f8933274c2dea16863f889c4cf2a82b1f7a8","scripts":{"test":"node --test tests/*.test.mjs","build":"npm run check && npm test && npm pack --dry-run","check":"node --check src/index.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4fbea399-4b0a-4587-8342-5019172cf011"}},"repository":{"url":"git+https://github.com/agilesyndrome/cf-genai-base.git","type":"git"},"_npmVersion":"11.19.0","description":"Lean Worker lifecycle and security helpers for Cloudflare sites.","directories":{},"_nodeVersion":"24.20.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/cf-genai-base_1.0.1_1789216582733_0.4685632818130796","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@agilesyndrome/cf-genai-base","version":"1.0.2","license":"MIT","_id":"@agilesyndrome/cf-genai-base@1.0.2","maintainers":[{"name":"clouddrew","email":"drew.easley@calendly.com"}],"homepage":"https://github.com/agilesyndrome/cf-genai-base#readme","bugs":{"url":"https://github.com/agilesyndrome/cf-genai-base/issues"},"dist":{"shasum":"fe0d33c1d00300f839c79bb0a9c3d4707dd58dbe","tarball":"https://registry.npmjs.org/@agilesyndrome/cf-genai-base/-/cf-genai-base-1.0.2.tgz","fileCount":11,"integrity":"sha512-83ACQKmvMrc+ru30VcVRGwpmCFGZy19dU3BLzHm1QLTqvYndE+YTd+GTzIUd7hllZ+mlasK4zPill7V661y9Xg==","signatures":[{"sig":"MEUCIGETquS1EVns18142QYnCYGcYjDvwg6NwPPamS7NMxnXAiEA9uQlayUsuhsJjs31vBop/jb4yJLGgUS+CcO8cpRc3nc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIF0CNQmflOUSXCOkcVUU23AbA/CLr6Ic617GmEwdcwUPAiEAt14zr+B8Nh11CrU3hb5ZveJkqO1ARZrNx+4Izrx8YMY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agilesyndrome%2fcf-genai-base@1.0.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":49558},"type":"module","exports":{".":"./src/index.js","./ui":"./src/ui/index.js","./core":"./src/core.js","./authorization":"./src/authorization.js","./ui/styles.css":"./src/ui/styles.css"},"gitHead":"96282d6de319c339ffbae295a5cf625644f5838a","scripts":{"test":"node --test tests/*.test.mjs","build":"npm run check && npm test && npm pack --dry-run","check":"node --check src/index.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4fbea399-4b0a-4587-8342-5019172cf011"}},"repository":{"url":"git+https://github.com/agilesyndrome/cf-genai-base.git","type":"git"},"_npmVersion":"11.19.0","description":"Lean Worker lifecycle and security helpers for Cloudflare sites.","directories":{},"_nodeVersion":"24.20.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/cf-genai-base_1.0.2_1789216827328_0.8975164603450692","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@agilesyndrome/cf-genai-base","version":"1.0.3","license":"MIT","_id":"@agilesyndrome/cf-genai-base@1.0.3","maintainers":[{"name":"clouddrew","email":"drew.easley@calendly.com"}],"homepage":"https://github.com/agilesyndrome/cf-genai-base#readme","bugs":{"url":"https://github.com/agilesyndrome/cf-genai-base/issues"},"dist":{"shasum":"968cbe05fd3fee3b09c540a2d10c1f272bf05314","tarball":"https://registry.npmjs.org/@agilesyndrome/cf-genai-base/-/cf-genai-base-1.0.3.tgz","fileCount":13,"integrity":"sha512-RvzJqp6Qj4vEDaGcTJ/1E8mNLBc/g31/pPBTLoOSF10lObRL6IhNBmaclgV9KB4O9D9yi4OuxlFtgEoEMDECUg==","signatures":[{"sig":"MEQCICAOK3DWh+5lpTuJfwDGh0P1+mWLOJWEGDJYeGHQHcC4AiBGOq5LO4qFxpUmT4tT8iDP8NfNUfqfLnio0/u7q6aysQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIBm65mj05wNmXRzOJLtaxg5S6YL8B/Kvh/Q8USACHT6AAiBiFhMqeWFFKYChKR50FZ2Jb0SE47254OXMj9Wsoaye7A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agilesyndrome%2fcf-genai-base@1.0.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":53693},"type":"module","exports":{".":"./src/index.js","./ui":"./src/ui/index.js","./core":"./src/core.js","./authorization":"./src/authorization.js","./ui/styles.css":"./src/ui/styles.css"},"gitHead":"f64716f29ece647fad6f4c9c644da4b72002f13c","scripts":{"test":"node --test tests/*.test.mjs","build":"npm run check && npm test && npm pack --dry-run","check":"node --check src/index.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4fbea399-4b0a-4587-8342-5019172cf011"}},"repository":{"url":"git+https://github.com/agilesyndrome/cf-genai-base.git","type":"git"},"_npmVersion":"11.19.0","description":"Lean Worker lifecycle and security helpers for Cloudflare sites.","directories":{},"_nodeVersion":"24.20.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/cf-genai-base_1.0.3_1789220889170_0.3806509609925599","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@agilesyndrome/cf-genai-base","version":"1.0.4","license":"MIT","_id":"@agilesyndrome/cf-genai-base@1.0.4","maintainers":[{"name":"clouddrew","email":"drew.easley@calendly.com"}],"homepage":"https://github.com/agilesyndrome/cf-genai-base#readme","bugs":{"url":"https://github.com/agilesyndrome/cf-genai-base/issues"},"dist":{"shasum":"d2add6d36ce1626a1f735d93e09c4dd675c328a9","tarball":"https://registry.npmjs.org/@agilesyndrome/cf-genai-base/-/cf-genai-base-1.0.4.tgz","fileCount":13,"integrity":"sha512-MHZTimF++P3Vz+7odvTtv5MJVlIA2aF13Gm+WkQbYnLp5r4Luvdv+6kp8K4/nqsOMoByvKnet77TG/M/muXFhQ==","signatures":[{"sig":"MEUCIQCag1yoqUSx5pyW15yLB/C4c4Rcm8xg/EPIjpvO2sl8pwIgCRUuLvEz+37B6KGaG/eDz+MKqX37oyzPHTkeyPm07hs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIFlH0K0Np2J9ourEvufO/fQ7n1iTMCjWBg00HnCNRYdVAiB5REf6ZjOyKP9QbAMMVMeRx51VoqsBz4r8vo1gsnHICA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agilesyndrome%2fcf-genai-base@1.0.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":60769},"type":"module","exports":{".":"./src/index.js","./ui":"./src/ui/index.js","./core":"./src/core.js","./authorization":"./src/authorization.js","./ui/styles.css":"./src/ui/styles.css"},"gitHead":"b3b3ecd7e4c58c6e2fce7328de0eea5f4b91cf21","scripts":{"test":"node --test tests/*.test.mjs","build":"npm run check && npm test && npm pack --dry-run","check":"node --check src/index.js && node --check src/core.js && node --check src/authorization.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4fbea399-4b0a-4587-8342-5019172cf011"}},"repository":{"url":"git+https://github.com/agilesyndrome/cf-genai-base.git","type":"git"},"_npmVersion":"11.19.0","description":"Lean Worker lifecycle and security helpers for Cloudflare sites.","directories":{},"_nodeVersion":"24.20.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/cf-genai-base_1.0.4_1789223332054_0.09180407524267031","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@agilesyndrome/cf-genai-base","version":"1.0.5","license":"MIT","_id":"@agilesyndrome/cf-genai-base@1.0.5","maintainers":[{"name":"clouddrew","email":"drew.easley@calendly.com"}],"homepage":"https://github.com/agilesyndrome/cf-genai-base#readme","bugs":{"url":"https://github.com/agilesyndrome/cf-genai-base/issues"},"dist":{"shasum":"3eb54b0b618703452e7a5a81a5d2dab5615ccf87","tarball":"https://registry.npmjs.org/@agilesyndrome/cf-genai-base/-/cf-genai-base-1.0.5.tgz","fileCount":13,"integrity":"sha512-TbOjLvAwnh1pOaBD3v3rN9pU4guY/HbtsH457bYHUjuJXIlNw2K5PENY3Y/tIGbilG1qxO+YnK/D/tJ2thRkkw==","signatures":[{"sig":"MEQCIH4/oBg3pEjeZ20Plvsn4h4ZACcSAZ/NPqrtGf7B9xKEAiBtoEdNYaq/kSeQXkE9AmCruh8FAl75zC0RopVjroapUQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIAO4IHBT/dkIF5B9hLy6QdSZjP8Sx0tDLaSMLzfNCPZtAiEAs6h+bkJcoUk3lRl97s+CYDib2zW1vxYrA8/SDNf/dsw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agilesyndrome%2fcf-genai-base@1.0.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":60769},"type":"module","exports":{".":"./src/index.js","./ui":"./src/ui/index.js","./core":"./src/core.js","./authorization":"./src/authorization.js","./ui/styles.css":"./src/ui/styles.css"},"gitHead":"7cabba70d7376e7f94a79824462daeb991ecfd59","scripts":{"test":"node --test tests/*.test.mjs","build":"npm run check && npm test && npm pack --dry-run","check":"node --check src/index.js && node --check src/core.js && node --check src/authorization.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4fbea399-4b0a-4587-8342-5019172cf011"}},"repository":{"url":"git+https://github.com/agilesyndrome/cf-genai-base.git","type":"git"},"_npmVersion":"11.19.0","description":"Lean Worker lifecycle and security helpers for Cloudflare sites.","directories":{},"_nodeVersion":"24.20.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/cf-genai-base_1.0.5_1789223531300_0.6145787296188605","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"@agilesyndrome/cf-genai-base","version":"1.0.6","license":"MIT","_id":"@agilesyndrome/cf-genai-base@1.0.6","maintainers":[{"name":"clouddrew","email":"drew.easley@calendly.com"}],"homepage":"https://github.com/agilesyndrome/cf-genai-base#readme","bugs":{"url":"https://github.com/agilesyndrome/cf-genai-base/issues"},"dist":{"shasum":"4034a48b240e39c91a0f8766fb64d96c10eec6c8","tarball":"https://registry.npmjs.org/@agilesyndrome/cf-genai-base/-/cf-genai-base-1.0.6.tgz","fileCount":13,"integrity":"sha512-NS1Q/cdZiGHo64gpgVGA6rQKcqN6KgyQh/03BPeM8KuyV8vlRJ1zGTv0QnlblHxF84LjNesdLjgf81ReClT4YA==","signatures":[{"sig":"MEUCIQCVfg71tTmijFdu7pY9vkR3xMMIhTKgsX+4d6+1topFEQIgAzyD2rOhQZDLz+C1XKeu6HMjZnABdD6Av2MhlMW9SoQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQClL4AEnyWxOhHVyhFJouAljZ3zMb0CfREcS5HPl485ZgIgPYLYtL1RVI9t0MX0CBIkkyGFfU3V1g7+Ah0558FJb0k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agilesyndrome%2fcf-genai-base@1.0.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":72135},"type":"module","exports":{".":"./src/index.js","./ui":"./src/ui/index.js","./core":"./src/core.js","./authorization":"./src/authorization.js","./ui/styles.css":"./src/ui/styles.css"},"gitHead":"5ffdef3423ef1230b6e23a0a67f14208dbe1a182","scripts":{"test":"node --test tests/*.test.mjs","build":"npm run check && npm test && npm pack --dry-run","check":"node --check src/index.js && node --check src/core.js && node --check src/authorization.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4fbea399-4b0a-4587-8342-5019172cf011"}},"repository":{"url":"git+https://github.com/agilesyndrome/cf-genai-base.git","type":"git"},"_npmVersion":"11.19.0","description":"Lean Worker lifecycle and security helpers for Cloudflare sites.","directories":{},"_nodeVersion":"24.20.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/cf-genai-base_1.0.6_1789401972942_0.8088195805353604","host":"s3://npm-registry-packages-npm-production"}},"1.0.7":{"name":"@agilesyndrome/cf-genai-base","version":"1.0.7","license":"MIT","_id":"@agilesyndrome/cf-genai-base@1.0.7","maintainers":[{"name":"clouddrew","email":"drew.easley@calendly.com"}],"homepage":"https://github.com/agilesyndrome/cf-genai-base#readme","bugs":{"url":"https://github.com/agilesyndrome/cf-genai-base/issues"},"dist":{"shasum":"b07c9ff581b57b7e425f77dec13634bf3e64191d","tarball":"https://registry.npmjs.org/@agilesyndrome/cf-genai-base/-/cf-genai-base-1.0.7.tgz","fileCount":15,"integrity":"sha512-vbeqg58gSRp7J9Ximk32RgZnCdAYNWdRbprL98Bv4irbWkkAhiEpONK7RzZYEkMLJgM3liGZSb+x/noUe5xBow==","signatures":[{"sig":"MEQCIEmLYhiQjI3j+ihpJwbF+PyShhlOXUA9VNQRZH265NLDAiA1XjxO1NoKoM4eIvxNKuBiUUUa9akIJfaWnx+qQlLeXQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCl6MXpiH12ywsMWFOY3TXWkawyab8zB/zFNHdhR1A/QAIgJzQ2ILKpMngk7+NVEKs64aPitBvkU9B0anidOo9cl4w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agilesyndrome%2fcf-genai-base@1.0.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":91147},"type":"module","exports":{".":"./src/index.js","./ui":"./src/ui/index.js","./core":"./src/core.js","./data":"./src/data.js","./authorization":"./src/authorization.js","./ui/styles.css":"./src/ui/styles.css"},"gitHead":"0dde5bf0d347c4475608451d439443e0d465fdff","scripts":{"test":"node --test tests/*.test.mjs","build":"npm run check && npm test && npm pack --dry-run","check":"node --check src/index.js && node --check src/core.js && node --check src/authorization.js && node --check src/data.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4fbea399-4b0a-4587-8342-5019172cf011"}},"repository":{"url":"git+https://github.com/agilesyndrome/cf-genai-base.git","type":"git"},"_npmVersion":"11.19.0","description":"Lean Worker lifecycle and security helpers for Cloudflare sites.","directories":{},"_nodeVersion":"24.20.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/cf-genai-base_1.0.7_1789430297777_0.4646693850816923","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@agilesyndrome/cf-genai-base","version":"2.0.0","license":"MIT","_id":"@agilesyndrome/cf-genai-base@2.0.0","maintainers":[{"name":"clouddrew","email":"drew.easley@calendly.com"}],"homepage":"https://github.com/agilesyndrome/cf-genai-base#readme","bugs":{"url":"https://github.com/agilesyndrome/cf-genai-base/issues"},"dist":{"shasum":"5555ef857d09371fa41f8583167bec3a8f707fba","tarball":"https://registry.npmjs.org/@agilesyndrome/cf-genai-base/-/cf-genai-base-2.0.0.tgz","fileCount":15,"integrity":"sha512-kQYI6pNl2KtaH/R30Y5axalIxZN2oBA1efmXwSGxEtz9oxsrK5fkK9WJx0+uC9z8fwkO/RhD/54Zjn3eDZY4Zg==","signatures":[{"sig":"MEYCIQD3m9TbaDA7DG0L1oxf4Sf+SMkFUPmJxIclY0wXgpCcNgIhALgv7vkv3yJMpDG9YrcGUzh0x4vTbHuCOfqi+ZsFFOz3","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIGHxMy7pLjAA51WoGCKu3/VflmFQgnUvhl4ROf9UrPpeAiEAzWoabwuBnohcNrJlRA5GWYnWIel1xi5btjaOW7WgDZo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agilesyndrome%2fcf-genai-base@2.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":91147},"type":"module","exports":{".":"./src/index.js","./ui":"./src/ui/index.js","./core":"./src/core.js","./data":"./src/data.js","./authorization":"./src/authorization.js","./ui/styles.css":"./src/ui/styles.css"},"gitHead":"3a75fc3872c29dcfae5a48b4696e3f1ac487d348","scripts":{"test":"node --test tests/*.test.mjs","build":"npm run check && npm test && npm pack --dry-run","check":"node --check src/index.js && node --check src/core.js && node --check src/authorization.js && node --check src/data.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4fbea399-4b0a-4587-8342-5019172cf011"}},"repository":{"url":"git+https://github.com/agilesyndrome/cf-genai-base.git","type":"git"},"_npmVersion":"11.19.0","description":"Lean Worker lifecycle and security helpers for Cloudflare sites.","directories":{},"_nodeVersion":"24.20.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/cf-genai-base_2.0.0_1789430411516_0.6216285666079757","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"@agilesyndrome/cf-genai-base","version":"2.0.1","license":"MIT","_id":"@agilesyndrome/cf-genai-base@2.0.1","maintainers":[{"name":"clouddrew","email":"drew.easley@calendly.com"}],"homepage":"https://github.com/agilesyndrome/cf-genai-base#readme","bugs":{"url":"https://github.com/agilesyndrome/cf-genai-base/issues"},"dist":{"shasum":"19111e2d806a579d966299294057d1f5fe4c6658","tarball":"https://registry.npmjs.org/@agilesyndrome/cf-genai-base/-/cf-genai-base-2.0.1.tgz","fileCount":15,"integrity":"sha512-9RlDUnVGkmavNvWj6nvifCLOON+cKPeZdVOfC2vQvIYfL5JreeBzX/A5X1L91wwYdE0q8pHgcmbASAt/BTOyPw==","signatures":[{"sig":"MEUCIQDiig55IiTw6hpX1nzfO0wgqbuLA/jHpo6lx+QJVZz8hwIgae9C91mONJZ3fcSZjAeU5oFw1FGswQFfmZdWrQmHdUs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCzbhr1wQZw5AENqZvLKuoaRmm60RKtmx7Bv6dUk10PGAIgV93zsTF2l7ErgtuEvw+GNyZlGuu2y3KaYXcH57h6YrQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agilesyndrome%2fcf-genai-base@2.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":91626},"type":"module","exports":{".":"./src/index.js","./ui":"./src/ui/index.js","./core":"./src/core.js","./data":"./src/data.js","./authorization":"./src/authorization.js","./ui/styles.css":"./src/ui/styles.css"},"gitHead":"00cccda35e8e35a1970a7c26984393fc67d97715","scripts":{"test":"node --test tests/*.test.mjs","build":"npm run check && npm test && npm pack --dry-run","check":"node --check src/index.js && node --check src/core.js && node --check src/authorization.js && node --check src/data.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4fbea399-4b0a-4587-8342-5019172cf011"}},"repository":{"url":"git+https://github.com/agilesyndrome/cf-genai-base.git","type":"git"},"_npmVersion":"11.19.0","description":"Lean Worker lifecycle and security helpers for Cloudflare sites.","directories":{},"_nodeVersion":"24.20.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/cf-genai-base_2.0.1_1789433963778_0.5487963851262536","host":"s3://npm-registry-packages-npm-production"}},"2.1.2":{"name":"@agilesyndrome/cf-genai-base","version":"2.1.2","license":"MIT","_id":"@agilesyndrome/cf-genai-base@2.1.2","maintainers":[{"name":"clouddrew","email":"drew.easley@calendly.com"}],"homepage":"https://github.com/agilesyndrome/cf-genai-base#readme","bugs":{"url":"https://github.com/agilesyndrome/cf-genai-base/issues"},"dist":{"shasum":"7a553e3f6fc6f384486f411be61883dc17a9de38","tarball":"https://registry.npmjs.org/@agilesyndrome/cf-genai-base/-/cf-genai-base-2.1.2.tgz","fileCount":16,"integrity":"sha512-FQnkAVoeP1dxy9Rav5/uDJpNcogCcwGmkMTKpvaBqY0CtHICgIkGaGFtHSZJZVMEbgSi/S7sNRd2Iq6P/8o7Vg==","signatures":[{"sig":"MEUCIQCc+IVRqlzivZQ7BA8BplCd9salXt4BqRVsty0/mynnkAIgJZfiw5EKRw7sPknI0Qlz8aHRq6dmZIRmWeq9fBkR9FU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDWw+4amGs7bqwiDjWKFMUm8qrtuSKPWIXMwn6ic0BXsgIhAJEriR+kJUAtEOMWXX+8ReNavmJY4GqM2jS62OFr8LiW","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agilesyndrome%2fcf-genai-base@2.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":106308},"type":"module","exports":{".":"./src/index.js","./ui":"./src/ui/index.js","./core":"./src/core.js","./data":"./src/data.js","./authorization":"./src/authorization.js","./ui/styles.css":"./src/ui/styles.css"},"gitHead":"6d6c8df719d8b7dfd6262ff6bb89db044f076a9f","scripts":{"test":"node --test tests/*.test.mjs","build":"npm run check && npm test && npm pack --dry-run","check":"node --check src/index.js && node --check src/core.js && node --check src/authorization.js && node --check src/data.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4fbea399-4b0a-4587-8342-5019172cf011"}},"repository":{"url":"git+https://github.com/agilesyndrome/cf-genai-base.git","type":"git"},"_npmVersion":"11.19.0","description":"Lean Worker lifecycle and security helpers for Cloudflare sites.","directories":{},"_nodeVersion":"24.20.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/cf-genai-base_2.1.2_1789471133004_0.3568802112367968","host":"s3://npm-registry-packages-npm-production"}},"4.1.0":{"name":"@agilesyndrome/cf-genai-base","version":"4.1.0","license":"MIT","_id":"@agilesyndrome/cf-genai-base@4.1.0","maintainers":[{"name":"clouddrew","email":"drew.easley@calendly.com"}],"homepage":"https://github.com/agilesyndrome/cf-genai-base#readme","bugs":{"url":"https://github.com/agilesyndrome/cf-genai-base/issues"},"dist":{"shasum":"9ee26194d3770c8095e8d1c72a183378d6ed3831","tarball":"https://registry.npmjs.org/@agilesyndrome/cf-genai-base/-/cf-genai-base-4.1.0.tgz","fileCount":16,"integrity":"sha512-4mg6AxGyjuPI7S9hUp1L61TT1fQuXSnusZCQe7rUOEs2jZ1Yb6k3YzyhTtEgraBnyOFokrwM4kaMcQndQGP54A==","signatures":[{"sig":"MEUCIQCzgxevhL/mGzMSpab8LVwIS/fPcR5QC4eU36lqbCGxfQIgXnuvRsFFPfaYw8qKNgF06ZKfdO5009OGTOec/7w8bG8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCCVD3Lw+zn0zxjNch51Da4Z0spiMeHfW/Bc5iBf4PIDgIhAIRMQi+JuyiwNxoKI9QBvWETQCjEhlf5jBqiwc6xKY6u","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agilesyndrome%2fcf-genai-base@4.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":106308},"type":"module","exports":{".":"./src/index.js","./ui":"./src/ui/index.js","./core":"./src/core.js","./data":"./src/data.js","./authorization":"./src/authorization.js","./ui/styles.css":"./src/ui/styles.css"},"gitHead":"9a9ea9e01f58b197b6a0b0c0f4d92e31c3caf370","scripts":{"test":"node --test tests/*.test.mjs","build":"npm run check && npm test && npm pack --dry-run","check":"node --check src/index.js && node --check src/core.js && node --check src/authorization.js && node --check src/data.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4fbea399-4b0a-4587-8342-5019172cf011"}},"repository":{"url":"git+https://github.com/agilesyndrome/cf-genai-base.git","type":"git"},"_npmVersion":"11.19.0","description":"Lean Worker lifecycle and security helpers for Cloudflare sites.","directories":{},"_nodeVersion":"24.20.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/cf-genai-base_4.1.0_1789472140373_0.5924660986569206","host":"s3://npm-registry-packages-npm-production"}},"4.1.1":{"name":"@agilesyndrome/cf-genai-base","version":"4.1.1","license":"MIT","_id":"@agilesyndrome/cf-genai-base@4.1.1","maintainers":[{"name":"clouddrew","email":"drew.easley@calendly.com"}],"homepage":"https://github.com/agilesyndrome/cf-genai-base#readme","bugs":{"url":"https://github.com/agilesyndrome/cf-genai-base/issues"},"dist":{"shasum":"6d86b29e8ad0fc729a35d211b887e79218fcf081","tarball":"https://registry.npmjs.org/@agilesyndrome/cf-genai-base/-/cf-genai-base-4.1.1.tgz","fileCount":16,"integrity":"sha512-nZUvaeAio3orMbOdQhfdfGMTJKGDarj4VrtNZBKZSkqqqxIhMZoT++aJSbCKBg2W0+VlGS99ZD9PEn6ycv3hdQ==","signatures":[{"sig":"MEUCIQD6fsMC6zP47QRAz/r8JVk4eRbPY7DrUQfzANm/1rhCQAIgI4S/qu/KWYN2zy8sLU2WMs05MQXc9AMFlGqv1ubLuzM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDTnspF/MtEfMJlleEOrhKZCDHdAEfxJUWIZQfdLawdCQIgCT+/HKvEvOYU5f9zCMxS2df9m4LwU8WFaChNyjHD2FA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agilesyndrome%2fcf-genai-base@4.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":106308},"type":"module","exports":{".":"./src/index.js","./ui":"./src/ui/index.js","./core":"./src/core.js","./data":"./src/data.js","./authorization":"./src/authorization.js","./ui/styles.css":"./src/ui/styles.css"},"gitHead":"9f880f58d303b9ac35333e541b7d99bceb1f91bf","scripts":{"test":"node --test tests/*.test.mjs","build":"npm run check && npm test && npm pack --dry-run","check":"node --check src/index.js && node --check src/core.js && node --check src/authorization.js && node --check src/data.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4fbea399-4b0a-4587-8342-5019172cf011"}},"repository":{"url":"git+https://github.com/agilesyndrome/cf-genai-base.git","type":"git"},"_npmVersion":"11.19.0","description":"Lean Worker lifecycle and security helpers for Cloudflare sites.","directories":{},"_nodeVersion":"24.20.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/cf-genai-base_4.1.1_1789472312506_0.5282918375139447","host":"s3://npm-registry-packages-npm-production"}},"4.1.2":{"name":"@agilesyndrome/cf-genai-base","version":"4.1.2","license":"MIT","_id":"@agilesyndrome/cf-genai-base@4.1.2","maintainers":[{"name":"clouddrew","email":"drew.easley@calendly.com"}],"homepage":"https://github.com/agilesyndrome/cf-genai-base#readme","bugs":{"url":"https://github.com/agilesyndrome/cf-genai-base/issues"},"dist":{"shasum":"59a97d4fa710de8be2bcba872df5d611472a0619","tarball":"https://registry.npmjs.org/@agilesyndrome/cf-genai-base/-/cf-genai-base-4.1.2.tgz","fileCount":16,"integrity":"sha512-GhO5mWra+g9kw30PrU0JWRzslc8PeZSJV0+MCd0Cx4bkfAROGo4x+fygIiQzaAoiWUas0tFvtIT2Au0R8uzmhw==","signatures":[{"sig":"MEUCIFOjcVHuojN8LNfK+xxRu88V9jq84fT5JEe595jairhuAiEA4C/iF8WUZhqwANVNxlW0qBHoXdMTUHYkEUwMLeA0+BM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDZf2ApAnEb9DryXNSd0Qva+P84NzZ0T5lPXhiJUAKj5gIgWAoMIXUzZmIeMuX5Sy4uafnnU6puVxadqo5DmemEyW8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agilesyndrome%2fcf-genai-base@4.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":108646},"type":"module","exports":{".":"./src/index.js","./ui":"./src/ui/index.js","./core":"./src/core.js","./data":"./src/data.js","./authorization":"./src/authorization.js","./ui/styles.css":"./src/ui/styles.css"},"gitHead":"840e3d2cfc9a91c4aec7106a1b160dbf669a2dc8","scripts":{"test":"node --test tests/*.test.mjs","build":"npm run check && npm test && npm pack --dry-run","check":"node --check src/index.js && node --check src/core.js && node --check src/authorization.js && node --check src/data.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4fbea399-4b0a-4587-8342-5019172cf011"}},"repository":{"url":"git+https://github.com/agilesyndrome/cf-genai-base.git","type":"git"},"_npmVersion":"11.19.0","description":"Lean Worker lifecycle and security helpers for Cloudflare sites.","directories":{},"_nodeVersion":"24.20.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/cf-genai-base_4.1.2_1789496113850_0.6813498285653128","host":"s3://npm-registry-packages-npm-production"}},"4.1.3":{"name":"@agilesyndrome/cf-genai-base","version":"4.1.3","license":"MIT","_id":"@agilesyndrome/cf-genai-base@4.1.3","maintainers":[{"name":"clouddrew","email":"drew.easley@calendly.com"}],"homepage":"https://github.com/agilesyndrome/cf-genai-base#readme","bugs":{"url":"https://github.com/agilesyndrome/cf-genai-base/issues"},"dist":{"shasum":"9d9db1388d01d064609da91a1238f791ee1bfe1b","tarball":"https://registry.npmjs.org/@agilesyndrome/cf-genai-base/-/cf-genai-base-4.1.3.tgz","fileCount":16,"integrity":"sha512-BjSm8GD8AFoPzCF54V7ScgmfijYw6ZyCM80+Ma+kJInS2tebU6CT1Zl5Ocqr2Vk1xCdm86Pv9xw/WHOTvC/qCg==","signatures":[{"sig":"MEYCIQD3DyL2CNpJcpLuWBHz4kvbDl7EtwlvP1VnhQ0wBlCKUgIhALtm+7O5RAMv/vvAusDT9YJIjzgYBM3T8vlU8ytC1eUr","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCmWcVh25INXf9M63a1F6NhySstcYURQXw74EtD+1Q9MgIhAPcDeJjx1Izu8mby/Hekff22OWmwJcuK6tyajIVatkTm","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agilesyndrome%2fcf-genai-base@4.1.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":114802},"type":"module","exports":{".":"./src/index.js","./ui":"./src/ui/index.js","./core":"./src/core.js","./data":"./src/data.js","./authorization":"./src/authorization.js","./ui/styles.css":"./src/ui/styles.css"},"gitHead":"1fa834c5b5b76431b63a6fadeb736b805f97d310","scripts":{"test":"node --test tests/*.test.mjs","build":"npm run check && npm test && npm pack --dry-run","check":"node --check src/index.js && node --check src/core.js && node --check src/authorization.js && node --check src/data.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4fbea399-4b0a-4587-8342-5019172cf011"}},"repository":{"url":"git+https://github.com/agilesyndrome/cf-genai-base.git","type":"git"},"_npmVersion":"11.19.0","description":"Lean Worker lifecycle and security helpers for Cloudflare sites.","directories":{},"_nodeVersion":"24.20.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/cf-genai-base_4.1.3_1789498647855_0.08922850983457753","host":"s3://npm-registry-packages-npm-production"}},"5.0.0":{"name":"@agilesyndrome/cf-genai-base","version":"5.0.0","license":"MIT","_id":"@agilesyndrome/cf-genai-base@5.0.0","maintainers":[{"name":"clouddrew","email":"drew.easley@calendly.com"}],"homepage":"https://github.com/agilesyndrome/cf-genai-base#readme","bugs":{"url":"https://github.com/agilesyndrome/cf-genai-base/issues"},"dist":{"shasum":"f252a0f12c5c1d886140c9333232257e843cc272","tarball":"https://registry.npmjs.org/@agilesyndrome/cf-genai-base/-/cf-genai-base-5.0.0.tgz","fileCount":55,"integrity":"sha512-PQrPxnPVT6l+SSnQs0WyXihuzmNihC+nha8rbEzCIPgfygiK4cKDDibf50a1zzBDaNPTGGxfGvdwbHd7sh9W5A==","signatures":[{"sig":"MEYCIQCfEMaBGPlwb9Bd1DwKxsdC5Kzk7GnUwr3UBKo2kOAZDgIhAILPMfBhNMZYiVctoYnYY+p2i8zW7/uis/XelFIFfybD","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDzoqJkSDxi3UsSdh1lWRWVUOgWgnnqIQTaM9++g0k8NgIhAOYod9vtdIAiUcQ4HP4AIgAFxOnysZTRP8XcHZysAZvf","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agilesyndrome%2fcf-genai-base@5.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":149513},"type":"module","exports":{".":"./src/index.js","./ui":"./src/ui/index.js","./api":"./src/api/index.js","./app":"./src/app.js","./auth":"./src/auth/index.js","./core":"./src/core/index.js","./data":"./src/data/index.js","./admin":"./src/admin/index.js","./ui/react":"./src/ui/react/index.jsx","./event-hub":"./src/core/event-hub.js","./repository":"./src/repository.js","./ui/styles.css":"./src/ui/styles.css"},"gitHead":"79c71a4c78db621d804a8e19fad1c01b96405312","scripts":{"test":"node --test tests/*.test.mjs","build":"npm run check && npm test && npm pack --dry-run","check":"node --check src/index.js && node --check src/core/index.js && node --check src/core/jobs.js && node --check src/core/event-hub.js && node --check src/auth/index.js && node --check src/runtime/worker.js && node --check src/runtime/features.js && node --check src/runtime/health.js && node --check src/admin/index.js && node --check src/admin/routes.js && node --check src/data/index.js && node --check src/data/resources.js && node --check src/data/reader.js && node --check src/data/context.js && node --check src/api/index.js && node --check src/api/contracts.js && node --check src/api/client.js && node --check src/api/jobs.js && node --check src/ui/index.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4fbea399-4b0a-4587-8342-5019172cf011"}},"repository":{"url":"git+https://github.com/agilesyndrome/cf-genai-base.git","type":"git"},"_npmVersion":"11.19.0","description":"Lean Worker lifecycle and security helpers for Cloudflare sites.","directories":{},"_nodeVersion":"24.20.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"peerDependencies":{"react":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/cf-genai-base_5.0.0_1789574586401_0.23536602880629243","host":"s3://npm-registry-packages-npm-production"}},"5.0.1":{"name":"@agilesyndrome/cf-genai-base","version":"5.0.1","license":"MIT","_id":"@agilesyndrome/cf-genai-base@5.0.1","maintainers":[{"name":"clouddrew","email":"drew.easley@calendly.com"}],"homepage":"https://github.com/agilesyndrome/cf-genai-base#readme","bugs":{"url":"https://github.com/agilesyndrome/cf-genai-base/issues"},"bin":{"cf-genai":"bin/cf-genai.js"},"dist":{"shasum":"d85b0684e0bbd39c4b4a9d1ccf6e8188bea32334","tarball":"https://registry.npmjs.org/@agilesyndrome/cf-genai-base/-/cf-genai-base-5.0.1.tgz","fileCount":66,"integrity":"sha512-IGLZ0TgDe1xaRYbdeeW6AgO12+TiSKwh/zIAQ80JERUaXsbK2YjZJDkf0mF4bK5uyYf9raBhFu+ZFm6A20t3Ug==","signatures":[{"sig":"MEUCIQDePpLE0h7EGReztAOAQQHH0e0+/v2JnRlzb1N8xjS/qwIgDZz849stlpMMKFDaOYyoD20IkK4wALDWz4mpQBqnlYM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCcIzmT2sLXD9/QQQpkEsz4FRdtTC+7obwFuI3mEtZg9wIgFVjcF7boNYBggrrc4c7/9klExPKD6pHZoBMDR1Hca2c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agilesyndrome%2fcf-genai-base@5.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":240327},"type":"module","engines":{"node":">=20"},"exports":{".":"./src/index.js","./ui":"./src/ui/index.js","./api":"./src/api/index.js","./app":"./src/app.js","./cli":"./src/cli/cli.js","./auth":"./src/auth/index.js","./core":"./src/core/index.js","./data":"./src/data/index.js","./admin":"./src/admin/index.js","./cli/*":"./src/cli/*.js","./ui/react":"./src/ui/react/index.jsx","./event-hub":"./src/core/event-hub.js","./repository":"./src/repository.js","./ui/styles.css":"./src/ui/styles.css"},"gitHead":"1124ba8b4c520dde0906ee061da643b68412a5f2","scripts":{"test":"node --test tests/*.test.mjs","build":"npm run check && npm test && npm pack --dry-run","check":"node --check bin/cf-genai.js && node --check src/index.js && node --check src/core/index.js && node --check src/core/jobs.js && node --check src/core/event-hub.js && node --check src/auth/index.js && node --check src/auth/oauth-single.js && node --check src/runtime/worker.js && node --check src/runtime/features.js && node --check src/runtime/health.js && node --check src/admin/index.js && node --check src/admin/routes.js && node --check src/data/index.js && node --check src/data/resources.js && node --check src/data/reader.js && node --check src/data/context.js && node --check src/api/index.js && node --check src/api/contracts.js && node --check src/api/client.js && node --check src/api/jobs.js && node --check src/ui/index.js && node --check src/cli/cli.js && node --check src/cli/d1.js && node --check src/cli/operations.js && node --check src/cli/project.js && node --check src/cli/status.js && node --check src/cli/tenants.js && node --check src/cli/users.js && node --check src/cli/version.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4fbea399-4b0a-4587-8342-5019172cf011"}},"repository":{"url":"git+https://github.com/agilesyndrome/cf-genai-base.git","type":"git"},"_npmVersion":"11.19.0","description":"Cloudflare Worker lifecycle, security, administration, and operational CLI helpers.","directories":{},"_nodeVersion":"24.20.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"peerDependencies":{"react":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/cf-genai-base_5.0.1_1789588159050_0.7947521497469319","host":"s3://npm-registry-packages-npm-production"}},"5.0.2":{"name":"@agilesyndrome/cf-genai-base","version":"5.0.2","license":"MIT","_id":"@agilesyndrome/cf-genai-base@5.0.2","maintainers":[{"name":"clouddrew","email":"drew.easley@calendly.com"}],"homepage":"https://github.com/agilesyndrome/cf-genai-base#readme","bugs":{"url":"https://github.com/agilesyndrome/cf-genai-base/issues"},"bin":{"cf-genai":"bin/cf-genai.js"},"dist":{"shasum":"10fbf7fb64a4aaa614b102f532319abfd123c599","tarball":"https://registry.npmjs.org/@agilesyndrome/cf-genai-base/-/cf-genai-base-5.0.2.tgz","fileCount":66,"integrity":"sha512-n1GIA3ktFyjOrCnmL2pSzwqhBZxJuswmukfq0YdyZzkcV5vJFzILTUKoMlu5Z2eM79LEeZZl653XETmhWshQVA==","signatures":[{"sig":"MEUCIQCoEryJmUjZdFqtD8/WnykXqoFbqCzim31+gaUknFELuAIgGN9kYCeGku92FjLl25FRUJq1NYpIzmElU1NW/Yiq43o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIErjnZxigkA1cQCNegzaYcJSVxdO6qnT5o0UrjMgvPR5AiBGbT1uc1tImZJ7G82c37Cosq+6oABexm9JiGQzPL/kLQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agilesyndrome%2fcf-genai-base@5.0.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":243853},"type":"module","engines":{"node":">=20"},"exports":{".":"./src/index.js","./ui":"./src/ui/index.js","./api":"./src/api/index.js","./app":"./src/app.js","./cli":"./src/cli/cli.js","./auth":"./src/auth/index.js","./core":"./src/core/index.js","./data":"./src/data/index.js","./admin":"./src/admin/index.js","./cli/*":"./src/cli/*.js","./ui/react":"./src/ui/react/index.jsx","./event-hub":"./src/core/event-hub.js","./repository":"./src/repository.js","./ui/styles.css":"./src/ui/styles.css"},"gitHead":"ad27d6be7fc5285a3d778269ae9a6e05e3d912d5","scripts":{"test":"node --test tests/*.test.mjs","build":"npm run check && npm test && npm pack --dry-run","check":"node --check bin/cf-genai.js && node --check src/index.js && node --check src/core/index.js && node --check src/core/jobs.js && node --check src/core/event-hub.js && node --check src/auth/index.js && node --check src/auth/oauth-single.js && node --check src/runtime/worker.js && node --check src/runtime/features.js && node --check src/runtime/health.js && node --check src/admin/index.js && node --check src/admin/routes.js && node --check src/data/index.js && node --check src/data/resources.js && node --check src/data/reader.js && node --check src/data/context.js && node --check src/api/index.js && node --check src/api/contracts.js && node --check src/api/client.js && node --check src/api/jobs.js && node --check src/ui/index.js && node --check src/cli/cli.js && node --check src/cli/d1.js && node --check src/cli/operations.js && node --check src/cli/project.js && node --check src/cli/status.js && node --check src/cli/tenants.js && node --check src/cli/users.js && node --check src/cli/version.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4fbea399-4b0a-4587-8342-5019172cf011"}},"repository":{"url":"git+https://github.com/agilesyndrome/cf-genai-base.git","type":"git"},"_npmVersion":"11.19.0","description":"Cloudflare Worker lifecycle, security, administration, and operational CLI helpers.","directories":{},"_nodeVersion":"24.20.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"peerDependencies":{"react":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/cf-genai-base_5.0.2_1789592425601_0.5643425837840541","host":"s3://npm-registry-packages-npm-production"}},"6.0.0":{"_id":"@agilesyndrome/cf-genai-base@6.0.0","bin":{"cf-genai":"bin/cf-genai.js"},"bugs":{"url":"https://github.com/agilesyndrome/cf-genai-base/issues"},"dist":{"shasum":"7c40be362d245d9369674303e425d47b1cb10981","tarball":"https://registry.npmjs.org/@agilesyndrome/cf-genai-base/-/cf-genai-base-6.0.0.tgz","fileCount":654,"integrity":"sha512-CwjRM4q8BUeUFk7QWE9Mur+3cwvhxzALFlqBX0mg85ttTNF6RnBVntf0ZXrCL8TcbHPBDhhdwkU52uu7uEXLsA==","signatures":[{"sig":"MEUCIQCWDdK7v5yj6TGUmOlfk+w+x3TACGnuhzHV7+kLJLOGuQIgbm8+QPW1hrp9AJ3++63/p0bOXRr6xQY6eaVSp5FjYVQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQD2nUFw01mwPLQ+FEFdEcgOPfa4vbN49GFqa9t2l+w5XQIgRMn1xVvJHyN/8EPQXiIJHw69oToPgfArWkqwgOKsAxY="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agilesyndrome%2fcf-genai-base@6.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1208204},"name":"@agilesyndrome/cf-genai-base","type":"module","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./ui":{"types":"./dist/ui/index.d.ts","import":"./dist/ui/index.js","default":"./dist/ui/index.js"},"./api":{"types":"./dist/api/index.d.ts","import":"./dist/api/index.js","default":"./dist/api/index.js"},"./app":{"types":"./dist/app.d.ts","import":"./dist/app.js","default":"./dist/app.js"},"./cli":{"types":"./dist/cli/cli.d.ts","import":"./dist/cli/cli.js","default":"./dist/cli/cli.js"},"./auth":{"types":"./dist/auth/index.d.ts","import":"./dist/auth/index.js","default":"./dist/auth/index.js"},"./core":{"types":"./dist/core/index.d.ts","import":"./dist/core/index.js","default":"./dist/core/index.js"},"./data":{"types":"./dist/data/index.d.ts","import":"./dist/data/index.js","default":"./dist/data/index.js"},"./admin":{"types":"./dist/admin/index.d.ts","import":"./dist/admin/index.js","default":"./dist/admin/index.js"},"./cli/*":{"types":"./dist/cli/*.d.ts","import":"./dist/cli/*.js","default":"./dist/cli/*.js"},"./input":{"types":"./dist/input.d.ts","import":"./dist/input.js","default":"./dist/input.js"},"./domain":{"types":"./dist/domain/index.d.ts","import":"./dist/domain/index.js","default":"./dist/domain/index.js"},"./ui/ssr":{"types":"./dist/ui/ssr.d.ts","import":"./dist/ui/ssr.js","default":"./dist/ui/ssr.js"},"./features":{"types":"./dist/features/index.d.ts","import":"./dist/features/index.js","default":"./dist/features/index.js"},"./ui/react":{"types":"./dist/ui/react/index.d.ts","import":"./dist/ui/react/index.js","default":"./dist/ui/react/index.js"},"./core/jobs":{"types":"./dist/core/jobs/index.d.ts","import":"./dist/core/jobs/index.js","default":"./dist/core/jobs/index.js"},"./event-hub":{"types":"./dist/core/events/hub.d.ts","import":"./dist/core/events/hub.js","default":"./dist/core/events/hub.js"},"./repository":{"types":"./dist/repository.d.ts","import":"./dist/repository.js","default":"./dist/repository.js"},"./core/events":{"types":"./dist/core/events/index.d.ts","import":"./dist/core/events/index.js","default":"./dist/core/events/index.js"},"./features/llm":{"types":"./dist/features/llm/index.d.ts","import":"./dist/features/llm/index.js","default":"./dist/features/llm/index.js"},"./auth/identity":{"types":"./dist/auth/identity/index.d.ts","import":"./dist/auth/identity/index.js","default":"./dist/auth/identity/index.js"},"./core/circuits":{"types":"./dist/core/circuits/index.d.ts","import":"./dist/core/circuits/index.js","default":"./dist/core/circuits/index.js"},"./core/database":{"types":"./dist/core/database/index.d.ts","import":"./dist/core/database/index.js","default":"./dist/core/database/index.js"},"./core/security":{"types":"./dist/core/security/index.d.ts","import":"./dist/core/security/index.js","default":"./dist/core/security/index.js"},"./ui/styles.css":"./dist/ui/styles.css","./core/healthchecks":{"types":"./dist/core/healthchecks/index.d.ts","import":"./dist/core/healthchecks/index.js","default":"./dist/core/healthchecks/index.js"},"./features/messaging":{"types":"./dist/features/messaging/index.d.ts","import":"./dist/features/messaging/index.js","default":"./dist/features/messaging/index.js"}},"gitHead":"a07c4bbeffa2f5681c114a2d76de4b466d1870af","license":"MIT","scripts":{"test":"node --import tsx --test tests/*.test.mjs","build":"npm run check && npm run prepack && npm test && npm run test:integration && npm run verify:build && npm pack --dry-run --ignore-scripts --loglevel=error","check":"npm run typecheck && npm run format:check && npm run lint:source","clean":"node scripts/clean-dist.mjs","assets":"node scripts/copy-build-assets.mjs","format":"node scripts/format-source.mjs --write","compile":"tsc -p tsconfig.build.json","prepack":"npm run clean && npm run compile && npm run assets","prepare":"node scripts/setup-git-hooks.mjs","typecheck":"tsc --noEmit -p tsconfig.json","lint:source":"node scripts/lint-source.mjs","format:check":"node scripts/format-source.mjs && npm run lint:source -- --format-only","verify:build":"node scripts/verify-build.mjs","test:integration":"node --import tsx --test examples/todo-list/test/integration.test.mjs"},"version":"6.0.0","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4fbea399-4b0a-4587-8342-5019172cf011"}},"homepage":"https://github.com/agilesyndrome/cf-genai-base#readme","repository":{"url":"git+https://github.com/agilesyndrome/cf-genai-base.git","type":"git"},"_npmVersion":"11.19.0","description":"Cloudflare Worker lifecycle, security, administration, and operational CLI helpers.","directories":{},"maintainers":[{"name":"clouddrew","email":"drew.easley@calendly.com"}],"_nodeVersion":"24.21.0","dependencies":{"hono":"^4.13.8"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.13","react-dom":"^19.0.0","typescript":"^7.0.2","@types/node":"^22.20.3","@types/react":"^19.3.0","@types/react-dom":"^19.1.9","@cloudflare/workers-types":"^5.20260917.1"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/cf-genai-base_6.0.0_1790522936981_0.2203793249773376"}}},"time":{"created":"2026-08-23T22:59:29.593Z","modified":"2026-09-27T15:28:57.464Z","0.1.0":"2026-08-23T22:59:29.906Z","0.1.1":"2026-08-23T23:04:40.683Z","0.1.2":"2026-08-23T23:13:26.833Z","0.1.3":"2026-09-10T16:11:43.620Z","0.1.4":"2026-09-10T17:43:18.530Z","0.1.5":"2026-09-10T20:15:18.911Z","0.2.5":"2026-09-12T11:46:36.781Z","1.0.0":"2026-09-12T12:34:53.362Z","1.0.1":"2026-09-12T12:36:22.822Z","1.0.2":"2026-09-12T12:40:27.407Z","1.0.3":"2026-09-12T13:48:09.280Z","1.0.4":"2026-09-12T14:28:52.134Z","1.0.5":"2026-09-12T14:32:11.400Z","1.0.6":"2026-09-14T16:06:13.035Z","1.0.7":"2026-09-14T23:58:17.867Z","2.0.0":"2026-09-15T00:00:11.591Z","2.0.1":"2026-09-15T00:59:23.904Z","2.1.2":"2026-09-15T11:18:53.092Z","4.1.0":"2026-09-15T11:35:40.457Z","4.1.1":"2026-09-15T11:38:32.591Z","4.1.2":"2026-09-15T18:15:13.964Z","4.1.3":"2026-09-15T18:57:27.969Z","5.0.0":"2026-09-16T16:03:06.498Z","5.0.1":"2026-09-16T19:49:19.158Z","5.0.2":"2026-09-16T21:00:25.725Z","6.0.0":"2026-09-27T15:28:57.127Z"},"bugs":{"url":"https://github.com/agilesyndrome/cf-genai-base/issues"},"license":"MIT","homepage":"https://github.com/agilesyndrome/cf-genai-base#readme","repository":{"url":"git+https://github.com/agilesyndrome/cf-genai-base.git","type":"git"},"description":"Cloudflare Worker lifecycle, security, administration, and operational CLI helpers.","maintainers":[{"name":"clouddrew","email":"drew.easley@calendly.com"}],"readme":"# `@agilesyndrome/cf-genai-base`\n\nOpinionated startup boilerplate for small Cloudflare Workers.\n\nThe package also ships the `cf-genai` command. Runtime, administration, D1,\nproject automation, and release tooling are versioned and published together;\nthere is no separate CLI dependency.\n\nThe base owns the shared security boundary as well as Worker lifecycle concerns. It reserves `/admin` and `/api/admin` routes, authenticates them using `AUTH_STRATEGY` (default `http_basic`, or `oauth` when an auth provider is supplied), and applies the optional `authorize` policy. Sites still own their router, HTML, D1 queries, R2 keys, and scheduled jobs.\nUse D1 bindings for durable application data and R2 bindings for binary assets;\ndo not put either into module-level state.\n\nThe Worker transport is built on [Hono](https://hono.dev/): middleware ordering,\nHTTP method/path matching, and admin/API dispatch all use Hono's runtime. Existing\nfeature middleware keeps the package's compatibility signature while new integrations\ncan use Hono middleware directly. For Worker-rendered documents, import\n`createSsrRenderer`, `SiteDocument`, or `renderSiteDocument` from\n`@agilesyndrome/cf-genai-base/ui/ssr`; the interactive admin components remain\nReact-based and are intentionally separate from Hono JSX SSR.\n\nThe site document contract owns safe metadata, canonical URLs, Open Graph\nfields, theme color, stylesheets, scripts, and body data attributes. A site\nsupplies its own children, theme CSS, navigation, and content components.\n\nBase also provides provider-neutral authorization helpers and browser components\nthrough `@agilesyndrome/cf-genai-base/auth` and\n`@agilesyndrome/cf-genai-base/ui`. Applications declare their scope manifest,\nwhile base owns the user, scope, and grant records plus the generic user-access\nAPI. The UI components are themeable with CSS custom properties and do not\ncontain application-specific components.\n\n```js\nimport { createWorker, defineApp, defineFeature } from \"@agilesyndrome/cf-genai-base\";\n\nexport default createWorker({\n  app: defineApp({\n    name: \"cookbook\",\n    features: [\n      auth,\n      defineFeature(\"llm\", { apiToken: (env) => env.LLM_API_TOKEN }),\n      defineFeature(\"messaging\", { displayName: \"Cookbook chat\" }),\n    ],\n  }),\n  fetch: async (request, env) => {\n    return router(request, env);\n  },\n});\n```\n\nBuilt-in features are inert unless an application registers them in\n`app.features`. Feature-specific APIs use explicit subpaths:\n\n```js\nimport { createLLM } from \"@agilesyndrome/cf-genai-base/features/llm\";\nimport { createMessagingStore } from \"@agilesyndrome/cf-genai-base/features/messaging\";\n```\n\nThe LLM feature provides OpenAI-compatible generation, typed JSON repair,\nreview, model healthchecks, circuit breakers, and durable job integration. The\n`/features/llm` entrypoint exports its complete TypeScript contract, including\n`LLMEnvironment`, client and request options, provider configuration, JSON\nSchema inputs and `InferJSONSchema`, token usage, generation/review inputs,\njob options, loggers, and callbacks. Pass a literal schema with `as const` (or\n`satisfies JSONSchemaInput`) to preserve the generated value type.\nThe messaging feature provides conversations, participants, messages, scoped and\ntenant-isolated stores, and durable reply jobs. Construct the store with the\nrequest-scoped reader, for example `createMessagingStore(env.data.tenant)`. Apply\n`migrations/0007_messaging.sql` when messaging is requested.\n\nFeatures expose `middleware(request, env, ctx, next, state)` and may\nshort-circuit routes, attach request state, or call `next()`.\n\nBase protects `/admin` and `/api/admin`; the React UI package owns the browser\npages. For a complete single-route UI, import `AdminDashboard` from\n`@agilesyndrome/cf-genai-base/ui` and mount `<AdminDashboard />`, or use\n`mountAdminDashboards` for declarative roots. It includes\nusers and access assignments, tenants, user groups, scopes, subscriptions,\njobs, features, health checks, and circuit breakers with internal list/detail\nnavigation. Use `enabledSections` to hide an unavailable optional domain and\n`applicationSections` to add site-owned panels. Import `AdminShell` and the platform catalogs from\n`@agilesyndrome/cf-genai-base/ui`. Sites provide their own application links and\ntheme while the base components consume the shared JSON admin APIs.\n\n```jsx\nimport { AdminDashboard } from \"@agilesyndrome/cf-genai-base/ui\";\nimport \"@agilesyndrome/cf-genai-base/ui/styles.css\";\n\nexport function AdminPage() {\n  return <AdminDashboard />;\n}\n```\n\n## Command-line tools\n\nInstall base in a project (or globally) and use the bundled executable:\n\n```sh\nnpm install @agilesyndrome/cf-genai-base\nnpx cf-genai version\n\ncf-genai check\ncf-genai test\ncf-genai ci\ncf-genai dev\ncf-genai storybook\ncf-genai upgrade base latest\ncf-genai release --confirm\ncf-genai release-status --wait 3\n```\n\nThe CLI includes project checks and releases, scoped-data linting, package\nupgrades with migration vendoring, D1 refresh/backup/restore/migration, site\nstatus, and user, tenant, healthcheck, circuit-breaker, and platform admin\noperations.\n\nIn this repository, `npm install` activates the checked-in Git hooks. Each\ncommit runs `cf-genai ci`, the same full verification command used by GitHub\nActions. Verification includes typechecking, source whitespace/unsafe-type\nchecks, compilation, unit tests, the example integration suite, export checks,\nand package assembly.\n\n```sh\ncf-genai status --env staging\ncf-genai d1 refresh local\ncf-genai d1 migrate production --confirm-production\ncf-genai d1 backup production --output ./backup.sql --confirm-production\ncf-genai admin features --env staging\ncf-genai admin users --env staging\ncf-genai tenant list --env staging\ncf-genai user get someone@example.com --env staging\ncf-genai healthchecks set llm:provider red --env staging\ncf-genai circuit-breakers set llm:provider tripped --env staging\n```\n\nSee [CLI.md](CLI.md) or run `cf-genai --help` for the complete command grammar. Credential loading\nstays outside the command, so a repository can continue to wrap it with\n`op run --env-file=.env.op --`. Destructive remote operations retain their\nexisting explicit confirmation flags.\n\n## Shared platform helpers\n\n`createWorker` can own `/health` and `/api/health`, and run a boot validator\nbefore requests. Use `assertBoot(env, { bindings: [\"DB\"], required:\n[\"AUTH_SESSION_SECRET\"] })` in a site initializer to fail closed when its\nCloudflare configuration is incomplete.\n\n\n## Core operational services\n\nThe package is organized by responsibility: `runtime` composes Workers,\n`core` owns operational primitives, `auth` owns identity and authorization,\n`api` owns route contracts and the browser client, `admin` owns platform\nadministration, and `ui` owns shared browser components. Core services have\nfocused package entrypoints: `/core/circuits`, `/core/healthchecks`,\n`/core/events`, `/core/jobs`, `/core/database`, and `/core/security`; request\nidentity is `/auth/identity`. Prefer these narrow imports when an app needs one\nconcern. The root package remains the application-composition surface.\n\nApply `migrations/0002_core.sql` and `migrations/0006_jobs.sql` after the authorization migration. The package exports `registerHealthcheck`, `updateHealthcheck`, `registerCircuitBreaker`, `setCircuitBreaker`, `evaluateCircuitBreaker`, and generic job lifecycle helpers from `/cf-genai-base`. Healthchecks use `red`, `yellow` (unknown/transient), or `green`; breakers use `off`, `tripped`, or `on`, with `any` or `all` healthcheck evaluation. Automated evaluation may only move `on` to `tripped`, or self-healing `tripped` to `on`; admin API writes are the human control plane for the `off` state.\n\nAdmin APIs are `GET /api/admin/healthchecks`, `GET|PUT /api/admin/healthchecks/:id`, `GET /api/admin/circuit-breakers`, `GET|PUT /api/admin/circuit-breakers/:id`, and `GET /api/admin/features`. Reads require `operations:read`; mutations require `operations:manage`, while platform administrators bypass capability checks. React platform components provide both catalog and detail views. The catalog lists each installed runtime feature, its `packageName` and `version`, its most severe healthcheck state, all feature healthchecks, and its circuit breakers. Use `createD1(env, { who })` for downstream D1 calls; it emits EventLog and AuditLog records with the requesting actor.\n\n\n## User administration\n\nApply `migrations/0004_tenants.sql` after the authorization migration to add\ntenant membership and subscriptions. It creates the `Easley Family` tenant,\nthe `VIP` subscription, associates them, migrates all existing users into the\ntenant, and keeps newly provisioned users attached to it.\n\nUse the selected D1 target (local by default) to inspect and update users:\n\n    cf-genai user list --target local\n    cf-genai user get someone.com --target staging\n    cf-genai user update someone.com --roles admin --target production\n\n`user:get` also reports scopes, groups, and tenant memberships. The shared admin UI provides list and detail views and atomically replaces a user’s complete access assignment through `PUT /api/admin/users/:id/access`; individual relationship endpoints remain available. The admin API also exposes `GET /api/admin/users/:id`, `GET|POST /api/admin/tenants`, and `GET|PUT|PATCH|DELETE /api/admin/tenants/:id`. The default tenant cannot be deleted, and other tenants must first have no users, subscriptions, or messaging conversations. Tenant deletion also requires an `X-Confirm-Delete` header equal to the tenant ID. Production commands should be run through the repository credentials wrapper and reviewed as an administrative change.\n\n## Scoped data access\n\nDomains may register D1 resources with `dataResources` and receive the\nscoped reader on the request state as `state.data`. Resources declare `user`,\n`tenant`, `public`, or `system` scope, their physical table, and an explicit column\nallowlist. Use `state.data.tenant`, `state.data.public`, `state.data.user`, or\n`state.data.system`;\nthe reader applies ownership predicates, supports bounded native pagination via\npage with limit/offset, count, and safe bulk updateWhere/deleteWhere\noperations, and never accepts raw SQL. Resources can explicitly restrict\ntheir operations to read, create, update, and delete, require capabilities per\noperation with `operationScopes`, and protect columns with `columnScopes`.\n\nAnonymous tenant reads require both publicTenantId on createWorker and a\nresource-level publicRead declaration. Use publicRead true only when the\nwhole resource is public; for opt-in rows use a publicRead column/value\ndeclaration such as visibility=public. Anonymous reads never grant anonymous\nsystem access. A `public` resource is read-only and always predicates on the\nworker's `publicTenantId`, including authenticated users; use it for shared\ncatalog data such as GTA's `gta-public` tenant.\n\nApplications register `new AuthSubscriptionsDomain(manifest)` in\n`defineApp({ domains })` to own their subscription IDs and entitlement values.\nThat domain exposes catalog/detail APIs at `/api/admin/subscriptions` and tenant\nassignment at `/api/admin/tenants/:id/subscriptions`. Base also exposes\nrequireSubscription and requireEntitlement but does not know any\nproduct-specific subscription such as VIP. Authenticated users can inspect\ntheir validated active tenant at GET /api/tenant.\n\nAdministrators can start a short-lived, HttpOnly impersonation session with\nPOST /api/admin/users/:id/impersonate and clear it with\nPOST /api/admin/impersonate/clear. Impersonation affects scoped data context\nonly and does not grant the target user administrator permissions.\n\nThe messaging store derives user senders from the scoped reader context and\nlimits conversations to their creator, participants, and system actors.\nCreator-only operations manage participants, titles, messages, and deletion.\nTrusted host adapters without an actor context remain responsible for their\nown authorization.\n\nFor example, a tenant-owned resource registers its `tenant_id` column with\nbase, while feature code calls `state.data.tenant.list(\"recipes\")` without\npassing a tenant ID. The active tenant must be a validated membership. A\nresource used with the wrong scope returns no rows; writes fail closed.\n\nApplications using scoped data must stop passing unrestricted `env.DB` to\ndomain features. Their migrations still add and backfill ownership columns,\nand their resources must be registered with base.\n\nRequest handlers receive a request-scoped environment containing `data`,\n`user`, `authUser`, `userId`, `context`, `event`, and an audited D1 binding.\nCall `await env.event(\"thing.happened\", \"domain\", details)` to emit a\nnormalized event. Features may provide `eventHandler(event, { env, ctx })`;\nthis is the extension point for feature integrations.\n\nLong-running features can call `dispatchJob` with a Cloudflare Workflow binding;\nbase creates the durable record first and passes its ID to the Workflow as\n`params.jobId`. Workflow code calls `executeJob`, which supplies a progress\nreporter and completes or fails the record. `runJob` is the same lifecycle for\nwork already executing in the current invocation. Lower-level features may call\n`createJob`, `startJob`, `updateJobProgress`, `completeJob`, `failJob`, and\n`cancelJob` directly. Every lifecycle change is stored in `core_job_events` and emitted\nto the owning user's live event room. Configure the optional live transport by\nexporting `EventHub` from `@agilesyndrome/cf-genai-base/event-hub` and binding\nan `EVENT_HUB` Durable Object in the application Worker. The React package's\n`LiveEventsProvider`, `useJob`, `useJobs`, and `JobNotificationList` handle\nreconnects and refreshes; the feature remains responsible for its own Workflow,\njob type, executor, and result UI.\n\nThe exported `Event`, `emitEvent`, `requestContext`, `userId`, `sameOrigin`,\n`readJson`, `secureJson`, `featureCircuit`, and `requireFeatureCircuit` helpers\nare the shared identity, request, security, and feature-gating contracts.\n\nThe layered web surface is React-first: `/api` exports route contracts, scoped\nrepositories, the browser `apiFetch`/`apiJson` client, and job/event endpoints;\n`/ui` exports React admin primitives, live event hooks, and durable job\nnotifications. Repositories are registered by `AppDomain` instances in\n`defineApp({ domains })` or `feature.domains`; they may declare links to other\nrepositories while remaining behind the scoped data reader. `GET /api/jobs`\nand `GET /api/jobs/:id` expose an authenticated\nuser's durable job records. `GET /api/events` upgrades to the authenticated live\nevent stream when the optional `EVENT_HUB` Durable Object binding is configured.\n","readmeFilename":"README.md"}