{"_id":"@agent-provider/react","_rev":"6-8b9055382d217cd2f55c9d9a9b9d8d6a","name":"@agent-provider/react","dist-tags":{"latest":"0.1.5"},"versions":{"0.1.0":{"name":"@agent-provider/react","version":"0.1.0","keywords":["browser","llm","react","agent-provider"],"license":"CC0-1.0 OR Unlicense","_id":"@agent-provider/react@0.1.0","maintainers":[{"name":"xertrov","email":"m@xk.io"}],"dist":{"shasum":"f3aae41edf3a761e0cf809f4f092bf1ad18ee25d","tarball":"https://registry.npmjs.org/@agent-provider/react/-/react-0.1.0.tgz","fileCount":14,"integrity":"sha512-f11EAHDFKXPsBM0aQR7XNDmaOBFitvC5IOAb2WMPYLaAwIdJxd2Khac1NHRXmSLE+llmb9LVRNO+kCY3Zyjgfw==","signatures":[{"sig":"MEUCIQD2k5CQbVlKByg31ZSviOsskuSD185QAWIEhQ1N0G73UwIgJdI/GNI7dIm1JFYxlwfH82ssFjViGnCoDexszX403vU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":52386},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./styles.css":"./dist/styles.css"},"gitHead":"13bee9a89750e14cf880d4c751c1bac52d900216","scripts":{"test":"vitest run --passWithNoTests","build":"tsup src/index.ts --format esm --sourcemap --clean && cp src/styles.css dist/styles.css && tsc -p tsconfig.build.json --emitDeclarationOnly","clean":"rm -rf dist","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"xertrov","email":"m@xk.io"},"_npmVersion":"12.0.1","description":"React bindings and reference chat surface for Agent Provider.","directories":{},"sideEffects":["./dist/styles.css"],"_nodeVersion":"22.23.1","dependencies":{"@agent-provider/runtime":"0.1.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","react":"19.2.7","vitest":"^4.1.10","react-dom":"19.2.7","typescript":"^7.0.2","@types/react":"^19.2.14","@types/react-dom":"^19.2.3"},"peerDependencies":{"react":">=18.3","react-dom":">=18.3"},"_npmOperationalInternal":{"tmp":"tmp/react_0.1.0_1784764821530_0.306939480624113","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@agent-provider/react","version":"0.1.1","keywords":["browser","llm","react","agent-provider"],"license":"CC0-1.0 OR Unlicense","_id":"@agent-provider/react@0.1.1","maintainers":[{"name":"xertrov","email":"m@xk.io"}],"homepage":"https://github.com/clankercode/agent-provider#readme","bugs":{"url":"https://github.com/clankercode/agent-provider/issues"},"dist":{"shasum":"f21eec8a40e27d4803c9747c28f2db7038d5a71a","tarball":"https://registry.npmjs.org/@agent-provider/react/-/react-0.1.1.tgz","fileCount":14,"integrity":"sha512-EGsQM89ygyv8nrc3siasBtmkDk/NafWysm5tZUhNiFP/XdW1ZRC9Gqp52DXEZNK2k/O+OXp9ujV09Bhcf6QdRg==","signatures":[{"sig":"MEYCIQDI6bbWvy0LnQje32P7N7MTPgwFW77I7I00LK53uCcIXQIhAMyJ8MR8K4rBALAKB2crXbuJGNVHhhsBy6x189z0FrdL","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agent-provider%2freact@0.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":55985},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./styles.css":"./dist/styles.css"},"gitHead":"2dd5039a143844c33be718ae76b6191608da76ef","scripts":{"test":"vitest run --passWithNoTests","build":"tsup src/index.ts --format esm --sourcemap --clean && cp src/styles.css dist/styles.css && tsc -p tsconfig.build.json --emitDeclarationOnly","clean":"rm -rf dist","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a820f760-b221-4bfb-aa9c-29d1b20cacb7"}},"repository":{"url":"git+https://github.com/clankercode/agent-provider.git","type":"git","directory":"packages/react"},"_npmVersion":"11.5.1","description":"React bindings and reference chat surface for Agent Provider.","directories":{},"sideEffects":["./dist/styles.css"],"_nodeVersion":"22.23.1","dependencies":{"@agent-provider/runtime":"0.1.1"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","react":"19.2.7","vitest":"^4.1.10","react-dom":"19.2.7","typescript":"^7.0.2","@types/react":"^19.2.14","@types/react-dom":"^19.2.3"},"peerDependencies":{"react":">=18.3","react-dom":">=18.3"},"_npmOperationalInternal":{"tmp":"tmp/react_0.1.1_1784766041626_0.13272459529911806","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@agent-provider/react","version":"0.1.2","keywords":["browser","llm","react","agent-provider"],"license":"CC0-1.0 OR Unlicense","_id":"@agent-provider/react@0.1.2","maintainers":[{"name":"xertrov","email":"m@xk.io"}],"homepage":"https://github.com/clankercode/agent-provider#readme","bugs":{"url":"https://github.com/clankercode/agent-provider/issues"},"dist":{"shasum":"78da29f0fc265676c9d07961248db537046cb7da","tarball":"https://registry.npmjs.org/@agent-provider/react/-/react-0.1.2.tgz","fileCount":14,"integrity":"sha512-UKtnhqFeavFROiAVzJ6d1f+safAdElIIbb7BZAI6qMks18DsG7jPpVLK00JsgDL9ya6115xIDsHZ02G8JDkaNw==","signatures":[{"sig":"MEUCID2yuvFv3XsSoVtgHxONFj5ngthTbqRl8vkOXwoLEG1+AiEAlpmYZeWTkRa1mIeBMMUOSeWJYvrWhKx2piqx4NZhE9g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agent-provider%2freact@0.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":55985},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./styles.css":"./dist/styles.css"},"gitHead":"707770d8444dfababcdc11d677dbd93deff516ee","scripts":{"test":"vitest run --passWithNoTests","build":"tsup src/index.ts --format esm --sourcemap --clean && cp src/styles.css dist/styles.css && tsc -p tsconfig.build.json --emitDeclarationOnly","clean":"rm -rf dist","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a820f760-b221-4bfb-aa9c-29d1b20cacb7"}},"repository":{"url":"git+https://github.com/clankercode/agent-provider.git","type":"git","directory":"packages/react"},"_npmVersion":"11.5.1","description":"React bindings and reference chat surface for Agent Provider.","directories":{},"sideEffects":["./dist/styles.css"],"_nodeVersion":"22.23.1","dependencies":{"@agent-provider/runtime":"0.1.2"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","react":"19.2.7","vitest":"^4.1.10","react-dom":"19.2.7","typescript":"^7.0.2","@types/react":"^19.2.14","@types/react-dom":"^19.2.3"},"peerDependencies":{"react":">=18.3","react-dom":">=18.3"},"_npmOperationalInternal":{"tmp":"tmp/react_0.1.2_1784778841036_0.1519124037241042","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@agent-provider/react","version":"0.1.3","keywords":["browser","llm","react","agent-provider"],"license":"CC0-1.0 OR Unlicense","_id":"@agent-provider/react@0.1.3","maintainers":[{"name":"xertrov","email":"m@xk.io"}],"homepage":"https://github.com/clankercode/agent-provider#readme","bugs":{"url":"https://github.com/clankercode/agent-provider/issues"},"dist":{"shasum":"00c8755d9814076cf898a1e703bf347f3f924698","tarball":"https://registry.npmjs.org/@agent-provider/react/-/react-0.1.3.tgz","fileCount":14,"integrity":"sha512-6rmJVuD3FJk4XtBqgr07Wwt4a/EHr/njEWZ5bLgYupVU/JapSBEOMQrmYL7E0am2r97xqHeyxF5itNAw8A2ZQQ==","signatures":[{"sig":"MEUCIQDfx58NZPRgm2GZOfixoncYWbXZFqZJtmHuzLerSJuVtQIgCmWViEp6XhIYu6OALrjFuGIgcSQGAL5YB/7vPr5B8h0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agent-provider%2freact@0.1.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":57962},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./styles.css":"./dist/styles.css"},"gitHead":"fb7c39c103b925ce01ef87cd7bf3c7bbb3c4a94f","scripts":{"test":"vitest run --passWithNoTests","build":"tsup src/index.ts --format esm --sourcemap --clean && cp src/styles.css dist/styles.css && tsc -p tsconfig.build.json --emitDeclarationOnly","clean":"rm -rf dist","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a820f760-b221-4bfb-aa9c-29d1b20cacb7"}},"repository":{"url":"git+https://github.com/clankercode/agent-provider.git","type":"git","directory":"packages/react"},"_npmVersion":"11.5.1","description":"React bindings and reference chat surface for Agent Provider.","directories":{},"sideEffects":["./dist/styles.css"],"_nodeVersion":"22.23.1","dependencies":{"@agent-provider/runtime":"0.1.3"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","react":"19.2.7","vitest":"^4.1.10","react-dom":"19.2.7","typescript":"^7.0.2","@types/react":"^19.2.14","@types/react-dom":"^19.2.3"},"peerDependencies":{"react":">=18.3","react-dom":">=18.3"},"_npmOperationalInternal":{"tmp":"tmp/react_0.1.3_1784893411702_0.264526509835991","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@agent-provider/react","version":"0.1.4","keywords":["browser","llm","react","agent-provider"],"license":"CC0-1.0 OR Unlicense","_id":"@agent-provider/react@0.1.4","maintainers":[{"name":"xertrov","email":"m@xk.io"}],"homepage":"https://github.com/clankercode/agent-provider#readme","bugs":{"url":"https://github.com/clankercode/agent-provider/issues"},"dist":{"shasum":"d408d695a6eee8350c17597d1c06ca78248f7ac5","tarball":"https://registry.npmjs.org/@agent-provider/react/-/react-0.1.4.tgz","fileCount":14,"integrity":"sha512-SlDKxW+q/oiM1p/qxhaeDAPFqym81jl+8uHj3hnjbfYt4mHmEHNMonNqFnORhIQG+vCYyiS4kl+9QVtNlavDDQ==","signatures":[{"sig":"MEUCIGpt+Gsea3qLyeHhTBViFgQuYSrNRwGAFrKRaoxv8/DsAiEA5vxa25YOA8V2PwBtDv+qHm8yvGBcjlAjbqGDLfWipJY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agent-provider%2freact@0.1.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":107393},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./styles.css":"./dist/styles.css"},"gitHead":"f00aa305d5fe6486ad9ded8a89b6069c0c5249f0","scripts":{"test":"vitest run --passWithNoTests","build":"tsup src/index.ts --format esm --sourcemap --clean && cp src/styles.css dist/styles.css && tsc -p tsconfig.build.json --emitDeclarationOnly","clean":"rm -rf dist","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a820f760-b221-4bfb-aa9c-29d1b20cacb7"}},"repository":{"url":"git+https://github.com/clankercode/agent-provider.git","type":"git","directory":"packages/react"},"_npmVersion":"11.5.1","description":"React bindings and reference chat surface for Agent Provider.","directories":{},"sideEffects":["./dist/styles.css"],"_nodeVersion":"22.23.1","dependencies":{"@agent-provider/runtime":"0.1.4"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","react":"19.2.7","vitest":"^4.1.10","react-dom":"19.2.7","typescript":"^7.0.2","@types/react":"^19.2.14","@types/react-dom":"^19.2.3"},"peerDependencies":{"react":">=18.3","react-dom":">=18.3"},"_npmOperationalInternal":{"tmp":"tmp/react_0.1.4_1785432187536_0.7640063788735678","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@agent-provider/react","version":"0.1.5","description":"React bindings and reference chat surface for Agent Provider.","license":"CC0-1.0 OR Unlicense","repository":{"type":"git","url":"git+https://github.com/clankercode/agent-provider.git","directory":"packages/react"},"keywords":["browser","llm","react","agent-provider"],"engines":{"node":">=22"},"publishConfig":{"access":"public","provenance":true},"type":"module","sideEffects":["./dist/styles.css"],"main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./styles.css":"./dist/styles.css"},"scripts":{"build":"tsup src/index.ts --format esm --sourcemap --clean && cp src/styles.css dist/styles.css && tsc -p tsconfig.build.json --emitDeclarationOnly","typecheck":"tsc -p tsconfig.json --noEmit","test":"vitest run --passWithNoTests","clean":"rm -rf dist"},"dependencies":{"@agent-provider/runtime":"0.1.5"},"peerDependencies":{"react":">=18.3","react-dom":">=18.3"},"devDependencies":{"@types/react":"^19.2.14","@types/react-dom":"^19.2.3","react":"19.2.7","react-dom":"19.2.7","tsup":"^8.5.1","typescript":"^7.0.2","vitest":"^4.1.10"},"_id":"@agent-provider/react@0.1.5","gitHead":"6e48a8d1a19595339cfc67606241ef9280edf3a4","bugs":{"url":"https://github.com/clankercode/agent-provider/issues"},"homepage":"https://github.com/clankercode/agent-provider#readme","_nodeVersion":"22.23.1","_npmVersion":"11.5.1","dist":{"integrity":"sha512-Y5aBatpQjc1l+/6U3IuhBmdwl2i3rkYXvskkRl3Chkf+VNJ0Zqj5hbhJX4qOOh334kjeEKzQNGWHg73c0r00ZA==","shasum":"ad1d2e771b9ad0095f4e27833939fd3e9476fabc","tarball":"https://registry.npmjs.org/@agent-provider/react/-/react-0.1.5.tgz","fileCount":14,"unpackedSize":123473,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agent-provider%2freact@0.1.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDc/q6SOgnBLgKEY6uFRBBqjHGJM4OKRbLwo+6/sKRjhAIhAMOi0ocj96ShH8CcO4BjqDHOUm+zLWDFAuoEn1kangp4"}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a820f760-b221-4bfb-aa9c-29d1b20cacb7"}},"directories":{},"maintainers":[{"name":"xertrov","email":"m@xk.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/react_0.1.5_1785437749841_0.014566786217333316"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-23T00:00:21.344Z","modified":"2026-07-30T18:55:50.348Z","0.1.0":"2026-07-23T00:00:21.668Z","0.1.1":"2026-07-23T00:20:41.769Z","0.1.2":"2026-07-23T03:54:01.177Z","0.1.3":"2026-07-24T11:43:31.857Z","0.1.4":"2026-07-30T17:23:07.744Z","0.1.5":"2026-07-30T18:55:49.979Z"},"bugs":{"url":"https://github.com/clankercode/agent-provider/issues"},"license":"CC0-1.0 OR Unlicense","homepage":"https://github.com/clankercode/agent-provider#readme","keywords":["browser","llm","react","agent-provider"],"repository":{"type":"git","url":"git+https://github.com/clankercode/agent-provider.git","directory":"packages/react"},"description":"React bindings and reference chat surface for Agent Provider.","maintainers":[{"name":"xertrov","email":"m@xk.io"}],"readme":"# @agent-provider/react\n\nReact bindings and a reference chat surface for Agent Provider.\n\n```bash\nnpm install @agent-provider/react react react-dom\n```\n\nImport `@agent-provider/react/styles.css` when using the reference UI. The\nheadless runtime remains available separately from `@agent-provider/runtime`.\n\n## What it does\n\nAgent Provider lets a trusted web application run a typed, tool-using AI agent\nwithout owning the user's model credentials. Credentials live in the browser\nextension and are only released to an origin after an explicit, exact-origin\ngrant; page code never sees them. This package provides the React half of that\ncontract: a context provider and hooks that expose the runtime's observable\nstate, plus a reference chat surface (`AgentProviderChat` and\n`AgentProviderLauncher`) that handles connection status, permission prompts,\ntool-approval requests, and streaming messages out of the box.\n\n## Quick start\n\nCreate a runtime with `@agent-provider/runtime`, hand it to\n`AgentProviderProvider`, and render the launcher:\n\n```tsx\nimport { instantChatbot } from \"@agent-provider/runtime\";\nimport {\n  AgentProviderProvider,\n  AgentProviderLauncher,\n} from \"@agent-provider/react\";\nimport \"@agent-provider/react/styles.css\";\n\nconst runtime = instantChatbot({\n  appName: \"My App\",\n  modelAlias: \"default\",\n  instructions: \"You are the copilot for this page.\",\n});\n\nexport function App() {\n  return (\n    <AgentProviderProvider runtime={runtime} destroyOnUnmount>\n      <AgentProviderLauncher title=\"My App copilot\" />\n    </AgentProviderProvider>\n  );\n}\n```\n\nModel execution requires the Agent Provider browser extension and an\nexact-origin grant from the user; without them the surface renders a status\nmessage instead of a working chat.\n\n## Exports\n\nComponents:\n\n- `AgentProviderProvider` — supplies an `AgentProviderRuntime` to the tree.\n  Pass `destroyOnUnmount` to destroy the runtime when the provider unmounts.\n- `AgentProviderChat` — inline reference chat surface: transcript, composer,\n  connection/permission status, approvals, and tool activity.\n- `AgentProviderLauncher` — toggleable button that opens an `AgentProviderChat`\n  panel. The panel stays mounted while closed and fades/slides via CSS\n  (driven by `data-open` on the launcher wrapper), so the transcript\n  survives open/close; this also means the chat's auto-connect probe fires\n  when the launcher mounts, not on first open. Placement is a first-class\n  host choice: pass `placement` (`bottom-right` default, also `bottom-left`,\n  `top-right`, `top-left`) and optional `insets` (`{ top, right, bottom, left }`\n  as px numbers or CSS lengths). These set `data-placement` and the\n  `--agent-provider-inset-*` custom properties, so a host stylesheet can\n  drive the same knobs without a prop. To show/hide the whole launcher with\n  the same fade (e.g. while probing for the extension), set `visible={false}`\n  or `data-visible=\"false\"` on the `.agent-provider-launcher` element.\n\n**New in 0.1.5** — `toolResultRenderer` prop on `AgentProviderChat` and\n`AgentProviderLauncher`. When provided, the expanded tool-call Result section\nshows a `[rendered|pretty|raw]` button group that fades in. \"rendered\" calls\nthe host function with the full `ToolActivity` and displays its React output.\nWithout a renderer, the toggle shows `[pretty|raw]`.\n\n```tsx\nimport type { ToolResultRenderer } from \"@agent-provider/react\";\n\nconst renderResult: ToolResultRenderer = (activity) => {\n  if (activity.toolName === \"get_weather\") {\n    return <WeatherCard data={activity.output} />;\n  }\n  return <pre>{JSON.stringify(activity.output, null, 2)}</pre>;\n};\n\n<AgentProviderChat toolResultRenderer={renderResult} />;\n```\n\n**New in 0.1.4** — additional props on `AgentProviderChat` and\n`AgentProviderLauncher`:\n\n| Prop               | Type                                                                      | Default | Purpose                                                                          |\n| ------------------ | ------------------------------------------------------------------------- | ------- | -------------------------------------------------------------------------------- |\n| `headerLabel`      | `string \\| ((info: { toolCount: number; modelLabel: string }) => string)` | auto    | Override the header subtitle. Default: `Page tools (n) · Model: gpt-5-mini high` |\n| `thinkingColor`    | `string`                                                                  | accent  | CSS color for thinking dots (also via `--agent-provider-thinking`)               |\n| `markdown`         | `boolean`                                                                 | `true`  | Render assistant messages with markdown formatting                               |\n| `draggable`        | `boolean`                                                                 | `false` | Let the launcher panel be dragged out of its docked corner                       |\n| `showToolActivity` | `boolean`                                                                 | `true`  | Show collapsible tool-call indicators                                            |\n\nAlso new in 0.1.4: assistant message role label is \"Agent\" (was\n\"AgentProvider\"). Tool-call indicators show live status dots, tool name, and\nphase; click to expand args/results (collapsed by default). Error messages show\na warning icon in the far empty space of each message row. The launcher's\n`draggable` prop adds a drag handle to pop the panel out to a fixed position.\n\nHooks (must be used inside `AgentProviderProvider`):\n\n- `useAgentProviderRuntime()` — the runtime instance.\n- `useAgentProviderState()` — the current `AgentProviderRuntimeState`\n  (connection, run state, messages, approvals, tool activity), subscribed via\n  `useSyncExternalStore`.\n\nProps and component-override types: `AgentProviderProviderProps`,\n`AgentProviderChatProps`, `AgentProviderLauncherProps`, and\n`AgentProviderChatComponents` (override the `Button`, `Textarea`, `Message`,\n`Approval`, and `Activity` slots of the reference UI).\n\n## Notes\n\n- ESM-only. Requires React and React DOM 18.3 or newer (peer dependencies).\n- The reference UI runs in the page's DOM; it needs a browser environment and\n  a page willing to host it. The runtime itself never reads the DOM directly —\n  page context is supplied explicitly, e.g. via `@agent-provider/context`.\n- `styles.css` is only needed for the reference UI; headless usage through the\n  hooks needs no stylesheet. The CSS is the package's only declared side\n  effect.\n- Provider credentials are configured in the extension, never in page code.\n  Every page tool keeps ordinary server-side authorization and validation; see\n  the repository's threat model.\n\n## Links\n\n- Repository: <https://github.com/clankercode/agent-provider>\n- `@agent-provider/runtime` — headless runtime, tools, approvals, run state.\n- `@agent-provider/context` — bounded, revisioned page-context extraction.\n- `examples/operations-dashboard` in the repository — a runnable trusted-app\n  integration using this package.\n\n## License\n\nCC0-1.0 OR Unlicense.\n","readmeFilename":"README.md"}