{"_id":"@bendyline/gezel-app-sdk","_rev":"15-1a99f05395253f3aab0dbc7c49c5a639","name":"@bendyline/gezel-app-sdk","dist-tags":{"latest":"1.1.2"},"versions":{"0.1.0":{"name":"@bendyline/gezel-app-sdk","version":"0.1.0","keywords":["gezel","ai","agents","local-first","sdk","embedding"],"author":{"name":"Bendyline","email":"support@bendyline.com"},"license":"MIT","_id":"@bendyline/gezel-app-sdk@0.1.0","maintainers":[{"name":"bendylinesupport","email":"admin@bendyline.com"}],"homepage":"https://github.com/bendyline/gezel","bugs":{"url":"https://github.com/bendyline/gezel/issues"},"dist":{"shasum":"820477911ca8a38c2af5fbe5fa154e01f225b199","tarball":"https://registry.npmjs.org/@bendyline/gezel-app-sdk/-/gezel-app-sdk-0.1.0.tgz","fileCount":8,"integrity":"sha512-vD6kj/PLPGgDGHz+ET83Ry1vAtj76T0XWKFqhGw6/93judQGuZ2xkKeooPGMMUgxTa4CDfn+bgBJp0hfOD7xBg==","signatures":[{"sig":"MEUCIQC3oFw2R+yoEuSqoqhBpUMRMV9jX5ni+nFEgLqH+66n8wIgL+tjcOCPYZA+x7luC/NovUVWZzK6oPDiMyHNU40NdoI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":63479},"main":"./dist/index.js","type":"module","_from":"file:bendyline-gezel-app-sdk-0.1.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=24.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","clean":"rm -rf dist .turbo","typecheck":"tsc --noEmit"},"_npmUser":{"name":"bendylinesupport","email":"admin@bendyline.com"},"_resolved":"/Volumes/Bendyline/gh/gezel/artifacts/npm-candidates/bendyline-gezel-app-sdk-0.1.0.tgz","_integrity":"sha512-vD6kj/PLPGgDGHz+ET83Ry1vAtj76T0XWKFqhGw6/93judQGuZ2xkKeooPGMMUgxTa4CDfn+bgBJp0hfOD7xBg==","repository":{"url":"git+https://github.com/bendyline/gezel.git","type":"git","directory":"packages/app-sdk"},"_npmVersion":"11.16.0","description":"Public SDK for building third-party local apps against gezel — discovery, consent, OpenAI-shaped chat, ensure-model.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"undici":"8.9.0","@bendyline/gezel-client":"0.1.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^4.1.10","typescript":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/gezel-app-sdk_0.1.0_1786456828861_0.1537580541486958","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@bendyline/gezel-app-sdk","version":"1.0.0","keywords":["gezel","ai","agents","local-first","sdk","embedding"],"author":{"name":"Bendyline","email":"support@bendyline.com"},"license":"MIT","_id":"@bendyline/gezel-app-sdk@1.0.0","maintainers":[{"name":"bendylinesupport","email":"admin@bendyline.com"}],"homepage":"https://github.com/bendyline/gezel","bugs":{"url":"https://github.com/bendyline/gezel/issues"},"dist":{"shasum":"259f6346453cc8cd32c07461b87c91eab4bce557","tarball":"https://registry.npmjs.org/@bendyline/gezel-app-sdk/-/gezel-app-sdk-1.0.0.tgz","fileCount":8,"integrity":"sha512-xA6pG/8FER9ChDLTk39jORCF2c4XbRDeo+Du1naIQ33jxiOYe7o2kcFt42wfyjhy5fRfLm69nf2EqPfnXKD2Hw==","signatures":[{"sig":"MEUCIENSSK5pTv9DV31z3/P3gF2a/kTlnkaWdvBYsNE/AgmlAiEA+RL3L4QFlpgs1qOtJPXQBuoxYg1trkNu9eKhHhilor8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bendyline%2fgezel-app-sdk@1.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":63479},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=24.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","clean":"rm -rf dist .turbo","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1e9e4430-eb89-49e9-903c-e137b27a264b"}},"repository":{"url":"git+https://github.com/bendyline/gezel.git","type":"git","directory":"packages/app-sdk"},"description":"Public SDK for building third-party local apps against gezel — discovery, consent, OpenAI-shaped chat, ensure-model.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"undici":"8.9.0","@bendyline/gezel-client":"1.0.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^4.1.10","typescript":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/gezel-app-sdk_1.0.0_1786547334756_0.6541192236870084","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@bendyline/gezel-app-sdk","version":"1.0.1","keywords":["gezel","ai","agents","local-first","sdk","embedding"],"author":{"name":"Bendyline","email":"support@bendyline.com"},"license":"MIT","_id":"@bendyline/gezel-app-sdk@1.0.1","maintainers":[{"name":"bendylinesupport","email":"admin@bendyline.com"}],"homepage":"https://github.com/bendyline/gezel","bugs":{"url":"https://github.com/bendyline/gezel/issues"},"dist":{"shasum":"8f18f570e8fcdfbde1dcc254057010cf827897ef","tarball":"https://registry.npmjs.org/@bendyline/gezel-app-sdk/-/gezel-app-sdk-1.0.1.tgz","fileCount":8,"integrity":"sha512-Gbz7l9BvAeibPDyh1xtxlHkY59+eeeFehs0GeiEHj0z5AxyjAYtl+TitoxgVwYWXPUtbyf1obVdJMfQMIyRjsw==","signatures":[{"sig":"MEYCIQCKNZ1ZktAitki0t9uf/kA/9/sDAiNSc3ySBLt+4czf4QIhAOFAmV/xjrKd5lpgRdqYs3sAyn6AuxXBIgRajVyzd7Vs","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bendyline%2fgezel-app-sdk@1.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":63479},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=24.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","clean":"rm -rf dist .turbo","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1e9e4430-eb89-49e9-903c-e137b27a264b"}},"repository":{"url":"git+https://github.com/bendyline/gezel.git","type":"git","directory":"packages/app-sdk"},"description":"Public SDK for building third-party local apps against gezel — discovery, consent, OpenAI-shaped chat, ensure-model.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"undici":"8.9.0","@bendyline/gezel-client":"1.0.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^4.1.10","typescript":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/gezel-app-sdk_1.0.1_1786598199910_0.918100466728214","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@bendyline/gezel-app-sdk","version":"1.0.2","keywords":["gezel","ai","agents","local-first","sdk","embedding"],"author":{"name":"Bendyline","email":"support@bendyline.com"},"license":"MIT","_id":"@bendyline/gezel-app-sdk@1.0.2","maintainers":[{"name":"bendylinesupport","email":"admin@bendyline.com"}],"homepage":"https://github.com/bendyline/gezel","bugs":{"url":"https://github.com/bendyline/gezel/issues"},"dist":{"shasum":"47693080fa07a7fe2907a10fb349bba443865e8b","tarball":"https://registry.npmjs.org/@bendyline/gezel-app-sdk/-/gezel-app-sdk-1.0.2.tgz","fileCount":8,"integrity":"sha512-dAxU5zSSYH7dDaCcDr+JYHjBOpGCzuL1whCeF6WR7yShr5TG91g2KCNHltLfZoWkYa9RVZWRirUXIhcXW6A+xA==","signatures":[{"sig":"MEUCIQCHG3MtE/qGuHFG3U9YGqMp1FKfPpZIS3IW6yz/0PxQ+AIgIprTMtzUHGrik9sN5G4ykU7qfGUfwW52fJcVy1/CM+0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bendyline%2fgezel-app-sdk@1.0.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":63479},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=24.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","clean":"rm -rf dist .turbo","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1e9e4430-eb89-49e9-903c-e137b27a264b"}},"repository":{"url":"git+https://github.com/bendyline/gezel.git","type":"git","directory":"packages/app-sdk"},"description":"Public SDK for building third-party local apps against gezel — discovery, consent, OpenAI-shaped chat, ensure-model.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"undici":"8.9.0","@bendyline/gezel-client":"1.0.2"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^4.1.10","typescript":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/gezel-app-sdk_1.0.2_1786628676794_0.891252168398678","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@bendyline/gezel-app-sdk","version":"1.0.3","keywords":["gezel","ai","agents","local-first","sdk","embedding"],"author":{"name":"Bendyline","email":"support@bendyline.com"},"license":"MIT","_id":"@bendyline/gezel-app-sdk@1.0.3","maintainers":[{"name":"bendylinesupport","email":"admin@bendyline.com"}],"homepage":"https://github.com/bendyline/gezel","bugs":{"url":"https://github.com/bendyline/gezel/issues"},"dist":{"shasum":"659dca6de9f561588bc820f5bc79a2917c215df3","tarball":"https://registry.npmjs.org/@bendyline/gezel-app-sdk/-/gezel-app-sdk-1.0.3.tgz","fileCount":8,"integrity":"sha512-7GomaRmWcyYpPM2Sbvn5r6Gbp1lsQB8nfM45WlDkl4Y5STtDhUl7i20uUvE2fahyZI2sNtNkh4uT1uBAyJuyVg==","signatures":[{"sig":"MEQCIHDhkT+FsfuurqMX0VhfWcOlPibSuFhjy3JmCza8oVs0AiBT7fpb5CxsmBUs94XBYK/TFF467YDRE01Vxy+Y7yWdCA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bendyline%2fgezel-app-sdk@1.0.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":63479},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=24.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","clean":"rm -rf dist .turbo","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1e9e4430-eb89-49e9-903c-e137b27a264b"}},"repository":{"url":"git+https://github.com/bendyline/gezel.git","type":"git","directory":"packages/app-sdk"},"description":"Public SDK for building third-party local apps against gezel — discovery, consent, OpenAI-shaped chat, ensure-model.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"undici":"8.9.0","@bendyline/gezel-client":"1.0.3"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^4.1.10","typescript":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/gezel-app-sdk_1.0.3_1786716851504_0.6967335448717693","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@bendyline/gezel-app-sdk","version":"1.0.4","keywords":["gezel","ai","agents","local-first","sdk","embedding"],"author":{"name":"Bendyline","email":"support@bendyline.com"},"license":"MIT","_id":"@bendyline/gezel-app-sdk@1.0.4","maintainers":[{"name":"bendylinesupport","email":"admin@bendyline.com"}],"homepage":"https://github.com/bendyline/gezel","bugs":{"url":"https://github.com/bendyline/gezel/issues"},"dist":{"shasum":"0f1f45665bc52f3cb3b1369ac77a586376835842","tarball":"https://registry.npmjs.org/@bendyline/gezel-app-sdk/-/gezel-app-sdk-1.0.4.tgz","fileCount":8,"integrity":"sha512-IN8hmPQlJoBimZxhGjgmywvvX636+Z/bV73cuUe+ZPJZC2ylC3THU8uqZYbyrY+PFjv9ry9fE0vBvESmL9OdkQ==","signatures":[{"sig":"MEUCIQClYSDkm+iZ87WuQFAxjXZmxGplhxke0aGL12yxSSmMkAIgIkUH3i678rutcr/wdpNP6mIp5KkfRCCNaOIbMgRol38=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bendyline%2fgezel-app-sdk@1.0.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":63479},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=24.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","clean":"rm -rf dist .turbo","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1e9e4430-eb89-49e9-903c-e137b27a264b"}},"repository":{"url":"git+https://github.com/bendyline/gezel.git","type":"git","directory":"packages/app-sdk"},"description":"Public SDK for building third-party local apps against gezel — discovery, consent, OpenAI-shaped chat, ensure-model.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"undici":"8.9.0","@bendyline/gezel-client":"1.0.4"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^4.1.10","typescript":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/gezel-app-sdk_1.0.4_1786740999339_0.27729955161294595","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@bendyline/gezel-app-sdk","version":"1.0.5","keywords":["gezel","ai","agents","local-first","sdk","embedding"],"author":{"name":"Bendyline","email":"support@bendyline.com"},"license":"MIT","_id":"@bendyline/gezel-app-sdk@1.0.5","maintainers":[{"name":"bendylinesupport","email":"admin@bendyline.com"}],"homepage":"https://github.com/bendyline/gezel","bugs":{"url":"https://github.com/bendyline/gezel/issues"},"dist":{"shasum":"25c92f47f372aababe4838d54310001816bf8323","tarball":"https://registry.npmjs.org/@bendyline/gezel-app-sdk/-/gezel-app-sdk-1.0.5.tgz","fileCount":8,"integrity":"sha512-ycJBFDwDJ/POPS9t9+LM9rww8PeKt3HdUJ0sm/A8rP5R9M/2I05w6fr7XMJKYHoj8tOhNpUiC7iyjk6HPYKhSA==","signatures":[{"sig":"MEUCIBlr/uLGsld5tn1lyxPWVy8EeWS+8meM1rWnp/pULvv5AiEAoqpEx8eTsUzgz58MAoLL8BTQVYBqxrsY/EKufHkmy8U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bendyline%2fgezel-app-sdk@1.0.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":63479},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=24.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","clean":"rm -rf dist .turbo","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1e9e4430-eb89-49e9-903c-e137b27a264b"}},"repository":{"url":"git+https://github.com/bendyline/gezel.git","type":"git","directory":"packages/app-sdk"},"description":"Public SDK for building third-party local apps against gezel — discovery, consent, OpenAI-shaped chat, ensure-model.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"undici":"8.9.0","@bendyline/gezel-client":"1.0.5"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^4.1.10","typescript":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/gezel-app-sdk_1.0.5_1786806706964_0.7633590734989917","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"@bendyline/gezel-app-sdk","version":"1.0.6","keywords":["gezel","ai","agents","local-first","sdk","embedding"],"author":{"name":"Bendyline","email":"support@bendyline.com"},"license":"MIT","_id":"@bendyline/gezel-app-sdk@1.0.6","maintainers":[{"name":"bendylinesupport","email":"admin@bendyline.com"}],"homepage":"https://github.com/bendyline/gezel","bugs":{"url":"https://github.com/bendyline/gezel/issues"},"dist":{"shasum":"2a88aae101cbb6f8738dbf1df68987f7bd6acd86","tarball":"https://registry.npmjs.org/@bendyline/gezel-app-sdk/-/gezel-app-sdk-1.0.6.tgz","fileCount":8,"integrity":"sha512-KuDA4Ae/uAhMsGlcz1yGdVC3u6hn0h1q9WOc2dH/oqN1jLVmegD5u4vce35u00yLcOYeOZVkeTSj+37ApvQlCg==","signatures":[{"sig":"MEUCIE2loLvvqWzr1iHJSUAvKRnoyI1qBf9axsoTS6g82Fr/AiEA1z5+ieP/beH8fPO9iNOLGHdCmGYyhjCBWbVZZ4bG/40=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bendyline%2fgezel-app-sdk@1.0.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":63479},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=24.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","clean":"rm -rf dist .turbo","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1e9e4430-eb89-49e9-903c-e137b27a264b"}},"repository":{"url":"git+https://github.com/bendyline/gezel.git","type":"git","directory":"packages/app-sdk"},"description":"Public SDK for building third-party local apps against gezel — discovery, consent, OpenAI-shaped chat, ensure-model.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"undici":"8.9.0","@bendyline/gezel-client":"1.0.6"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^4.1.10","typescript":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/gezel-app-sdk_1.0.6_1787150913390_0.799224732300791","host":"s3://npm-registry-packages-npm-production"}},"1.0.7":{"name":"@bendyline/gezel-app-sdk","version":"1.0.7","keywords":["gezel","ai","agents","local-first","sdk","embedding"],"author":{"name":"Bendyline","email":"support@bendyline.com"},"license":"MIT","_id":"@bendyline/gezel-app-sdk@1.0.7","maintainers":[{"name":"bendylinesupport","email":"admin@bendyline.com"}],"homepage":"https://github.com/bendyline/gezel","bugs":{"url":"https://github.com/bendyline/gezel/issues"},"dist":{"shasum":"a3c07595827933e30b38821d38e40f84a03b675d","tarball":"https://registry.npmjs.org/@bendyline/gezel-app-sdk/-/gezel-app-sdk-1.0.7.tgz","fileCount":8,"integrity":"sha512-L8HeWbAMXJapLLrAg689cKbhcRHllx3SfqTv4cqLPW7Nsw3UHAbYcOl1RnJwChkwCYzQIPJtoGf4vRndb0uKKQ==","signatures":[{"sig":"MEUCIQCByPkigFbBKgEG2hrPAguZJrHfjuIoSVRJyzyoqQo2DgIgT2Mq7eoheEaSnVRvbxJtUTZL2CZNhEg0fenHXCvdYv0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bendyline%2fgezel-app-sdk@1.0.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":63479},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=24.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","clean":"rm -rf dist .turbo","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1e9e4430-eb89-49e9-903c-e137b27a264b"}},"repository":{"url":"git+https://github.com/bendyline/gezel.git","type":"git","directory":"packages/app-sdk"},"description":"Public SDK for building third-party local apps against gezel — discovery, consent, OpenAI-shaped chat, ensure-model.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"undici":"8.9.0","@bendyline/gezel-client":"1.0.7"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^4.1.10","typescript":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/gezel-app-sdk_1.0.7_1788305194832_0.3767833045799287","host":"s3://npm-registry-packages-npm-production"}},"1.0.8":{"name":"@bendyline/gezel-app-sdk","version":"1.0.8","keywords":["gezel","ai","agents","local-first","sdk","embedding"],"author":{"name":"Bendyline","email":"support@bendyline.com"},"license":"MIT","_id":"@bendyline/gezel-app-sdk@1.0.8","maintainers":[{"name":"bendylinesupport","email":"admin@bendyline.com"}],"homepage":"https://github.com/bendyline/gezel","bugs":{"url":"https://github.com/bendyline/gezel/issues"},"dist":{"shasum":"98fc79026953b70c327e730dd9a9e09f9f04750b","tarball":"https://registry.npmjs.org/@bendyline/gezel-app-sdk/-/gezel-app-sdk-1.0.8.tgz","fileCount":8,"integrity":"sha512-CZn7K5di62BnQ76YHXOHspdk5DUFaD1iMClx3yLVgzJ+fm85G/K4LFDunrEVnuCWss1a7rEFweao7DptgQGcBg==","signatures":[{"sig":"MEUCIEruYLy8HgtO8DmqZ3okiVvNSjuDpQ52FbbuxHO85Dx5AiEAk143KBpTgniBAtDnv583bzcjcrPI+NhZsyZAgkGLXE0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bendyline%2fgezel-app-sdk@1.0.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":63479},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=24.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","clean":"rm -rf dist .turbo","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1e9e4430-eb89-49e9-903c-e137b27a264b"}},"repository":{"url":"git+https://github.com/bendyline/gezel.git","type":"git","directory":"packages/app-sdk"},"description":"Public SDK for building third-party local apps against gezel — discovery, consent, OpenAI-shaped chat, ensure-model.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"undici":"8.9.0","@bendyline/gezel-client":"1.1.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^4.1.10","typescript":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/gezel-app-sdk_1.0.8_1788585379169_0.1728848422732061","host":"s3://npm-registry-packages-npm-production"}},"1.0.9":{"name":"@bendyline/gezel-app-sdk","version":"1.0.9","keywords":["gezel","ai","agents","local-first","sdk","embedding"],"author":{"name":"Bendyline","email":"support@bendyline.com"},"license":"MIT","_id":"@bendyline/gezel-app-sdk@1.0.9","maintainers":[{"name":"bendylinesupport","email":"admin@bendyline.com"}],"homepage":"https://github.com/bendyline/gezel","bugs":{"url":"https://github.com/bendyline/gezel/issues"},"dist":{"shasum":"095335336c192894e31351e30cf67fac09a9a10f","tarball":"https://registry.npmjs.org/@bendyline/gezel-app-sdk/-/gezel-app-sdk-1.0.9.tgz","fileCount":8,"integrity":"sha512-CCW5fjnRTk9LYtI7eBJ+P1y6XROQe2v0TXRWvfZU278/5CRGq1FpEdJfDVipaVpJTlkl5EGXNRuF5EC5wZp/eg==","signatures":[{"sig":"MEUCIECdBUXmMukohcQav8WFrHTLBfoXEoz0UFuhU+oCSrwRAiEAjkdhxEfWy61egFe12TJjlioxOxsLVWI+BeoM35x635c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bendyline%2fgezel-app-sdk@1.0.9","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":65010},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=24.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","clean":"rm -rf dist .turbo","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1e9e4430-eb89-49e9-903c-e137b27a264b"}},"repository":{"url":"git+https://github.com/bendyline/gezel.git","type":"git","directory":"packages/app-sdk"},"description":"Public SDK for building third-party local apps against gezel — discovery, consent, OpenAI-shaped chat, ensure-model.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"undici":"8.9.0","@bendyline/gezel-client":"1.1.1"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^4.1.10","typescript":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/gezel-app-sdk_1.0.9_1788873540606_0.8502376631199178","host":"s3://npm-registry-packages-npm-production"}},"1.0.10":{"name":"@bendyline/gezel-app-sdk","version":"1.0.10","keywords":["gezel","ai","agents","local-first","sdk","embedding"],"author":{"name":"Bendyline","email":"support@bendyline.com"},"license":"MIT","_id":"@bendyline/gezel-app-sdk@1.0.10","maintainers":[{"name":"bendylinesupport","email":"admin@bendyline.com"}],"homepage":"https://github.com/bendyline/gezel","bugs":{"url":"https://github.com/bendyline/gezel/issues"},"dist":{"shasum":"399825427a7d1bb43cfc685f2809c8dc0ce0b150","tarball":"https://registry.npmjs.org/@bendyline/gezel-app-sdk/-/gezel-app-sdk-1.0.10.tgz","fileCount":14,"integrity":"sha512-uFVcwE+XLNb9CkGcyiEFHEA8e4qkwd5om6IMhKYdocAt/BluXbD3TwBZiZ0iuu5pqOJtxeqBevyqxEWtvy5q+w==","signatures":[{"sig":"MEUCIQC40ciDdD0M8TRcFX4VJYd2MKmBWWpYYOrWWoXLGZGTtgIgcU0WBXZGbSNWMjJlzWVFXT8iriFkujVFToZaS4c4q3k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDw3CWhtH5Gn/2+Ownr9noc7+W7zPu3Jm+yKQ7KXixRmwIgJ8YGnf+w0TxS1kEsUryG6CR7E2TBRaZQBfNQJ8MAdIs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bendyline%2fgezel-app-sdk@1.0.10","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":161553},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=24.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./host":{"types":"./dist/host.d.ts","import":"./dist/host.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.js"},"./advanced":{"types":"./dist/advanced.d.ts","import":"./dist/advanced.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","clean":"rm -rf dist .turbo","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1e9e4430-eb89-49e9-903c-e137b27a264b"}},"repository":{"url":"git+https://github.com/bendyline/gezel.git","type":"git","directory":"packages/app-sdk"},"description":"Public SDK for building third-party local apps against gezel — discovery, consent, OpenAI-shaped chat, ensure-model, custom app tools, and in-process hosting.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"undici":"8.9.0","@bendyline/gezel-client":"1.1.2"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^4.1.10","typescript":"^6.0.3","@bendyline/gezel-service":"1.1.2"},"peerDependencies":{"@bendyline/gezel-service":"1.1.2"},"peerDependenciesMeta":{"@bendyline/gezel-service":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/gezel-app-sdk_1.0.10_1789773061516_0.1422893130608318","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@bendyline/gezel-app-sdk","version":"1.1.0","keywords":["gezel","ai","agents","local-first","sdk","embedding"],"author":{"name":"Bendyline","email":"support@bendyline.com"},"license":"MIT","_id":"@bendyline/gezel-app-sdk@1.1.0","maintainers":[{"name":"bendylinesupport","email":"admin@bendyline.com"}],"homepage":"https://github.com/bendyline/gezel","bugs":{"url":"https://github.com/bendyline/gezel/issues"},"dist":{"shasum":"d87015c44da3cf14feec5f2dc58f90bc449f980f","tarball":"https://registry.npmjs.org/@bendyline/gezel-app-sdk/-/gezel-app-sdk-1.1.0.tgz","fileCount":13,"integrity":"sha512-EVmlulTWu/KPWJLkrmx356BiQ+Fl12Ty1MD4fBU1jy8aoR1g3fw4M76wO2pOlTxBfcvWzuUEuo1vfCRh2o0L3g==","signatures":[{"sig":"MEUCIQDzMGvdU0csn8X7V45aqoRzuDNbhB9kaUL5ZhaHafJtYAIgIlPX5cKqghVXZgts56JwkL9Z0hGkTOdM1B7u13z9LO8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIFevK84SUiLrrKV66oOjbOJEvIQ5/oGNsKuvka6jb+SzAiEA7RiNTAEf51YfyXBG3EfZ+c6J47JeldAsWsFWOTR50jo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bendyline%2fgezel-app-sdk@1.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":180647},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=24.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./host":{"types":"./dist/host.d.ts","import":"./dist/host.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.js"},"./advanced":{"types":"./dist/advanced.d.ts","import":"./dist/advanced.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","clean":"rm -rf dist .turbo","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"1e9e4430-eb89-49e9-903c-e137b27a264b"}},"repository":{"url":"git+https://github.com/bendyline/gezel.git","type":"git","directory":"packages/app-sdk"},"description":"Public SDK for building third-party local apps against gezel — discovery, consent, OpenAI-shaped chat, ensure-model, custom app tools, and in-process hosting.","directories":{},"_nodeVersion":"24.21.0","dependencies":{"undici":"8.11.2","@bendyline/gezel-client":"1.2.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^4.1.10","typescript":"^6.0.3","@bendyline/gezel-service":"1.2.0"},"peerDependencies":{"@bendyline/gezel-service":"1.2.0"},"peerDependenciesMeta":{"@bendyline/gezel-service":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/gezel-app-sdk_1.1.0_1790787016031_0.10985128493171703","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@bendyline/gezel-app-sdk","version":"1.1.1","keywords":["gezel","ai","agents","local-first","sdk","embedding"],"author":{"name":"Bendyline","email":"support@bendyline.com"},"license":"MIT","_id":"@bendyline/gezel-app-sdk@1.1.1","maintainers":[{"name":"bendylinesupport","email":"admin@bendyline.com"}],"homepage":"https://github.com/bendyline/gezel","bugs":{"url":"https://github.com/bendyline/gezel/issues"},"dist":{"shasum":"41e5b03198141e10f6bb51bd39cdf798611d03e5","tarball":"https://registry.npmjs.org/@bendyline/gezel-app-sdk/-/gezel-app-sdk-1.1.1.tgz","fileCount":13,"integrity":"sha512-RzMpUKdRjHSg5cgtma5Fh8IYmHv/dC1ZGRHUd+CMiF8iLPkkM2IF4e/v6YdZtY8sxBezbW5C9S/5Hg+Up43fog==","signatures":[{"sig":"MEYCIQClReU3Xlz0s8Gcu+AFi+5uqIMFN4FayNksQeMe9S3dcgIhAI5x9AmdtlscaAee//9O2g1C2afDAWq0d0dcKBoWE5NF","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDo2aBy38LVwlcLmQiFaqMDEfJRcPY1NoBIZ36Jub9gNAIgeFya/BnRpOPwUABUyhbpXA8JWX/iwy91BWPfNj1G69c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bendyline%2fgezel-app-sdk@1.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":181179},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=24.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./host":{"types":"./dist/host.d.ts","import":"./dist/host.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.js"},"./advanced":{"types":"./dist/advanced.d.ts","import":"./dist/advanced.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","clean":"rm -rf dist .turbo","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"1e9e4430-eb89-49e9-903c-e137b27a264b"}},"repository":{"url":"git+https://github.com/bendyline/gezel.git","type":"git","directory":"packages/app-sdk"},"description":"Public SDK for building third-party local apps against gezel — discovery, consent, OpenAI-shaped chat, ensure-model, custom app tools, and in-process hosting.","directories":{},"_nodeVersion":"24.21.0","dependencies":{"undici":"8.11.2","@bendyline/gezel-client":"1.2.1"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^4.1.10","typescript":"^6.0.3","@bendyline/gezel-service":"1.2.1"},"peerDependencies":{"@bendyline/gezel-service":"1.2.1"},"peerDependenciesMeta":{"@bendyline/gezel-service":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/gezel-app-sdk_1.1.1_1790896911444_0.8295337971215957","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"_id":"@bendyline/gezel-app-sdk@1.1.2","bugs":{"url":"https://github.com/bendyline/gezel/issues"},"dist":{"shasum":"5288927baf806e7a795c11a06527197c8ca72a2a","tarball":"https://registry.npmjs.org/@bendyline/gezel-app-sdk/-/gezel-app-sdk-1.1.2.tgz","fileCount":13,"integrity":"sha512-X+EwzNEA+lKSEpMKt+Di9U45nLcdg3JIPwZ976PWkzOymgaaelpUdcgwSQ9+ZiQ24hR50J43FUyAFZvDrl2WXg==","signatures":[{"sig":"MEQCIDDjMblN7DSJQEwg85itb0EOqzq68YMijv/LfV9arYzlAiAbsDZmFUhzoN/yKa4+dHW3+Kc/wiEsJlHdUJc3ojpbvA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCy9guhdeyFKC9Y4u16Gc44/gBwzL8GhnqfGY1DsB1BHwIgKYhH3Rnybw3BKOpCdVwg2cOd2OEszn0CoauyZCpyx7g="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bendyline%2fgezel-app-sdk@1.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":181711},"main":"./dist/index.js","name":"@bendyline/gezel-app-sdk","type":"module","types":"./dist/index.d.ts","author":{"name":"Bendyline","email":"support@bendyline.com"},"module":"./dist/index.js","engines":{"node":">=24.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./host":{"types":"./dist/host.d.ts","import":"./dist/host.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.js"},"./advanced":{"types":"./dist/advanced.d.ts","import":"./dist/advanced.js"}},"license":"MIT","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","clean":"rm -rf dist .turbo","typecheck":"tsc --noEmit"},"version":"1.1.2","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"1e9e4430-eb89-49e9-903c-e137b27a264b"}},"homepage":"https://github.com/bendyline/gezel","keywords":["gezel","ai","agents","local-first","sdk","embedding"],"repository":{"url":"git+https://github.com/bendyline/gezel.git","type":"git","directory":"packages/app-sdk"},"description":"Public SDK for building third-party local apps against gezel — discovery, consent, OpenAI-shaped chat, ensure-model, custom app tools, and in-process hosting.","directories":{},"maintainers":[{"name":"bendylinesupport","email":"admin@bendyline.com"}],"_nodeVersion":"24.21.0","dependencies":{"undici":"8.11.2","@bendyline/gezel-client":"1.2.2"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^4.1.10","typescript":"^6.0.3","@bendyline/gezel-service":"1.2.2"},"peerDependencies":{"@bendyline/gezel-service":"1.2.2"},"peerDependenciesMeta":{"@bendyline/gezel-service":{"optional":true}},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/gezel-app-sdk_1.1.2_1791002888165_0.06202923765761503"}}},"time":{"created":"2026-08-11T14:00:28.663Z","modified":"2026-10-03T04:48:08.596Z","0.1.0":"2026-08-11T14:00:29.011Z","1.0.0":"2026-08-12T15:08:54.927Z","1.0.1":"2026-08-13T05:16:40.081Z","1.0.2":"2026-08-13T13:44:36.965Z","1.0.3":"2026-08-14T14:14:11.672Z","1.0.4":"2026-08-14T20:56:39.486Z","1.0.5":"2026-08-15T15:11:47.107Z","1.0.6":"2026-08-19T14:48:33.543Z","1.0.7":"2026-09-01T23:26:34.939Z","1.0.8":"2026-09-05T05:16:19.296Z","1.0.9":"2026-09-08T13:19:00.739Z","1.0.10":"2026-09-18T23:11:01.626Z","1.1.0":"2026-09-30T16:50:16.119Z","1.1.1":"2026-10-01T23:21:51.538Z","1.1.2":"2026-10-03T04:48:08.264Z"},"bugs":{"url":"https://github.com/bendyline/gezel/issues"},"author":{"name":"Bendyline","email":"support@bendyline.com"},"license":"MIT","homepage":"https://github.com/bendyline/gezel","keywords":["gezel","ai","agents","local-first","sdk","embedding"],"repository":{"url":"git+https://github.com/bendyline/gezel.git","type":"git","directory":"packages/app-sdk"},"description":"Public SDK for building third-party local apps against gezel — discovery, consent, OpenAI-shaped chat, ensure-model, custom app tools, and in-process hosting.","maintainers":[{"name":"bendylinesupport","email":"admin@bendyline.com"}],"readme":"# @bendyline/gezel-app-sdk\n\nPublic SDK for building third-party local apps against [gezel](https://github.com/bendyline/gezel). Gives you discovery, user consent, and an OpenAI-compatible chat / embeddings / models / ensure-model client in under 50 lines.\n\n## Why\n\nIf you ship a desktop app and want to use the user's locally-installed models without re-implementing model management, runtime detection, and TLS pinning — point this SDK at gezel and you're done. Apps that already target OpenAI's chat API can use gezel as a drop-in via the OpenAI-shaped envelopes.\n\nIf your users may not have gezel at all, the [`/host`](#hosting-gezel-inside-your-app) entry runs one inside your own application, against a gezel home that belongs to your app. Same API either way.\n\n## Install\n\n```bash\nnpm install @bendyline/gezel-app-sdk\n```\n\nNode 24+. The Node entry uses `undici` to trust gezel's loopback TLS cert.\n\n## Quickstart\n\n```ts\nimport { detectGezel, connect } from '@bendyline/gezel-app-sdk';\n\n// Demo only: replace this with Keychain, Credential Manager, libsecret, etc.\nconst tokens = new Map<string, string>();\nconst tokenStorage = {\n  save(appId: string, token: string) { tokens.set(appId, token); },\n  load(appId: string) { return tokens.get(appId) ?? null; },\n  delete(appId: string) { tokens.delete(appId); },\n};\n\nconst status = await detectGezel();\nif (!status.installed) throw new Error('gezel not installed');\nif (!status.running) throw new Error('start the gezel app first');\n\nconst app = await connect({\n  appId: 'docblocks',\n  appName: 'DocBlocks',\n  scopes: ['openai'],\n  tokenStorage,\n});\n\n// Make sure the model is downloaded and warm.\nconst ensure = await app.ensureModel({\n  model: 'llama-cpp:gemma4-e2b-q4',\n});\nif (ensure.status === 'downloading') {\n  for await (const ev of app.streamEnsureEvents(ensure.job_id!)) {\n    if (ev.type === 'progress') {\n      console.log(`${ev.bytesWritten}/${ev.totalBytes} bytes`);\n    }\n  }\n}\n\n// Stream a chat completion.\nconst stream = await app.chat({\n  model: 'llama-cpp:gemma4-e2b-q4',\n  messages: [{ role: 'user', content: 'Hello!' }],\n  stream: true,\n});\nfor await (const chunk of stream) {\n  process.stdout.write(chunk.choices[0]?.delta?.content ?? '');\n}\n```\n\n## Consent flow\n\nThe first time your app calls `connect()` for a given `appId`, gezel shows a desktop consent dialog to the user. You'll see one of:\n\n- **Approved** — your app stores the issued token via `tokenStorage.save`. Subsequent runs (via `tokenStorage.load`) skip the dialog entirely.\n- **Denied** — `connect()` throws a `GezelSdkError` with `code: 'user_denied'`. Surface a clear \"User declined the gezel connection\" to your user.\n- **Timeout** — defaults to 120s. Override with `approvalTimeoutSec`. Throws `code: 'approval_timeout'`.\n\nGrants that can read or change Gezel product state require an additional\nrequester-visible code. Supply `onVerificationCode` and show the value in your\napplication; the user types it into Gezel's approval dialog:\n\n```ts\nawait connect({\n  appId: 'acme.gezel-tools',\n  appName: 'Acme Gezel Tools',\n  scopes: ['cli'],\n  onVerificationCode(code) {\n    console.error(`Enter ${code} in Gezel to approve this connection.`);\n  },\n});\n```\n\nThe daemon generates the six-character code, expires it with the grant after\nten minutes, and never sends it to the desktop approval surface. Inference-only\nscopes (`openai` and `remote-inference`) retain click approval without a code.\nInference-only clients can opt into the same stronger handshake by setting\n`requireVerificationCode: true` and providing `onVerificationCode`.\n\n## Product clients\n\n`authorizeLocal()` is the complete Node-native connection path when your\nintegration needs Gezel's product API rather than only the OpenAI-compatible\nfacade. It discovers the logged-in user's dynamic daemon port, pins that\ndaemon's per-launch TLS certificate, verifies any persisted token still has\nthe requested scopes, and otherwise performs registration, code delivery,\napproval polling, and token persistence:\n\n```ts\nimport { authorizeLocal } from '@bendyline/gezel-app-sdk';\nimport { GezelClient } from '@bendyline/gezel-client/node';\n\nconst authorized = await authorizeLocal({\n  appId: 'acme.editor',\n  appName: 'Acme Editor',\n  scopes: ['product', 'openai'],\n  onVerificationCode(code) {\n    showConnectionCode(code);\n  },\n  tokenStorage: keychainStorage,\n});\n\nconst client = new GezelClient(authorized);\n```\n\nThe normal path connects directly to the per-user daemon described by\n`~/.gezel/runtime`; it never connects to or bootstraps through a\n`machine-engine` broker on port 6228. The returned object contains only the\napp's scoped token plus non-sensitive daemon diagnostics. It never exposes the\ndaemon's first-party discovery credential.\n\nDuring a rolling upgrade, the SDK first probes the installed system service.\nIf that service declares `legacy-full` (or predates role publication), the SDK\nuses it as the temporary product endpoint so VS Code and Electron cannot show\ndifferent pre-migration projects. A `machine-engine` service is never treated\nas a product endpoint; the ladder continues to the per-user daemon.\n\n`authorize()` remains the transport-level primitive for callers that already\nresolved a base URL or do not need daemon diagnostics.\n\n### Optional native launcher\n\nOrdinary third-party apps should omit `daemon`: when Gezel is not running the\nSDK throws `daemon_not_running`, and the app should ask the user to start\nGezel. A native integration that deliberately bundles the matching `gezeld`\npackage can opt into safe start-if-missing behavior:\n\n```ts\nconst authorized = await authorizeLocal({\n  appId: 'acme.editor',\n  appName: 'Acme Editor',\n  scopes: ['product', 'openai'],\n  onVerificationCode: showConnectionCode,\n  tokenStorage: keychainStorage,\n  daemon: {\n    daemonEntry: bundledGezeldEntry,\n    spawnIfMissing: true,\n  },\n});\n```\n\nSDK-owned launches are always detached per-user daemons with\n`GEZEL_SERVICE_ROLE=user` and `GEZEL_PORT=0`. They therefore publish their\nactual dynamic address through the user's runtime directory and cannot race\nthe machine broker for port 6228. VS Code is the reference implementation of\nthis optional launcher path.\n\nGezel's own same-user desktop and CLI clients use `authorizeLocalOwner()`.\nThat narrowly named first-party surface adopts or starts the same user daemon\nbut returns its rotating runtime `ui` credential without opening a Connected\nApps consent request, so a headless CLI never waits for a desktop approval UI.\nThird-party integrations must use `authorizeLocal()`; do not use the owner\nsurface as an app-consent bypass.\n\nGezel's own add-ins (Office, LibreOffice, VS Code) pass `gezelAddIn: true` to\n`authorizeLocal()`. On the user's own daemon the SDK then trades the owner\ncredential it read during discovery for the add-in's own, narrower grant\ninstead of asking for a connection code, and never returns the owner\ncredential. A configured `baseUrl` or a legacy machine service still consents,\nand the daemon refuses the exchange for any app id that is not a Gezel add-in,\nso the option does nothing for third-party apps. See ADR 0018 in the Gezel\nrepository.\n\nUse `product` for ordinary stateful product access and add `openai` only when\nthe same app also calls the OpenAI-compatible inference routes. `product` does\nnot grant first-party administration of other app connections.\n\nFor CI / scripted environments, the gezel daemon honors `GEZEL_AUTOAPPROVE_APPS=appId1,appId2` and auto-approves listed apps at registration time.\n\n## Hosting gezel inside your app\n\n`connect()` needs a gezel the user already runs. When your app should work whether or not they have one, use the host entry: it connects to their gezel if it is there, and otherwise starts one in your own process.\n\n```ts\nimport { connectOrHost } from '@bendyline/gezel-app-sdk/host';\n\nconst gezel = await connectOrHost({\n  appId: 'acme.travel',\n  appName: 'Acme Travel',\n  // Hosting is opt-in. Without `host`, a missing gezel is still an error.\n  host: { mode: 'in-process', inferenceOnly: true },\n});\n\n// Engine binary, weights, and the default-model pin, in one call.\nawait gezel.ensureModel({ model: 'gemma4-e2b-q4' });\n\n// Project folder, crew, scripts and seeds from a .gezapp you ship.\nconst project = await gezel.ensureProject({\n  package: '/opt/acme/travel.gezapp',\n  folder: '/Users/me/Travel',\n});\n\nconst chat = await project.openChat({ role: 'travel-guide' });\nfor await (const event of chat.send('Where should I eat in Utrecht?')) {\n  if (event.type === 'delta') process.stdout.write(event.content);\n}\n\nawait gezel.close();\n```\n\n`Gezel` is the central object: the connection, the models, and the projects. Most work then happens in a `GezelProject`, because chats and app tools are both project-scoped — having the project means never passing its id back in. Everything after `connectOrHost` is identical whether the daemon is the user's or yours, so application code never branches on it; read `gezel.mode` if you want to tell.\n\n`ensureProject` returns the project it created. Pass no `package` and it simply binds the folder to a project, which is all an app that ships no `.gezapp` needs. For a project that already exists — one an earlier run made, or one the person made themselves — use `gezel.openProject(id)`.\n\n### What hosting does\n\n- **Its own home.** State goes under `~/.gezel/apps/<appId>/`, never the user's `~/.gezel` runtime. Your app's projects and gezels stay out of their workshop, and your daemon can never be restarted out from under you by the gezel desktop app.\n- **Their models, read-only.** Models the user already installed are found through a read-only overlay, so a 2 GB download does not happen twice. Nothing of yours is ever written there.\n- **No Chromium.** The system bootstrap (Playwright plus a ~280 MB browser) is off unless you pass `host: { systemBootstrap: true }`.\n- **One per process.** The daemon reads its settings from the environment, so a second hosted daemon in the same process is refused. A second *instance of your app* adopts the daemon the first one started.\n- **Its own port.** A hosted daemon always listens on an ephemeral port, never the canonical 6228 that the machine broker or the user's own Gezel expects to own.\n- **An inference-only profile.** `host: { mode: 'in-process', inferenceOnly: true }` keeps on-device model listing, installation, and OpenAI-compatible inference, but does not start the standalone product's schedulers, channels, editor bridges, machine-service discovery, indexing, or maintenance jobs. Nor does it set up remote connectivity: no secret store (nothing in the OS keychain), no device identity, and no pairing or LAN-serving endpoints. The SDK calls the service through its direct in-process Fetch handler, so Electron needs neither a separate Node executable nor a loopback client connection.\n\nInstall `@bendyline/gezel-service` alongside this SDK to host — it is an optional peer dependency, so apps that only connect never download it.\nKeep the SDK and service on compatible releases. Inference-only hosting verifies\nthat the service actually started the embedded profile and supplied its direct\nFetch transport; an older service fails immediately with\n`service_inference_only_unsupported` instead of silently starting the full\nproduct or falling back to loopback networking.\n\n**Under Electron**, `process.execPath` is your app binary, not Node. Full-product hosting runs a tool server as a child process, so ship a Node binary and pass `host: { nodePath }`; without one, the SDK uses the Node a Gezel install keeps at `<Gezel home>/bin/node` when available. Inference-only in-process hosting starts no child-process features and needs no Node path.\n\n### When hosting happens\n\nBy default only a Gezel that is not running falls through to hosting. A person who declines the connection, or lets the approval expire, gets exactly that: no private daemon started behind their back. Two things change the ladder:\n\n- **A saved grant is reused first.** An app with no `onVerificationCode` handler cannot complete a new handshake, but if `tokenStorage` or `existingToken` holds a grant from an earlier session, the SDK joins the running Gezel with it before hosting. It cannot prompt: without a code handler the SDK refuses to register a new grant, and that refusal is what falls through.\n- **`hostWhenRefused: true`** also hosts after a refusal, an expired or unanswered approval, or a connected-app surface switched off in Gezel. It is for apps that obtain their own consent — the AI is optional and the person switched it on inside the app. A daemon that is alive but unwell still fails loudly.\n\nFor an app whose own **Use AI** switch is the consent boundary, the silent\nstartup policy is therefore:\n\n```ts\nconst gezel = await connectOrHost({\n  appId: 'acme.editor',\n  appName: 'Acme Editor',\n  scopes: ['openai'],\n  requireVerificationCode: true,\n  tokenStorage,\n  // No onVerificationCode at startup: reuse a saved grant or host, never prompt.\n  host: { mode: 'in-process', inferenceOnly: true },\n  hostWhenRefused: true,\n});\n```\n\nConnecting the standalone Gezel later is an optional user action: close the\nprivate connection and repeat the call from that action with an\n`onVerificationCode` handler. Omitting that handler during startup is what\nmakes the initial path incapable of raising a connection prompt.\n\n### Shipping the engines with your app\n\nA hosted daemon downloads the native engine it pins (`llama-server`, from the `native-v<release>` GitHub release) the first time a model needs it. To skip that download — or to work offline from the first launch — ship the engines and pass their directory:\n\n```ts\nhost: { nodePath, daemonEntry, nativeBinDir: '/opt/acme/gezel-host/native-bin' }\n```\n\nThe directory holds the extracted release archives as `<platform>-<backend>/` — for example `win32-x64-vulkan/` and `win32-x64-cpu/`, each with its `gezel-llama-server` and libraries. Discovery falls back from CUDA to Vulkan to CPU, so Vulkan plus CPU serves most machines without the much larger CUDA archive. Ship the release the bundled service pins, verified against its digests; the service publishes both as data, without loading any daemon code:\n\n```ts\nimport {\n  NATIVE_ENGINE_RELEASE,\n  NATIVE_ENGINE_ARCHIVE_SHA256,\n} from '@bendyline/gezel-service/native-release';\n```\n\nEngines from another release may not accept the flags the daemon passes them. On macOS the release's binaries arrive Developer ID signed; exclude that tree from re-signing so the pinned bytes stay intact.\n\n### Shipping a model with your app\n\n`ensureModel` resolves in three steps: already installed, then a `.gezmodel` bundle you ship, then a catalog download. Export a bundle with `gezel model export <id>`, put it in your app's resources, and a first run needs no network:\n\n```ts\nawait gezel.ensureModel({ model: 'gemma4-e2b-q4', bundle: '/opt/acme/gemma4-e2b-q4.gezmodel' });\n```\n\nAn app that may prepare an engine automatically but requires a separate user\ngesture before downloading model weights uses `allowWeightDownload: false`.\nIf the model is absent, Gezel prepares the engine and then throws\n`model_download_required` before any weight download starts:\n\n```ts\nawait gezel.ensureModel({\n  model: 'gemma4-e2b-q4',\n  allowWeightDownload: false,\n});\n```\n\n`ensureProject` does the same for a `.gezapp`'s declared chat-model dependencies — pass `bundles: { 'gemma4-e2b-q4': '/opt/acme/gemma4-e2b-q4.gezmodel' }`.\n\nBoth calls are idempotent, so the normal shape is to run them on every launch. `ensureProject` preserves the user's edits to seeded files and reuses the crew already on the roster.\n\n## Custom app tools\n\nRegister tools your application runs itself. The model sees them beside gezel's own tools; when one is called, your handler runs in your process and its return value becomes the tool's output.\n\n```ts\nconst registration = await project.registerTools({\n  tools: [\n    {\n      name: 'add_travel_points',\n      description: 'Award travel points to the traveller.',\n      inputSchema: {\n        type: 'object',\n        properties: { points: { type: 'number' }, reason: { type: 'string' } },\n        required: ['points'],\n      },\n      async handler({ points, reason }) {\n        await awardPoints(Number(points), String(reason ?? ''));\n        return `awarded ${points} points`;\n      },\n    },\n  ],\n});\n```\n\nNotes worth knowing:\n\n- **Registration lives with the connection.** Close the handle, or exit, and the tools are withdrawn. A brief disconnect is held for a grace window and reconnects transparently; a tool whose handler is gone would accept a call and never answer, which is worse for the model than no tool at all.\n- **Arguments are validated** against your `inputSchema` before the call leaves the daemon, so a malformed call comes back to the model as a fixable error instead of reaching your handler.\n- **A handler that throws** is an ordinary tool failure: the model is told, and the turn continues.\n- **Timeouts** default to 60 s per call (`timeoutMs`, max 300 s).\n- Names are snake_case and may not shadow a built-in gezel tool.\n- Needs the `product` scope (or a daemon your app hosts), and Node or Electron — `/api/*` is not reachable from a browser.\n\nTools work the same against a hosted daemon and the user's own gezel; `registerTools` is also available on a plain `authorize()` result via the exported `registerAppTools`.\n\n## Headless / browser apps\n\nThe Node entry reads `~/.gezel/runtime/` to discover the daemon. In a browser (or any context without filesystem access), use the browser entry and supply `baseUrl` + an `existingToken` explicitly:\n\n```ts\nimport { GezelApp } from '@bendyline/gezel-app-sdk/browser';\n\nconst app = new GezelApp({\n  baseUrl: 'https://127.0.0.1:54321',\n  token: tokenFromYourBackend,\n  fetch: window.fetch,\n});\n```\n\nBrowser apps can't trust the loopback self-signed cert without OS-level intervention — gate browser support behind a desktop helper that does discovery + consent and ferries the resolved URL/token to the renderer.\n\n## API surface\n\n| Method | Purpose |\n|---|---|\n| `detectGezel({ timeoutMs? })` | Probe runtime files + health; defaults to a 5-second headers-and-body budget |\n| `connect()` | Register + consent + token storage |\n| `authorize()` | Generic discovery + consent result (`baseUrl`, scoped token, fetch) |\n| `connectLocal()` | Complete Node-native discovery + consent, returning `GezelApp` and diagnostics |\n| `authorizeLocal()` | Complete Node-native discovery + consent for typed product clients |\n| `authorizeLocalOwner()` | First-party same-user daemon connection without app consent |\n| `app.chat()` | OpenAI-compatible chat (streaming + non) |\n| `app.embeddings()` | OpenAI-compatible embeddings |\n| `app.models()` | List available models |\n| `app.ensureModel()` | Make sure a local model is downloaded |\n| `app.streamEnsureEvents()` | SSE: install progress + done/error |\n| `app.revokeMyToken()` | Self-revoke (user can also revoke from Settings) |\n| `app.close()` | Release the SDK-owned transport after consuming or cancelling response streams |\n\nFrom `@bendyline/gezel-app-sdk/host`:\n\n| Method | Purpose |\n|---|---|\n| `connectOrHost()` | Connect to the user's gezel, or host one in this process; returns a `Gezel` |\n| `gezel.ensureModel()` | Engine binary + weights (present, bundled, or downloaded) + default pin |\n| `gezel.ensureProject()` | Bind a folder to a `GezelProject`, applying a `.gezapp` when one is given |\n| `gezel.openProject()` | A `GezelProject` for a project that already exists |\n| `gezel.client` | The full typed product API (`@bendyline/gezel-client`) |\n| `gezel.openai` | The OpenAI-shaped `GezelApp` for stateless completions |\n| `gezel.close()` | Stop a daemon this process started; release the transport either way |\n| `project.openChat()` | Open or resume a conversation, by gezel id or role |\n| `project.registerTools()` | Offer tools your application runs itself |\n| `project.gezels` | Gezel id by role template id |\n| `chat.send()` | Stream one turn as `delta` / `tool` / `complete` / `done` events |\n\n## TLS pinning\n\nThe daemon serves HTTPS with a per-launch self-signed cert at `~/.gezel/runtime/cert.pem`. The SDK reads that cert and builds a fetch that trusts it — your first integration won't fail with `UNABLE_TO_VERIFY_LEAF_SIGNATURE`. The `createTrustingFetch` helper is exported in case you build your own request pipeline.\n\nHealth discovery uses a separate five-second budget covering both headers and the\nresponse body. `detectGezel({ timeoutMs: 2_000 })` customizes that budget in awake\nmilliseconds. A stalled health request returns `installed: true, running: false`;\nit never waits on the inference transport's unlimited header/body policy. Native\nSDK discovery uses the same default health budget.\n\nTemporary probes close their dispatcher after a response and destroy it on a\nrequest failure or timeout. Connected apps own their dispatcher until `app.close()`\n(or the authorization result's optional `close()` callback). Injected fetches are\nborrowed and never closed or destroyed by the SDK. The Node fetch helpers also\nexpose `close()` and `destroy()` for callers managing their own transport lifetime.\n\n## Errors\n\nErrors thrown by the SDK are `GezelSdkError` instances carrying both an HTTP `status` (when known) and a `code` from the server's response envelope. Common codes:\n\n- `daemon_not_running` — no runtime files / health probe failed\n- `user_denied` — consent dialog rejected\n- `approval_timeout` — `approvalTimeoutSec` elapsed\n- `grant_expired` — the request expired or used all verification attempts\n- `verification_code_handler_required` — a stateful scope omitted `onVerificationCode`\n- `verification_not_supported` — the daemon did not honor an explicit code requirement\n- `model_not_found` — unknown `<provider>:<model>` prefix\n- `tools_not_supported_for_provider` — the resolved provider runs its own tool loop and cannot take caller-executed tools\n- `tool_choice_function_not_supported_v1` — a specific function was pinned via object-form `tool_choice`\n- `embeddings_not_supported` — provider doesn't expose embeddings\n- `missing_scope:<scope>` — token is missing the requested scope\n- `provider_error` — backend provider call failed\n\nFrom the host entry:\n\n- `node_binary_required` — hosting under Electron without `host.nodePath`\n- `service_not_installed` — `@bendyline/gezel-service` is not installed and no `serviceModule` was passed\n- `host_already_active` — this process already hosts a daemon\n- `folder_has_other_app` — the target folder belongs to a different app's project\n- `tool_name_reserved` / `tool_name_conflict` — an app tool name collides with a built-in or another app\n\n## OpenAPI\n\nThe daemon serves the public contract at `GET /v1/openapi.json` (unauth). Point Swagger UI, Redocly, or your codegen at it.\n\n## Spec\n\nSee the upstream gezel docs for the full route table and the OpenAPI document. The SDK is a thin wrapper over those routes; the routes are the source of truth.\n","readmeFilename":""}