@bitpalm/ai-agents 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,68 @@
1
+ # @bitpalm/ai-agents
2
+
3
+ Drop-in AI chat agent widget for any website. Works with React, Next.js, Vue, vanilla JS, or a simple script tag.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install @bitpalm/ai-agents
9
+ ```
10
+
11
+ ## React / Next.js
12
+
13
+ ```tsx
14
+ import { BitPalmAgent } from '@bitpalm/ai-agents/react';
15
+
16
+ export default function Layout({ children }) {
17
+ return (
18
+ <>
19
+ {children}
20
+ <BitPalmAgent slug="your-agent-slug" />
21
+ </>
22
+ );
23
+ }
24
+ ```
25
+
26
+ Place it in your root layout so the widget persists across page navigations.
27
+
28
+ ## Vanilla JavaScript
29
+
30
+ ```js
31
+ import { createWidget } from '@bitpalm/ai-agents';
32
+
33
+ const widget = createWidget({ slug: 'your-agent-slug' });
34
+
35
+ // Programmatic control
36
+ widget.open();
37
+ widget.close();
38
+ widget.destroy();
39
+ ```
40
+
41
+ ## Script Tag
42
+
43
+ No build step required — add a single script tag to any HTML page:
44
+
45
+ ```html
46
+ <script src="https://unpkg.com/@bitpalm/ai-agents" data-slug="your-agent-slug"></script>
47
+ ```
48
+
49
+ ## Options
50
+
51
+ | Option | Type | Default | Description |
52
+ |--------|------|---------|-------------|
53
+ | `slug` | `string` | — | **Required.** Your agent slug from the [BitPalm dashboard](https://agents.bitpalm.ae). |
54
+ | `locale` | `string` | auto-detected | Widget language (`"en"`, `"de"`, `"ar"`, …). Falls back to `document.documentElement.lang`. |
55
+ | `baseUrl` | `string` | `"https://agents.bitpalm.ae"` | Agent platform URL. Only change this for self-hosted setups. |
56
+ | `zIndex` | `number` | `9999` | z-index for the widget iframe and chat button. |
57
+
58
+ ## Features
59
+
60
+ - **Visitor Intelligence** — automatically sends page URL, title, and navigation history to the agent for context-aware responses
61
+ - **SPA support** — detects client-side navigation (`pushState` / `replaceState`) and keeps the widget alive across route changes
62
+ - **Trigger bubbles** — proactive chat bubbles configured from the dashboard
63
+ - **Scroll & exit tracking** — scroll depth and exit intent signals for smart triggers
64
+ - **Light & fast** — no dependencies (React is optional), tiny bundle size
65
+
66
+ ## License
67
+
68
+ MIT — [AI Agent Platform by BitPalm](https://agents.bitpalm.ae)
@@ -0,0 +1,2 @@
1
+ "use strict";var BitPalmAgents=(()=>{var S=Object.defineProperty;var P=Object.getOwnPropertyDescriptor;var z=Object.getOwnPropertyNames;var O=Object.prototype.hasOwnProperty;var R=(o,i)=>{for(var c in i)S(o,c,{get:i[c],enumerable:!0})},U=(o,i,c,u)=>{if(i&&typeof i=="object"||typeof i=="function")for(let l of z(i))!O.call(o,l)&&l!==c&&S(o,l,{get:()=>i[l],enumerable:!(u=P(i,l))||u.enumerable});return o};var D=o=>U(S({},"__esModule",{value:!0}),o);var J={};R(J,{createWidget:()=>b});var N="https://agents.bitpalm.ae",r="_bp_";function j(){if(typeof document<"u"){let o=document.documentElement.lang;if(o)return o.slice(0,2).toLowerCase()}return"en"}function b(o){let{slug:i,locale:c=j(),baseUrl:u=N,zIndex:l=9999}=o,n=document,s=n.createElement("iframe"),E=`${u}/t/${i}/widget`;s.src=`${E}${E.includes("?")?"&":"?"}locale=${c}`,s.allow="clipboard-write",s.setAttribute("allowtransparency","true"),s.style.cssText=`position:fixed;bottom:0;right:0;width:0;height:0;border:none;z-index:${l};background:transparent;color-scheme:normal;transition:width .3s,height .3s;`,n.body.appendChild(s);let B=new URL(s.src).origin,e=n.createElement("div");if(e.setAttribute("role","button"),e.setAttribute("aria-label","Chat"),e.style.cssText=`position:fixed;bottom:24px;right:24px;width:56px;height:56px;border-radius:50%;display:none;align-items:center;justify-content:center;cursor:pointer;z-index:${l-1};background:#00ff41;box-shadow:0 0 15px rgba(0,255,65,0.31);transition:transform .2s;`,e.innerHTML='<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M7.9 20A9 9 0 1 0 4 16.1L2 22Z"/></svg>',e.onmouseenter=()=>{e.style.transform="scale(1.1)"},e.onmouseleave=()=>{e.style.transform="scale(1)"},e.onclick=()=>W(),n.body.appendChild(e),!n.getElementById("_bp_fade")){let t=n.createElement("style");t.id="_bp_fade",t.textContent="@keyframes _bp_fade{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}",n.head.appendChild(t)}let d=null,g=()=>{d&&(d.remove(),d=null)},I=t=>{if(t.origin===B){if(t.data?.type==="bitpalm-widget-config"){t.data.primaryColor&&(e.style.background=t.data.primaryColor,e.style.boxShadow=t.data.chatShadow==="none"?"none":`0 0 15px ${t.data.primaryColor}50`);let p=t.data.chatButtonIconColor||"black";if(t.data.chatButtonIconSvg){e.innerHTML="";let a=n.createElement("span");a.style.cssText=`display:flex;align-items:center;justify-content:center;width:24px;height:24px;color:${p}`,a.innerHTML=t.data.chatButtonIconSvg,e.appendChild(a)}else{let a=e.querySelector("svg");a&&(a.style.stroke=p)}e.style.display="flex"}if(t.data?.type==="bitpalm-widget-resize"&&(s.style.width=`${t.data.width}px`,s.style.height=`${t.data.height}px`,e.style.display=t.data.width>0?"none":"flex"),t.data?.type==="bitpalm-trigger-show"){g(),d=n.createElement("div"),d.style.cssText=`position:fixed;bottom:90px;right:24px;max-width:240px;background:#fff;border-radius:16px;padding:12px 32px 12px 12px;box-shadow:0 2px 20px rgba(0,0,0,0.08);cursor:pointer;z-index:${l-1};font-family:system-ui,sans-serif;animation:_bp_fade .3s;`;let p=(t.data.message||"").replace(/</g,"&lt;");d.innerHTML=`<p style="font-size:14px;color:#1f2937;margin:0;">${p}</p><div style="position:absolute;bottom:-8px;right:20px;width:0;height:0;border-left:8px solid transparent;border-right:8px solid transparent;border-top:8px solid #fff;"></div>`;let a=n.createElement("button");a.style.cssText="position:absolute;top:-8px;right:-8px;width:28px;height:28px;border-radius:50%;background:#fff;border:none;box-shadow:0 1px 4px rgba(0,0,0,0.1);cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:14px;color:#9ca3af;",a.innerHTML="&#10005;",a.onclick=H=>{H.stopPropagation(),g(),s.contentWindow?.postMessage({type:"bitpalm-trigger-dismiss"},"*")},d.onclick=()=>{g(),e.style.display="none",s.contentWindow?.postMessage({type:"bitpalm-trigger-engaged"},"*")},d.appendChild(a),n.body.appendChild(d)}t.data?.type==="bitpalm-trigger-hide"&&g()}};window.addEventListener("message",I);let h=parseInt(sessionStorage.getItem(`${r}pages`)||"0")+1;sessionStorage.setItem(`${r}pages`,String(h));let m=JSON.parse(sessionStorage.getItem(`${r}hist`)||"[]");m.push(location.href),m.length>20&&(m=m.slice(-20)),sessionStorage.setItem(`${r}hist`,JSON.stringify(m));let L=Date.now(),f=parseInt(sessionStorage.getItem(`${r}site_start`)||"0");f||(f=L,sessionStorage.setItem(`${r}site_start`,String(f))),s.addEventListener("load",()=>{let t=!!localStorage.getItem(`${r}visited`);s.contentWindow?.postMessage({type:"bitpalm-parent-context",url:location.href,title:n.title,returning:t,pageCount:h,pageHistory:m,loadedAt:L,siteStart:f,locale:c},"*"),t||localStorage.setItem(`${r}visited`,"1")});let T=history.pushState.bind(history),M=history.replaceState.bind(history),y=()=>{h++,sessionStorage.setItem(`${r}pages`,String(h));let t=JSON.parse(sessionStorage.getItem(`${r}hist`)||"[]");t.push(location.href),t.length>20&&t.splice(0,t.length-20),sessionStorage.setItem(`${r}hist`,JSON.stringify(t)),s.contentWindow?.postMessage({type:"bitpalm-page-change",url:location.href,title:n.title,pageCount:h,pageHistory:t,loadedAt:Date.now()},"*")};history.pushState=function(...t){T(...t),y()},history.replaceState=function(...t){M(...t),y()},window.addEventListener("popstate",y);let $=-1,x,k=()=>{clearTimeout(x),x=setTimeout(()=>{let t=Math.max(n.documentElement.scrollHeight,n.body.scrollHeight)-window.innerHeight,p=t>0?Math.round(window.scrollY/t*100):100;p!==$&&($=p,s.contentWindow?.postMessage({type:"bitpalm-scroll-depth",percent:p},"*"))},500)};window.addEventListener("scroll",k,{passive:!0});let _=t=>{t.clientY<=0&&s.contentWindow?.postMessage({type:"bitpalm-exit-intent"},"*")};n.addEventListener("mouseout",_);let w,A=!1,v=()=>{clearTimeout(w),!A&&(w=setTimeout(()=>{A=!0,s.contentWindow?.postMessage({type:"bitpalm-inactivity"},"*")},15e3))},C=["mousemove","keydown","scroll","touchstart"];C.forEach(t=>n.addEventListener(t,v,{passive:!0})),v();let W=()=>{e.style.display="none",g(),s.contentWindow?.postMessage({type:"bitpalm-open"},"*")};return{open:W,close:()=>{s.contentWindow?.postMessage({type:"bitpalm-close"},"*")},destroy:()=>{window.removeEventListener("message",I),window.removeEventListener("scroll",k),window.removeEventListener("popstate",y),n.removeEventListener("mouseout",_),C.forEach(t=>n.removeEventListener(t,v)),clearTimeout(x),clearTimeout(w),history.pushState=T,history.replaceState=M,g(),e.remove(),s.remove()}}}if(typeof document<"u"){let o=document.currentScript;if(o?.dataset.slug){let i=()=>{b({slug:o.dataset.slug,locale:o.dataset.locale,baseUrl:o.dataset.baseUrl,zIndex:o.dataset.zIndex?Number(o.dataset.zIndex):void 0})};document.readyState==="loading"?document.addEventListener("DOMContentLoaded",i):i()}}return D(J);})();
2
+ //# sourceMappingURL=widget.global.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts","../src/widget.ts"],"sourcesContent":["export { createWidget } from \"./widget\";\nexport type { BitPalmAgentOptions, BitPalmAgentInstance } from \"./types\";\n\nimport { createWidget } from \"./widget\";\n\n/**\n * Auto-init from script tag:\n * <script src=\"https://cdn.bitpalm.ae/widget.js\" data-slug=\"my-agent\"></script>\n */\nif (typeof document !== \"undefined\") {\n const script = document.currentScript as HTMLScriptElement | null;\n if (script?.dataset.slug) {\n const init = () => {\n createWidget({\n slug: script!.dataset.slug!,\n locale: script!.dataset.locale,\n baseUrl: script!.dataset.baseUrl,\n zIndex: script!.dataset.zIndex ? Number(script!.dataset.zIndex) : undefined,\n });\n };\n\n if (document.readyState === \"loading\") {\n document.addEventListener(\"DOMContentLoaded\", init);\n } else {\n init();\n }\n }\n}\n","import type { BitPalmAgentOptions, BitPalmAgentInstance } from \"./types\";\n\nconst DEFAULT_BASE_URL = \"https://agents.bitpalm.ae\";\nconst STORAGE_PREFIX = \"_bp_\";\n\nfunction detectLocale(): string {\n if (typeof document !== \"undefined\") {\n const lang = document.documentElement.lang;\n if (lang) return lang.slice(0, 2).toLowerCase();\n }\n return \"en\";\n}\n\nexport function createWidget(options: BitPalmAgentOptions): BitPalmAgentInstance {\n const {\n slug,\n locale = detectLocale(),\n baseUrl = DEFAULT_BASE_URL,\n zIndex = 9999,\n } = options;\n\n const d = document;\n\n // --- Iframe ---\n const iframe = d.createElement(\"iframe\");\n const widgetUrl = `${baseUrl}/t/${slug}/widget`;\n iframe.src = `${widgetUrl}${widgetUrl.includes(\"?\") ? \"&\" : \"?\"}locale=${locale}`;\n iframe.allow = \"clipboard-write\";\n iframe.setAttribute(\"allowtransparency\", \"true\");\n iframe.style.cssText = `position:fixed;bottom:0;right:0;width:0;height:0;border:none;z-index:${zIndex};background:transparent;color-scheme:normal;transition:width .3s,height .3s;`;\n d.body.appendChild(iframe);\n\n const origin = new URL(iframe.src).origin;\n\n // --- Native launcher button ---\n const btn = d.createElement(\"div\");\n btn.setAttribute(\"role\", \"button\");\n btn.setAttribute(\"aria-label\", \"Chat\");\n btn.style.cssText = `position:fixed;bottom:24px;right:24px;width:56px;height:56px;border-radius:50%;display:none;align-items:center;justify-content:center;cursor:pointer;z-index:${zIndex - 1};background:#00ff41;box-shadow:0 0 15px rgba(0,255,65,0.31);transition:transform .2s;`;\n btn.innerHTML = '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"black\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M7.9 20A9 9 0 1 0 4 16.1L2 22Z\"/></svg>';\n btn.onmouseenter = () => { btn.style.transform = \"scale(1.1)\"; };\n btn.onmouseleave = () => { btn.style.transform = \"scale(1)\"; };\n btn.onclick = () => openWidget();\n d.body.appendChild(btn);\n\n // --- Fade animation for trigger bubbles ---\n if (!d.getElementById(\"_bp_fade\")) {\n const s = d.createElement(\"style\");\n s.id = \"_bp_fade\";\n s.textContent = \"@keyframes _bp_fade{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}\";\n d.head.appendChild(s);\n }\n\n // --- Trigger bubble ---\n let bubble: HTMLDivElement | null = null;\n const removeBubble = () => {\n if (bubble) { bubble.remove(); bubble = null; }\n };\n\n // --- postMessage handler ---\n const handleMessage = (e: MessageEvent) => {\n if (e.origin !== origin) return;\n\n // Widget config (colors, icon)\n if (e.data?.type === \"bitpalm-widget-config\") {\n if (e.data.primaryColor) {\n btn.style.background = e.data.primaryColor;\n btn.style.boxShadow = e.data.chatShadow === \"none\" ? \"none\" : `0 0 15px ${e.data.primaryColor}50`;\n }\n const ic = e.data.chatButtonIconColor || \"black\";\n if (e.data.chatButtonIconSvg) {\n btn.innerHTML = \"\";\n const sp = d.createElement(\"span\");\n sp.style.cssText = `display:flex;align-items:center;justify-content:center;width:24px;height:24px;color:${ic}`;\n sp.innerHTML = e.data.chatButtonIconSvg;\n btn.appendChild(sp);\n } else {\n const sv = btn.querySelector(\"svg\");\n if (sv) (sv as SVGElement).style.stroke = ic;\n }\n btn.style.display = \"flex\";\n }\n\n // Resize\n if (e.data?.type === \"bitpalm-widget-resize\") {\n iframe.style.width = `${e.data.width}px`;\n iframe.style.height = `${e.data.height}px`;\n btn.style.display = e.data.width > 0 ? \"none\" : \"flex\";\n }\n\n // Trigger bubble show\n if (e.data?.type === \"bitpalm-trigger-show\") {\n removeBubble();\n bubble = d.createElement(\"div\");\n bubble.style.cssText = `position:fixed;bottom:90px;right:24px;max-width:240px;background:#fff;border-radius:16px;padding:12px 32px 12px 12px;box-shadow:0 2px 20px rgba(0,0,0,0.08);cursor:pointer;z-index:${zIndex - 1};font-family:system-ui,sans-serif;animation:_bp_fade .3s;`;\n const msg = (e.data.message || \"\").replace(/</g, \"&lt;\");\n bubble.innerHTML = `<p style=\"font-size:14px;color:#1f2937;margin:0;\">${msg}</p><div style=\"position:absolute;bottom:-8px;right:20px;width:0;height:0;border-left:8px solid transparent;border-right:8px solid transparent;border-top:8px solid #fff;\"></div>`;\n const close = d.createElement(\"button\");\n close.style.cssText = \"position:absolute;top:-8px;right:-8px;width:28px;height:28px;border-radius:50%;background:#fff;border:none;box-shadow:0 1px 4px rgba(0,0,0,0.1);cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:14px;color:#9ca3af;\";\n close.innerHTML = \"&#10005;\";\n close.onclick = (ev) => { ev.stopPropagation(); removeBubble(); iframe.contentWindow?.postMessage({ type: \"bitpalm-trigger-dismiss\" }, \"*\"); };\n bubble.onclick = () => { removeBubble(); btn.style.display = \"none\"; iframe.contentWindow?.postMessage({ type: \"bitpalm-trigger-engaged\" }, \"*\"); };\n bubble.appendChild(close);\n d.body.appendChild(bubble);\n }\n\n // Trigger bubble hide\n if (e.data?.type === \"bitpalm-trigger-hide\") { removeBubble(); }\n };\n window.addEventListener(\"message\", handleMessage);\n\n // --- Visitor Intelligence: page counter + history ---\n let pageCount = parseInt(sessionStorage.getItem(`${STORAGE_PREFIX}pages`) || \"0\") + 1;\n sessionStorage.setItem(`${STORAGE_PREFIX}pages`, String(pageCount));\n\n let hist: string[] = JSON.parse(sessionStorage.getItem(`${STORAGE_PREFIX}hist`) || \"[]\");\n hist.push(location.href);\n if (hist.length > 20) hist = hist.slice(-20);\n sessionStorage.setItem(`${STORAGE_PREFIX}hist`, JSON.stringify(hist));\n\n const loadedAt = Date.now();\n let siteStart = parseInt(sessionStorage.getItem(`${STORAGE_PREFIX}site_start`) || \"0\");\n if (!siteStart) {\n siteStart = loadedAt;\n sessionStorage.setItem(`${STORAGE_PREFIX}site_start`, String(siteStart));\n }\n\n // --- Send parent context on iframe load ---\n iframe.addEventListener(\"load\", () => {\n const returning = !!localStorage.getItem(`${STORAGE_PREFIX}visited`);\n iframe.contentWindow?.postMessage({\n type: \"bitpalm-parent-context\",\n url: location.href,\n title: d.title,\n returning,\n pageCount,\n pageHistory: hist,\n loadedAt,\n siteStart,\n locale,\n }, \"*\");\n if (!returning) localStorage.setItem(`${STORAGE_PREFIX}visited`, \"1\");\n });\n\n // --- SPA navigation detection ---\n const origPush = history.pushState.bind(history);\n const origReplace = history.replaceState.bind(history);\n\n const onNav = () => {\n pageCount++;\n sessionStorage.setItem(`${STORAGE_PREFIX}pages`, String(pageCount));\n const h: string[] = JSON.parse(sessionStorage.getItem(`${STORAGE_PREFIX}hist`) || \"[]\");\n h.push(location.href);\n if (h.length > 20) h.splice(0, h.length - 20);\n sessionStorage.setItem(`${STORAGE_PREFIX}hist`, JSON.stringify(h));\n iframe.contentWindow?.postMessage({\n type: \"bitpalm-page-change\",\n url: location.href,\n title: d.title,\n pageCount,\n pageHistory: h,\n loadedAt: Date.now(),\n }, \"*\");\n };\n\n history.pushState = function (...args: Parameters<typeof history.pushState>) {\n origPush(...args);\n onNav();\n };\n history.replaceState = function (...args: Parameters<typeof history.replaceState>) {\n origReplace(...args);\n onNav();\n };\n window.addEventListener(\"popstate\", onNav);\n\n // --- Scroll depth tracking ---\n let lastScrollDepth = -1;\n let scrollTimeout: ReturnType<typeof setTimeout>;\n const handleScroll = () => {\n clearTimeout(scrollTimeout);\n scrollTimeout = setTimeout(() => {\n const total = Math.max(d.documentElement.scrollHeight, d.body.scrollHeight) - window.innerHeight;\n const pct = total > 0 ? Math.round(window.scrollY / total * 100) : 100;\n if (pct !== lastScrollDepth) {\n lastScrollDepth = pct;\n iframe.contentWindow?.postMessage({ type: \"bitpalm-scroll-depth\", percent: pct }, \"*\");\n }\n }, 500);\n };\n window.addEventListener(\"scroll\", handleScroll, { passive: true });\n\n // --- Exit intent ---\n const handleMouseOut = (e: MouseEvent) => {\n if (e.clientY <= 0) {\n iframe.contentWindow?.postMessage({ type: \"bitpalm-exit-intent\" }, \"*\");\n }\n };\n d.addEventListener(\"mouseout\", handleMouseOut);\n\n // --- Inactivity detection (15s) ---\n let idleTimer: ReturnType<typeof setTimeout>;\n let idleFired = false;\n const resetIdle = () => {\n clearTimeout(idleTimer);\n if (idleFired) return;\n idleTimer = setTimeout(() => {\n idleFired = true;\n iframe.contentWindow?.postMessage({ type: \"bitpalm-inactivity\" }, \"*\");\n }, 15_000);\n };\n const idleEvents = [\"mousemove\", \"keydown\", \"scroll\", \"touchstart\"] as const;\n idleEvents.forEach((ev) => d.addEventListener(ev, resetIdle, { passive: true }));\n resetIdle();\n\n // --- Public API ---\n const openWidget = () => {\n btn.style.display = \"none\";\n removeBubble();\n iframe.contentWindow?.postMessage({ type: \"bitpalm-open\" }, \"*\");\n };\n\n const closeWidget = () => {\n iframe.contentWindow?.postMessage({ type: \"bitpalm-close\" }, \"*\");\n };\n\n const destroy = () => {\n window.removeEventListener(\"message\", handleMessage);\n window.removeEventListener(\"scroll\", handleScroll);\n window.removeEventListener(\"popstate\", onNav);\n d.removeEventListener(\"mouseout\", handleMouseOut);\n idleEvents.forEach((ev) => d.removeEventListener(ev, resetIdle));\n clearTimeout(scrollTimeout);\n clearTimeout(idleTimer);\n history.pushState = origPush;\n history.replaceState = origReplace;\n removeBubble();\n btn.remove();\n iframe.remove();\n };\n\n return { open: openWidget, close: closeWidget, destroy };\n}\n"],"mappings":"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","names":["src_exports","__export","createWidget","DEFAULT_BASE_URL","STORAGE_PREFIX","detectLocale","lang","createWidget","options","slug","locale","baseUrl","zIndex","d","iframe","widgetUrl","origin","btn","openWidget","s","bubble","removeBubble","handleMessage","e","ic","sp","sv","msg","close","ev","pageCount","hist","loadedAt","siteStart","returning","origPush","origReplace","onNav","h","args","lastScrollDepth","scrollTimeout","handleScroll","total","pct","handleMouseOut","idleTimer","idleFired","resetIdle","idleEvents","script","init","createWidget"]}
package/package.json CHANGED
@@ -1,18 +1,16 @@
1
1
  {
2
2
  "name": "@bitpalm/ai-agents",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "description": "Drop-in AI chat agent widget for any website. Includes visitor intelligence, SPA navigation tracking, trigger bubbles, and more.",
5
5
  "license": "MIT",
6
- "author": "BitPalm <business@bitpalm.ae>",
7
- "repository": {
8
- "type": "git",
9
- "url": "https://github.com/BitPalm-LLC/ai-agents-sdk"
10
- },
6
+ "author": "BitPalm <agents@bitpalm.ae>",
11
7
  "keywords": ["ai", "chatbot", "widget", "bitpalm", "agents", "chat"],
8
+ "website": "https://agents.bitpalm.ae",
12
9
  "type": "module",
13
10
  "main": "./dist/index.cjs",
14
11
  "module": "./dist/index.js",
15
12
  "types": "./dist/index.d.ts",
13
+ "unpkg": "./dist/widget.global.js",
16
14
  "exports": {
17
15
  ".": {
18
16
  "types": "./dist/index.d.ts",