{"_id":"@divinci-ai/extension-bridge","_rev":"3-16101055c6533ba687f10d133adf3c68","name":"@divinci-ai/extension-bridge","dist-tags":{"latest":"0.1.2"},"versions":{"0.1.0":{"name":"@divinci-ai/extension-bridge","version":"0.1.0","keywords":["divinci","browser-extension","on-device","webgpu","webmcp","a2a","local-llm"],"license":"MIT","_id":"@divinci-ai/extension-bridge@0.1.0","maintainers":[{"name":"mike-divinci","email":"mike@divinci.ai"}],"dist":{"shasum":"51d34a36604b119e2b07117c8ec39d2144bcc22b","tarball":"https://registry.npmjs.org/@divinci-ai/extension-bridge/-/extension-bridge-0.1.0.tgz","fileCount":7,"integrity":"sha512-dbeEuZfQHHTQydyYfAcsx0KRxmShWrxSqEl0Bv2w9VFWOvw431k68mnaksxkuYCnhR2NpuPEZGGGuorQcbpu8Q==","signatures":[{"sig":"MEUCIH3lb1khSq6xgrqX3mu2OLB4ucxj2Y0XqJ/9EJBL9CS2AiEAwBtymPtXnZ17yntYxBy8PtKUuU6v7taJoh0ctjqGMHo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15566},"main":"./dist/index.js","_from":"file:divinci-ai-extension-bridge-0.1.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"test":"vitest run","build":"tsc","clean":"rm -rf dist tsconfig.tsbuildinfo","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"mike-divinci","email":"mike@divinci.ai"},"_resolved":"/private/var/folders/q4/pl30pmhs0qn8m30_d_pby9_40000gn/T/ff0cf65d851b4c620af3a8ca42bdf3cb/divinci-ai-extension-bridge-0.1.0.tgz","_integrity":"sha512-dbeEuZfQHHTQydyYfAcsx0KRxmShWrxSqEl0Bv2w9VFWOvw431k68mnaksxkuYCnhR2NpuPEZGGGuorQcbpu8Q==","_npmVersion":"12.0.2","description":"Talk to the Divinci Local Inference browser extension from any website (on-device chat / WebMCP / A2A), with graceful fallback to the Divinci cloud API. Pure TypeScript, no Divinci-internal dependencies — works in any browser.","directories":{},"_nodeVersion":"22.23.1","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.4","typescript":"^5.9.3","@types/node":"^22.19.10"},"_npmOperationalInternal":{"tmp":"tmp/extension-bridge_0.1.0_1786592682625_0.5443414102502175","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@divinci-ai/extension-bridge","version":"0.1.1","keywords":["divinci","browser-extension","on-device","webgpu","webmcp","a2a","local-llm"],"license":"MIT","_id":"@divinci-ai/extension-bridge@0.1.1","maintainers":[{"name":"mike-divinci","email":"mike@divinci.ai"}],"homepage":"https://sdk.divinci.ai","bugs":{"url":"https://github.com/Divinci-AI/sdk/issues"},"dist":{"shasum":"9f8d6e3efac62083273b95c054ebda6061a813de","tarball":"https://registry.npmjs.org/@divinci-ai/extension-bridge/-/extension-bridge-0.1.1.tgz","fileCount":7,"integrity":"sha512-/GLhHtfRjUGe3N9xuOPW29Lcsz13hFIQLqbT1u7qmI6GPrrSux3Qx8p3nre9QBuNvYDUPG6qZdOt82DlI9umjQ==","signatures":[{"sig":"MEUCIB2f5QKfU6vhdNKSIAVftOTm29qvcPUuBAllDz+VPMj9AiEAlyv3Vzwrh0vlDlLJ6OoFk80TDWomCsmtn/7/QP+XMnw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15770},"main":"./dist/index.js","_from":"file:divinci-ai-extension-bridge-0.1.1.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"test":"vitest run","build":"tsc","clean":"rm -rf dist tsconfig.tsbuildinfo","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c8505483-0044-4c69-ac0e-af9c29e9cacb"}},"_resolved":"/tmp/2a14aa558c1e092ff2b3b28d9c5c6df4/divinci-ai-extension-bridge-0.1.1.tgz","_integrity":"sha512-/GLhHtfRjUGe3N9xuOPW29Lcsz13hFIQLqbT1u7qmI6GPrrSux3Qx8p3nre9QBuNvYDUPG6qZdOt82DlI9umjQ==","repository":{"url":"git+https://github.com/Divinci-AI/sdk.git","type":"git"},"_npmVersion":"11.19.0","description":"Talk to the Divinci Local Inference browser extension from any website (on-device chat / WebMCP / A2A), with graceful fallback to the Divinci cloud API. Pure TypeScript, no Divinci-internal dependencies — works in any browser.","directories":{},"_nodeVersion":"22.23.2","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.4","typescript":"^5.9.3","@types/node":"^22.19.10"},"_npmOperationalInternal":{"tmp":"tmp/extension-bridge_0.1.1_1787141472308_0.8699134411707194","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"_id":"@divinci-ai/extension-bridge@0.1.2","bugs":{"url":"https://github.com/Divinci-AI/sdk/issues"},"dist":{"shasum":"e6e1f2b944c0046248ada8e8facb6d1ea5cef68d","tarball":"https://registry.npmjs.org/@divinci-ai/extension-bridge/-/extension-bridge-0.1.2.tgz","fileCount":7,"integrity":"sha512-qpF+wnCNmB/Ry1qC2uZg4Tt/NO5yYQPiW/AIT1w8W+z1u5mQXFpxDwdra9g6VYKnEXZhMh8j6hMZ45FnKm8TVg==","signatures":[{"sig":"MEUCIDG0w3jRn+e4E89ZXe2HstEHjINxP3abtOPuAgXWlLijAiEAzVPSxP1CNBH4BdI6C+otK7I1+LUYZ3ZZDwKPIFi7FWw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCQwIgoPrrJH9oPhl5jJdfdZxhNWgWTGmtCWoaYLK4hPwIgBcMTqS+nQpapTC0jBZu8bKNyWkHnWF/GNyiXwwbEqt4="}],"unpackedSize":15770},"main":"./dist/index.js","name":"@divinci-ai/extension-bridge","_from":"file:divinci-ai-extension-bridge-0.1.2.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"license":"MIT","scripts":{"test":"vitest run","build":"tsc","clean":"rm -rf dist tsconfig.tsbuildinfo","typecheck":"tsc --noEmit","test:watch":"vitest"},"version":"0.1.2","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c8505483-0044-4c69-ac0e-af9c29e9cacb"}},"homepage":"https://sdk.divinci.ai","keywords":["divinci","browser-extension","on-device","webgpu","webmcp","a2a","local-llm"],"_resolved":"/tmp/3f3919bbfa3105cef9e12124703025cf/divinci-ai-extension-bridge-0.1.2.tgz","_integrity":"sha512-qpF+wnCNmB/Ry1qC2uZg4Tt/NO5yYQPiW/AIT1w8W+z1u5mQXFpxDwdra9g6VYKnEXZhMh8j6hMZ45FnKm8TVg==","repository":{"url":"git+https://github.com/Divinci-AI/sdk.git","type":"git"},"_npmVersion":"11.19.1","description":"Talk to the Divinci Local Inference browser extension from any website (on-device chat / WebMCP / A2A), with graceful fallback to the Divinci cloud API. Pure TypeScript, no Divinci-internal dependencies — works in any browser.","directories":{},"maintainers":[{"name":"mike-divinci","email":"mike@divinci.ai"}],"_nodeVersion":"22.23.2","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.4","typescript":"^5.9.3","@types/node":"^22.19.10"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/extension-bridge_0.1.2_1788686719351_0.7686651127983128"}}},"time":{"created":"2026-08-13T03:44:42.405Z","modified":"2026-09-06T09:25:19.630Z","0.1.0":"2026-08-13T03:44:42.758Z","0.1.1":"2026-08-19T12:11:12.456Z","0.1.2":"2026-09-06T09:25:19.436Z"},"bugs":{"url":"https://github.com/Divinci-AI/sdk/issues"},"license":"MIT","homepage":"https://sdk.divinci.ai","keywords":["divinci","browser-extension","on-device","webgpu","webmcp","a2a","local-llm"],"repository":{"url":"git+https://github.com/Divinci-AI/sdk.git","type":"git"},"description":"Talk to the Divinci Local Inference browser extension from any website (on-device chat / WebMCP / A2A), with graceful fallback to the Divinci cloud API. Pure TypeScript, no Divinci-internal dependencies — works in any browser.","maintainers":[{"name":"mike-divinci","email":"mike@divinci.ai"}],"readme":"# @divinci-ai/extension-bridge\n\nTalk to the **Divinci Local Inference** browser extension from any website — run\nAI chat **on the user's device** (private, free, no server round-trip) — with an\nautomatic fallback to the Divinci cloud API when the extension isn't installed.\n\nPure TypeScript, zero Divinci-internal dependencies, works in any browser.\n\n## Install\n\n```bash\nnpm install @divinci-ai/extension-bridge\n```\n\n## Usage\n\n```ts\nimport { createDivinciBridge } from \"@divinci-ai/extension-bridge\";\n\n// cloudChat is your existing cloud path (e.g. wired to @divinci-ai/client).\n// Omit it to require the extension.\nconst divinci = createDivinciBridge({ cloudChat });\n\nconst { fullText, source } = await divinci.chat(\n  { messages: [{ role: \"user\", content: \"Summarize this page.\" }] },\n  { onToken: (delta) => append(delta) },\n);\nconsole.log(source); // \"extension\" (on-device) or \"cloud\"\n```\n\nThe first time a site runs `chat()` through the extension, the user sees a\none-time in-page consent prompt (\"Allow example.com to run AI chat on your\ndevice?\"). Grants are per-origin and revocable from the extension popup.\n\n### Detect the extension\n\n```ts\nconst { present, extensionVersion, supportedModels } = await divinci.detect();\nif (present) showOnDeviceBadge();\n```\n\n### Advanced surfaces (extension only)\n\n```ts\nawait divinci.requestAccess([\"chat\"]);   // pre-warm the consent prompt\nconst card = await divinci.agentCard();  // the local agent's A2A Agent Card\nconst task = await divinci.task(\"...\");  // submit an A2A task to the local agent\n```\n\n`agentCard()` / `task()` reject when no extension is present; `requestAccess()`\nreturns `[]`. `hasExtension()` is a synchronous presence check.\n\n## How it works\n\nThe extension injects `window.divinci` (a MAIN-world content script). This SDK is\na thin, dependency-injected dispatcher over it: extension-first, cloud-fallback.\nAll dispatch logic is pure (the `window` and `cloudChat` are options), so it's\nfully testable without a browser. See the server repo's\n`strategy/2026-06-28-extension-open-programmatic-api.md` for the full design.\n","readmeFilename":"README.md"}