{"_id":"@dwn-protocol/sign-assistant-sdk","_rev":"40-4ee7f08f54dba83f78cca0fc6e00f966","name":"@dwn-protocol/sign-assistant-sdk","dist-tags":{"latest":"0.1.19"},"versions":{"0.1.0":{"name":"@dwn-protocol/sign-assistant-sdk","version":"0.1.0","_id":"@dwn-protocol/sign-assistant-sdk@0.1.0","maintainers":[{"name":"213374you","email":"tobrien820@gmail.com"},{"name":"devtestingstuff","email":"nolanjacobson@protonmail.com"},{"name":"jdutchak","email":"john.dutchak@gmail.com"}],"dist":{"shasum":"68475dbc2c40bf03c790f44dd359f0c6a9cb227a","tarball":"https://registry.npmjs.org/@dwn-protocol/sign-assistant-sdk/-/sign-assistant-sdk-0.1.0.tgz","fileCount":39,"integrity":"sha512-FvEL4QfKpu83rcz47YSY6HC5eVDQSRxa3lgeiTNOFequoVtrmS7LHT/sdEV9ShB4nwiv5xRRTaopt0ksJIIKzg==","signatures":[{"sig":"MEQCIDHNNPayLFvsLf7eQ4aK1ktj2tT5zGgdpBcAyrDaUF7lAiB9LoH+i1pH80q8c2zmv1v6vA10/ykOhqbcZEfg5zkjFA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":76780},"main":"./dist/sdk/index.js","type":"module","types":"./dist/sdk/index.d.ts","exports":{".":{"types":"./dist/sdk/index.d.ts","import":"./dist/sdk/index.js"},"./server":{"types":"./dist/sdk/server/index.d.ts","import":"./dist/sdk/server/index.js"},"./styles":"./dist/sdk/styles.css","./components":{"types":"./dist/sdk/components/index.d.ts","import":"./dist/sdk/components/index.js"}},"gitHead":"a79ed9a78f09c31f98f9711657c05080b82840dc","scripts":{"dev":"next dev --port 3007","lint":"eslint","build":"next build","start":"next start","publish":"npm publish","build:sdk":"tsc -p tsconfig.sdk.json && npm run copy:sdk-assets","publish:beta":"npm publish --tag beta","publish:alpha":"npm publish --tag alpha","prepublishOnly":"npm run build:sdk","copy:sdk-assets":"mkdir -p dist/sdk && cp src/sdk/styles.css dist/sdk/styles.css"},"_npmUser":{"name":"devtestingstuff","email":"nolanjacobson@protonmail.com"},"_npmVersion":"11.4.2","description":"AI-powered assistant SDK for Abaxx Sign with MCP integration","directories":{},"_nodeVersion":"24.4.1","dependencies":{"ai":"^5.0.77","zod":"^4.1.12","next":"16.0.0","react":"19.2.0","unpdf":"^1.3.2","react-dom":"19.2.0","remark-gfm":"^4.0.1","highlight.js":"^11.11.1","lucide-react":"^0.546.0","@ai-sdk/openai":"^2.0.53","react-markdown":"^10.1.0","@types/pdf-parse":"^1.1.5","rehype-highlight":"^7.0.2","@ai-sdk/anthropic":"^2.0.37","@assistant-ui/react":"^0.11.34","@modelcontextprotocol/sdk":"^1.20.1","@assistant-ui/react-ai-sdk":"^1.1.8"},"publishConfig":{"access":"restricted"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","typescript":"^5","@types/node":"^20","tailwindcss":"^4","@types/react":"^19","@types/react-dom":"^19","eslint-config-next":"16.0.0","@tailwindcss/postcss":"^4"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"peerDependenciesMeta":{"react":{"optional":false},"react-dom":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/sign-assistant-sdk_0.1.0_1762221884137_0.26509036829632615","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@dwn-protocol/sign-assistant-sdk","version":"0.1.1","_id":"@dwn-protocol/sign-assistant-sdk@0.1.1","maintainers":[{"name":"213374you","email":"tobrien820@gmail.com"},{"name":"devtestingstuff","email":"nolanjacobson@protonmail.com"},{"name":"jdutchak","email":"john.dutchak@gmail.com"}],"dist":{"shasum":"c49e42ad9dbec75a47e04433a0656567eb9cad3b","tarball":"https://registry.npmjs.org/@dwn-protocol/sign-assistant-sdk/-/sign-assistant-sdk-0.1.1.tgz","fileCount":39,"integrity":"sha512-BlkLio2bZgBhDdLpWUwGyiHok7DwE9EYS5TjvaokZYMTmWrfi3LpafTTcvvdu0sxfpaunrLSwEpMjDeMi0e7Gg==","signatures":[{"sig":"MEQCID+dSbr+6ZJqV2X+VZ3mHFAovm9UJtRMWevf4bcCsecKAiAIE9T0CDNHFtae3Zv2xBwf89br6lGFVk7XfaXV/8WZCw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":78479},"main":"./dist/sdk/index.js","type":"module","types":"./dist/sdk/index.d.ts","exports":{".":{"types":"./dist/sdk/index.d.ts","import":"./dist/sdk/index.js"},"./server":{"types":"./dist/sdk/server/index.d.ts","import":"./dist/sdk/server/index.js"},"./styles":"./dist/sdk/styles.css","./components":{"types":"./dist/sdk/components/index.d.ts","import":"./dist/sdk/components/index.js"}},"gitHead":"4408d8d7f8787e981fd55d0da31d41222cea249f","scripts":{"dev":"next dev --port 3007","lint":"eslint","build":"next build","start":"next start","publish":"npm publish","build:sdk":"tsc -p tsconfig.sdk.json && npm run copy:sdk-assets","publish:beta":"npm publish --tag beta","publish:alpha":"npm publish --tag alpha","prepublishOnly":"npm run build:sdk","copy:sdk-assets":"mkdir -p dist/sdk && cp src/sdk/styles.css dist/sdk/styles.css"},"_npmUser":{"name":"devtestingstuff","email":"nolanjacobson@protonmail.com"},"_npmVersion":"11.4.2","description":"AI-powered assistant SDK for Abaxx Sign with MCP integration","directories":{},"_nodeVersion":"24.4.1","dependencies":{"ai":"^5.0.77","zod":"^4.1.12","next":"16.0.0","react":"19.2.0","unpdf":"^1.3.2","react-dom":"19.2.0","remark-gfm":"^4.0.1","highlight.js":"^11.11.1","lucide-react":"^0.546.0","@ai-sdk/openai":"^2.0.53","react-markdown":"^10.1.0","@types/pdf-parse":"^1.1.5","rehype-highlight":"^7.0.2","@ai-sdk/anthropic":"^2.0.37","@assistant-ui/react":"^0.11.34","@modelcontextprotocol/sdk":"^1.20.1","@assistant-ui/react-ai-sdk":"^1.1.8"},"publishConfig":{"access":"restricted"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","typescript":"^5","@types/node":"^20","tailwindcss":"^4","@types/react":"^19","@types/react-dom":"^19","eslint-config-next":"16.0.0","@tailwindcss/postcss":"^4"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"peerDependenciesMeta":{"react":{"optional":false},"react-dom":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/sign-assistant-sdk_0.1.1_1762222275914_0.7303828926615943","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@dwn-protocol/sign-assistant-sdk","version":"0.1.2","_id":"@dwn-protocol/sign-assistant-sdk@0.1.2","maintainers":[{"name":"213374you","email":"tobrien820@gmail.com"},{"name":"devtestingstuff","email":"nolanjacobson@protonmail.com"},{"name":"jdutchak","email":"john.dutchak@gmail.com"}],"dist":{"shasum":"1cb58ddd255d9db0ccd5130e648bb088872593e3","tarball":"https://registry.npmjs.org/@dwn-protocol/sign-assistant-sdk/-/sign-assistant-sdk-0.1.2.tgz","fileCount":39,"integrity":"sha512-PZqvZuQUfQTs80PxAci/8/bEyVyigxG42Feyd+ko+vPpBiq0OJn/tDe+QopFGk0MQolrOWcDoZnYp8JWkpBpVg==","signatures":[{"sig":"MEUCIFzWS3oIdIaWR49ZMZUp6rxzOL2PU1C+r6E5eVUxIcAaAiEAqs3Fk0yTaVjbraNfOQwaj+G2MMFRdaIAa8AJmc1koMY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":78544},"main":"./dist/sdk/index.js","type":"module","types":"./dist/sdk/index.d.ts","exports":{".":{"types":"./dist/sdk/index.d.ts","import":"./dist/sdk/index.js"},"./server":{"types":"./dist/sdk/server/index.d.ts","import":"./dist/sdk/server/index.js"},"./styles":"./dist/sdk/styles.css","./components":{"types":"./dist/sdk/components/index.d.ts","import":"./dist/sdk/components/index.js"}},"gitHead":"4408d8d7f8787e981fd55d0da31d41222cea249f","scripts":{"dev":"next dev --port 3007","lint":"eslint","build":"next build","start":"next start","publish":"npm publish","build:sdk":"tsc -p tsconfig.sdk.json && npm run copy:sdk-assets","publish:beta":"npm publish --tag beta","publish:alpha":"npm publish --tag alpha","prepublishOnly":"npm run build:sdk","copy:sdk-assets":"mkdir -p dist/sdk && cp src/sdk/styles.css dist/sdk/styles.css"},"_npmUser":{"name":"devtestingstuff","email":"nolanjacobson@protonmail.com"},"_npmVersion":"11.4.2","description":"AI-powered assistant SDK for Abaxx Sign with MCP integration","directories":{},"_nodeVersion":"24.4.1","dependencies":{"ai":"^5.0.77","next":"16.0.0","react":"19.2.0","unpdf":"^1.3.2","react-dom":"19.2.0","remark-gfm":"^4.0.1","highlight.js":"^11.11.1","lucide-react":"^0.546.0","@ai-sdk/openai":"^2.0.53","react-markdown":"^10.1.0","@types/pdf-parse":"^1.1.5","rehype-highlight":"^7.0.2","@ai-sdk/anthropic":"^2.0.37","@assistant-ui/react":"^0.11.34","@modelcontextprotocol/sdk":"^1.20.1","@assistant-ui/react-ai-sdk":"^1.1.8"},"publishConfig":{"access":"restricted"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^4.1.12","eslint":"^9","typescript":"^5","@types/node":"^20","tailwindcss":"^4","@types/react":"^19","@types/react-dom":"^19","eslint-config-next":"16.0.0","@tailwindcss/postcss":"^4"},"peerDependencies":{"zod":"^4.1.0","react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"peerDependenciesMeta":{"zod":{"optional":false},"react":{"optional":false},"react-dom":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/sign-assistant-sdk_0.1.2_1762222563425_0.9586899974828438","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@dwn-protocol/sign-assistant-sdk","version":"0.1.3","_id":"@dwn-protocol/sign-assistant-sdk@0.1.3","maintainers":[{"name":"213374you","email":"tobrien820@gmail.com"},{"name":"devtestingstuff","email":"nolanjacobson@protonmail.com"},{"name":"jdutchak","email":"john.dutchak@gmail.com"}],"dist":{"shasum":"f3df00d652ad4d5f95cb9ba942bbe00cc846143b","tarball":"https://registry.npmjs.org/@dwn-protocol/sign-assistant-sdk/-/sign-assistant-sdk-0.1.3.tgz","fileCount":39,"integrity":"sha512-bxuIROjpKJL/HLFym1joWyLECqRTh7q8Udl3YJOjxMiXamb2hVem/UyIZyzfFtR13MYRkW4yOWqNsv35vmMMpQ==","signatures":[{"sig":"MEUCIDAE0493313GSUmXSseeLq6QbpobhBvH88nqG/BH3aoqAiEAoOyUNTwyLiYNR5jWUtwZrtfzt3ohG4BN5/DvuvzxZ0c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":78479},"main":"./dist/sdk/index.js","type":"module","types":"./dist/sdk/index.d.ts","exports":{".":{"types":"./dist/sdk/index.d.ts","import":"./dist/sdk/index.js"},"./server":{"types":"./dist/sdk/server/index.d.ts","import":"./dist/sdk/server/index.js"},"./styles":"./dist/sdk/styles.css","./components":{"types":"./dist/sdk/components/index.d.ts","import":"./dist/sdk/components/index.js"}},"gitHead":"4408d8d7f8787e981fd55d0da31d41222cea249f","scripts":{"dev":"next dev --port 3007","lint":"eslint","build":"next build","start":"next start","publish":"npm publish","build:sdk":"tsc -p tsconfig.sdk.json && npm run copy:sdk-assets","publish:beta":"npm publish --tag beta","publish:alpha":"npm publish --tag alpha","prepublishOnly":"npm run build:sdk","copy:sdk-assets":"mkdir -p dist/sdk && cp src/sdk/styles.css dist/sdk/styles.css"},"_npmUser":{"name":"devtestingstuff","email":"nolanjacobson@protonmail.com"},"_npmVersion":"11.4.2","description":"AI-powered assistant SDK for Abaxx Sign with MCP integration","directories":{},"_nodeVersion":"24.4.1","dependencies":{"ai":"^5.0.77","zod":"^4.1.12","next":"16.0.0","react":"19.2.0","unpdf":"^1.3.2","react-dom":"19.2.0","remark-gfm":"^4.0.1","highlight.js":"^11.11.1","lucide-react":"^0.546.0","@ai-sdk/openai":"^2.0.53","react-markdown":"^10.1.0","@types/pdf-parse":"^1.1.5","rehype-highlight":"^7.0.2","@ai-sdk/anthropic":"^2.0.37","@assistant-ui/react":"^0.11.34","@modelcontextprotocol/sdk":"^1.20.1","@assistant-ui/react-ai-sdk":"^1.1.8"},"publishConfig":{"access":"restricted"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","typescript":"^5","@types/node":"^20","tailwindcss":"^4","@types/react":"^19","@types/react-dom":"^19","eslint-config-next":"16.0.0","@tailwindcss/postcss":"^4"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"peerDependenciesMeta":{"react":{"optional":false},"react-dom":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/sign-assistant-sdk_0.1.3_1762222710639_0.13807894349537086","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@dwn-protocol/sign-assistant-sdk","version":"0.1.4","_id":"@dwn-protocol/sign-assistant-sdk@0.1.4","maintainers":[{"name":"213374you","email":"tobrien820@gmail.com"},{"name":"devtestingstuff","email":"nolanjacobson@protonmail.com"},{"name":"jdutchak","email":"john.dutchak@gmail.com"}],"dist":{"shasum":"d65d4801e836100a08f98bc581b395d085cf8ae0","tarball":"https://registry.npmjs.org/@dwn-protocol/sign-assistant-sdk/-/sign-assistant-sdk-0.1.4.tgz","fileCount":39,"integrity":"sha512-rg3wlmI9fUVhLpLp9FS8w0na+YIMDZhgB5MFeVC8ebOhz1xvkGl0UkgI3RrfUcsJjBFaPU9E0yMdNqhBSWxQeg==","signatures":[{"sig":"MEYCIQCZporPkgDGTluqJl+rcXf6tEOZComilFhdPj8GTmAtvwIhAJ+sXynwt8SdUutCjZeYyKsnrkcy71HO8q+euCpw87kX","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":78480},"main":"./dist/sdk/index.js","type":"module","types":"./dist/sdk/index.d.ts","exports":{".":{"types":"./dist/sdk/index.d.ts","import":"./dist/sdk/index.js"},"./server":{"types":"./dist/sdk/server/index.d.ts","import":"./dist/sdk/server/index.js"},"./styles":"./dist/sdk/styles.css","./components":{"types":"./dist/sdk/components/index.d.ts","import":"./dist/sdk/components/index.js"}},"gitHead":"feae033bd6d72adb860c3c8bb3bc00f416fe8766","scripts":{"dev":"next dev --port 3007","lint":"eslint","build":"next build","start":"next start","publish":"npm publish","build:sdk":"tsc -p tsconfig.sdk.json && npm run copy:sdk-assets","publish:beta":"npm publish --tag beta","publish:alpha":"npm publish --tag alpha","prepublishOnly":"npm run build:sdk","copy:sdk-assets":"mkdir -p dist/sdk && cp src/sdk/styles.css dist/sdk/styles.css"},"_npmUser":{"name":"devtestingstuff","email":"nolanjacobson@protonmail.com"},"_npmVersion":"11.4.2","description":"AI-powered assistant SDK for Abaxx Sign with MCP integration","directories":{},"_nodeVersion":"24.4.1","dependencies":{"ai":"^5.0.77","zod":"^4.1.12","next":"16.0.0","react":"19.2.0","unpdf":"^1.3.2","react-dom":"19.2.0","remark-gfm":"^4.0.1","highlight.js":"^11.11.1","lucide-react":"^0.546.0","@ai-sdk/openai":"^2.0.53","react-markdown":"^10.1.0","@types/pdf-parse":"^1.1.5","rehype-highlight":"^7.0.2","@ai-sdk/anthropic":"^2.0.37","@assistant-ui/react":"^0.11.34","@modelcontextprotocol/sdk":"^1.20.1","@assistant-ui/react-ai-sdk":"^1.1.8"},"publishConfig":{"access":"restricted"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","typescript":"^5","@types/node":"^20","tailwindcss":"^4","@types/react":"^19","@types/react-dom":"^19","eslint-config-next":"16.0.0","@tailwindcss/postcss":"^4"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"peerDependenciesMeta":{"react":{"optional":false},"react-dom":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/sign-assistant-sdk_0.1.4_1762265780791_0.46507391438409695","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@dwn-protocol/sign-assistant-sdk","version":"0.1.5","_id":"@dwn-protocol/sign-assistant-sdk@0.1.5","maintainers":[{"name":"213374you","email":"tobrien820@gmail.com"},{"name":"devtestingstuff","email":"nolanjacobson@protonmail.com"},{"name":"jdutchak","email":"john.dutchak@gmail.com"}],"dist":{"shasum":"ab8ee6c54e8a6e315b5237b3fb9c73d8abc277af","tarball":"https://registry.npmjs.org/@dwn-protocol/sign-assistant-sdk/-/sign-assistant-sdk-0.1.5.tgz","fileCount":39,"integrity":"sha512-pZhQYTGzaazn6A68M4dO0dmzuArs8g8wpV0SYhM+xBj1ZCcYyhnaWvj+D018t2NnDXP01bJkUgR0blcWYLyBJg==","signatures":[{"sig":"MEUCIQCDrLsWkEN6ceGnOzWimuRJ9cUYThADInHMPqnWtv5dmQIgKVH4TQDFPfl64ge2wfcx76Ei0ztaAfpgUIh3T2LbO8M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":82186},"main":"./dist/sdk/index.js","type":"module","types":"./dist/sdk/index.d.ts","exports":{".":{"types":"./dist/sdk/index.d.ts","import":"./dist/sdk/index.js"},"./server":{"types":"./dist/sdk/server/index.d.ts","import":"./dist/sdk/server/index.js"},"./styles":"./dist/sdk/styles.css","./components":{"types":"./dist/sdk/components/index.d.ts","import":"./dist/sdk/components/index.js"}},"gitHead":"feae033bd6d72adb860c3c8bb3bc00f416fe8766","scripts":{"dev":"next dev --port 3007","lint":"eslint","build":"next build","start":"next start","publish":"npm publish","build:sdk":"tsc -p tsconfig.sdk.json && npm run copy:sdk-assets","publish:beta":"npm publish --tag beta","publish:alpha":"npm publish --tag alpha","prepublishOnly":"npm run build:sdk","copy:sdk-assets":"mkdir -p dist/sdk && cp src/sdk/styles.css dist/sdk/styles.css"},"_npmUser":{"name":"devtestingstuff","email":"nolanjacobson@protonmail.com"},"_npmVersion":"11.4.2","description":"AI-powered assistant SDK for Abaxx Sign with MCP integration","directories":{},"_nodeVersion":"24.4.1","dependencies":{"ai":"^5.0.77","zod":"^4.1.12","next":"16.0.0","react":"19.2.0","unpdf":"^1.3.2","react-dom":"19.2.0","remark-gfm":"^4.0.1","highlight.js":"^11.11.1","lucide-react":"^0.546.0","@ai-sdk/openai":"^2.0.53","react-markdown":"^10.1.0","@types/pdf-parse":"^1.1.5","rehype-highlight":"^7.0.2","@ai-sdk/anthropic":"^2.0.37","@assistant-ui/react":"^0.11.34","@modelcontextprotocol/sdk":"^1.20.1","@assistant-ui/react-ai-sdk":"^1.1.8"},"publishConfig":{"access":"restricted"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","typescript":"^5","@types/node":"^20","tailwindcss":"^4","@types/react":"^19","@types/react-dom":"^19","eslint-config-next":"16.0.0","@tailwindcss/postcss":"^4"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"peerDependenciesMeta":{"react":{"optional":false},"react-dom":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/sign-assistant-sdk_0.1.5_1762274974359_0.057809903526355955","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@dwn-protocol/sign-assistant-sdk","version":"0.1.6","_id":"@dwn-protocol/sign-assistant-sdk@0.1.6","maintainers":[{"name":"213374you","email":"tobrien820@gmail.com"},{"name":"devtestingstuff","email":"nolanjacobson@protonmail.com"},{"name":"jdutchak","email":"john.dutchak@gmail.com"}],"dist":{"shasum":"a6dbde7143cc15223a2cee0aa1fd20eb2a982cd6","tarball":"https://registry.npmjs.org/@dwn-protocol/sign-assistant-sdk/-/sign-assistant-sdk-0.1.6.tgz","fileCount":39,"integrity":"sha512-rJ1kEtLmUoOkBz8b3dA2ACEmk2SuSvbdBN+rkoRamfWUrSa1DHrZsm8qSNAB8a/OnPYTli0gbOSizS8qljr5HQ==","signatures":[{"sig":"MEYCIQCa3Uq2m4gd1OpljzmRKknzMDype79ggvqgDiGE2RRzggIhAIfo6S+ach6uwXw4r65bdaFCKR/i/D2EBCLyAzlRwF3z","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":82188},"main":"./dist/sdk/index.js","type":"module","types":"./dist/sdk/index.d.ts","exports":{".":{"types":"./dist/sdk/index.d.ts","import":"./dist/sdk/index.js"},"./server":{"types":"./dist/sdk/server/index.d.ts","import":"./dist/sdk/server/index.js"},"./styles":"./dist/sdk/styles.css","./components":{"types":"./dist/sdk/components/index.d.ts","import":"./dist/sdk/components/index.js"}},"gitHead":"9ba7718aedfdaf9cd064f91d748bf78af12e93c7","scripts":{"dev":"next dev --port 3007","lint":"eslint","build":"next build","start":"next start","publish":"npm publish","build:sdk":"tsc -p tsconfig.sdk.json && npm run copy:sdk-assets","publish:beta":"npm publish --tag beta","publish:alpha":"npm publish --tag alpha","prepublishOnly":"npm run build:sdk","copy:sdk-assets":"mkdir -p dist/sdk && cp src/sdk/styles.css dist/sdk/styles.css"},"_npmUser":{"name":"devtestingstuff","email":"nolanjacobson@protonmail.com"},"_npmVersion":"11.4.2","description":"AI-powered assistant SDK for Abaxx Sign with MCP integration","directories":{},"_nodeVersion":"24.4.1","dependencies":{"ai":"^5.0.77","zod":"^4.1.12","next":"16.0.0","react":"^18.0.0","unpdf":"^1.3.2","react-dom":"^18.0.0","remark-gfm":"^4.0.1","highlight.js":"^11.11.1","lucide-react":"^0.546.0","@ai-sdk/openai":"^2.0.53","react-markdown":"^10.1.0","@types/pdf-parse":"^1.1.5","rehype-highlight":"^7.0.2","@ai-sdk/anthropic":"^2.0.37","@assistant-ui/react":"^0.11.34","@modelcontextprotocol/sdk":"^1.20.1","@assistant-ui/react-ai-sdk":"^1.1.8"},"publishConfig":{"access":"restricted"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","typescript":"^5","@types/node":"^20","tailwindcss":"^4","@types/react":"^18","@types/react-dom":"^18","eslint-config-next":"16.0.0","@tailwindcss/postcss":"^4"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"peerDependenciesMeta":{"react":{"optional":false},"react-dom":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/sign-assistant-sdk_0.1.6_1762284223752_0.2850913333046192","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"@dwn-protocol/sign-assistant-sdk","version":"0.1.7","_id":"@dwn-protocol/sign-assistant-sdk@0.1.7","maintainers":[{"name":"213374you","email":"tobrien820@gmail.com"},{"name":"devtestingstuff","email":"nolanjacobson@protonmail.com"},{"name":"jdutchak","email":"john.dutchak@gmail.com"}],"dist":{"shasum":"e729136b4a8dc5aff744fea5fd2d609a021f8b66","tarball":"https://registry.npmjs.org/@dwn-protocol/sign-assistant-sdk/-/sign-assistant-sdk-0.1.7.tgz","fileCount":39,"integrity":"sha512-PPUoEtHL2txNGHEkpicebCYHCViDywZNCAD0wIcMWJVqnS1APi/ak8k7cno3BpKKF38aLqoeITJveMh+YHBS9w==","signatures":[{"sig":"MEYCIQCQrteZmdfuDtlhpfymjJV//RcXG3kwoQF8y4EhroDrcwIhAO1QcX4xd7J7pv/c5sl6LB0utx/aM0VSV8Doki6rmqWN","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":82239},"main":"./dist/sdk/index.js","type":"module","types":"./dist/sdk/index.d.ts","exports":{".":{"types":"./dist/sdk/index.d.ts","import":"./dist/sdk/index.js"},"./server":{"node":{"types":"./dist/sdk/server/index.d.ts","import":"./dist/sdk/server/index.js"},"default":null},"./styles":"./dist/sdk/styles.css","./components":{"types":"./dist/sdk/components/index.d.ts","import":"./dist/sdk/components/index.js"}},"gitHead":"5cc92bedb7a15699293b04943a41625d968b6ee1","scripts":{"dev":"next dev --port 3007","lint":"eslint","build":"next build","start":"next start","publish":"npm publish","build:sdk":"tsc -p tsconfig.sdk.json && npm run copy:sdk-assets","publish:beta":"npm publish --tag beta","publish:alpha":"npm publish --tag alpha","prepublishOnly":"npm run build:sdk","copy:sdk-assets":"mkdir -p dist/sdk && cp src/sdk/styles.css dist/sdk/styles.css"},"_npmUser":{"name":"devtestingstuff","email":"nolanjacobson@protonmail.com"},"_npmVersion":"11.4.2","description":"AI-powered assistant SDK for Abaxx Sign with MCP integration","directories":{},"_nodeVersion":"24.4.1","dependencies":{"ai":"^5.0.77","zod":"^4.1.12","next":"16.0.0","react":"^18.0.0","unpdf":"^1.3.2","react-dom":"^18.0.0","remark-gfm":"^4.0.1","highlight.js":"^11.11.1","lucide-react":"^0.546.0","@ai-sdk/openai":"^2.0.53","react-markdown":"^10.1.0","@types/pdf-parse":"^1.1.5","rehype-highlight":"^7.0.2","@ai-sdk/anthropic":"^2.0.37","@assistant-ui/react":"^0.11.34","@modelcontextprotocol/sdk":"^1.20.1","@assistant-ui/react-ai-sdk":"^1.1.8"},"publishConfig":{"access":"restricted"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","typescript":"^5","@types/node":"^20","tailwindcss":"^4","@types/react":"^18","@types/react-dom":"^18","eslint-config-next":"16.0.0","@tailwindcss/postcss":"^4"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"peerDependenciesMeta":{"react":{"optional":false},"react-dom":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/sign-assistant-sdk_0.1.7_1762284989647_0.15900149655477236","host":"s3://npm-registry-packages-npm-production"}},"0.1.8":{"name":"@dwn-protocol/sign-assistant-sdk","version":"0.1.8","_id":"@dwn-protocol/sign-assistant-sdk@0.1.8","maintainers":[{"name":"213374you","email":"tobrien820@gmail.com"},{"name":"devtestingstuff","email":"nolanjacobson@protonmail.com"},{"name":"jdutchak","email":"john.dutchak@gmail.com"}],"dist":{"shasum":"25fb756ec7926a8b628075ba300ca23b4693fec9","tarball":"https://registry.npmjs.org/@dwn-protocol/sign-assistant-sdk/-/sign-assistant-sdk-0.1.8.tgz","fileCount":39,"integrity":"sha512-ByelbjPKiFheNc+FE4Qo/Orxl5DbQjR5kpVLhEjEr1x0Jg/wDAAiyFqy/OaPOSG1unBzzVa70Y1YuxWE6Ourjg==","signatures":[{"sig":"MEUCIQDa+vv1WSB/2/gvDkTQVnvto5YpGQ4SzLoQ0d0PA/cHUgIgeeC1NaBWku9XfS7yltAALSu1O2o7fLaiuw2zuW5AeQA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":81518},"main":"./dist/sdk/index.js","type":"module","types":"./dist/sdk/index.d.ts","exports":{".":{"types":"./dist/sdk/index.d.ts","import":"./dist/sdk/index.js"},"./server":{"types":"./dist/sdk/server/index.d.ts","import":"./dist/sdk/server/index.js"},"./styles":"./dist/sdk/styles.css","./components":{"types":"./dist/sdk/components/index.d.ts","import":"./dist/sdk/components/index.js"}},"gitHead":"daba40e9ddd0888dab2913f8c3d7c68887fde1ab","scripts":{"dev":"next dev --port 3007","lint":"eslint","build":"next build","start":"next start","publish":"npm publish","build:sdk":"tsc -p tsconfig.sdk.json && npm run copy:sdk-assets","publish:beta":"npm publish --tag beta","publish:alpha":"npm publish --tag alpha","prepublishOnly":"npm run build:sdk","copy:sdk-assets":"mkdir -p dist/sdk && cp src/sdk/styles.css dist/sdk/styles.css"},"_npmUser":{"name":"devtestingstuff","email":"nolanjacobson@protonmail.com"},"_npmVersion":"11.4.2","description":"AI-powered assistant SDK for Abaxx Sign with MCP integration","directories":{},"_nodeVersion":"24.4.1","dependencies":{"ai":"^5.0.77","zod":"^4.1.12","next":"16.0.0","react":"^18.0.0","unpdf":"^1.3.2","react-dom":"^18.0.0","remark-gfm":"^4.0.1","highlight.js":"^11.11.1","lucide-react":"^0.546.0","@ai-sdk/openai":"^2.0.53","react-markdown":"^10.1.0","@types/pdf-parse":"^1.1.5","rehype-highlight":"^7.0.2","@ai-sdk/anthropic":"^2.0.37","@assistant-ui/react":"^0.11.34","@modelcontextprotocol/sdk":"^1.20.1","@assistant-ui/react-ai-sdk":"^1.1.8"},"publishConfig":{"access":"restricted"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","typescript":"^5","@types/node":"^20","tailwindcss":"^4","@types/react":"^18","@types/react-dom":"^18","eslint-config-next":"16.0.0","@tailwindcss/postcss":"^4"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"peerDependenciesMeta":{"react":{"optional":false},"react-dom":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/sign-assistant-sdk_0.1.8_1762285328420_0.8820569758749273","host":"s3://npm-registry-packages-npm-production"}},"0.1.9":{"name":"@dwn-protocol/sign-assistant-sdk","version":"0.1.9","_id":"@dwn-protocol/sign-assistant-sdk@0.1.9","maintainers":[{"name":"213374you","email":"tobrien820@gmail.com"},{"name":"devtestingstuff","email":"nolanjacobson@protonmail.com"},{"name":"jdutchak","email":"john.dutchak@gmail.com"}],"dist":{"shasum":"5df91bf339c4e6b312a41570207e7d66803f8f27","tarball":"https://registry.npmjs.org/@dwn-protocol/sign-assistant-sdk/-/sign-assistant-sdk-0.1.9.tgz","fileCount":39,"integrity":"sha512-jIHkGbmlCevBlf87o6m8A4IBJN5LmU/5Pn3mApSBP5C3kHkXdGiaxCqSM3gDKdw2UT7rK9YP90iZi5gKYEW5Yw==","signatures":[{"sig":"MEUCIQDI/CkKExZ8St5Q6OK7FEmVw+UgY0GE7B+D7viKgVB2swIgBsYs9LheQZEvRENM0nKp43/w+/pM42lCjBE2QgkrRWY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":85652},"main":"./dist/sdk/index.js","type":"module","types":"./dist/sdk/index.d.ts","exports":{".":{"types":"./dist/sdk/index.d.ts","import":"./dist/sdk/index.js"},"./server":{"types":"./dist/sdk/server/index.d.ts","import":"./dist/sdk/server/index.js"},"./styles":"./dist/sdk/styles.css","./components":{"types":"./dist/sdk/components/index.d.ts","import":"./dist/sdk/components/index.js"}},"gitHead":"ff79d12b31f91ea184ae5599313b2303ee393374","scripts":{"dev":"next dev --port 3007","lint":"eslint","build":"next build","start":"next start","publish":"npm publish","build:sdk":"tsc -p tsconfig.sdk.json && npm run copy:sdk-assets","publish:beta":"npm publish --tag beta","publish:alpha":"npm publish --tag alpha","prepublishOnly":"npm run build:sdk","copy:sdk-assets":"mkdir -p dist/sdk && cp src/sdk/styles.css dist/sdk/styles.css"},"_npmUser":{"name":"devtestingstuff","email":"nolanjacobson@protonmail.com"},"_npmVersion":"11.4.2","description":"AI-powered assistant SDK for Abaxx Sign with MCP integration","directories":{},"_nodeVersion":"24.4.1","dependencies":{"ai":"^5.0.77","zod":"^4.1.12","next":"16.0.0","react":"^18.0.0","unpdf":"^1.3.2","react-dom":"^18.0.0","remark-gfm":"^4.0.1","highlight.js":"^11.11.1","lucide-react":"^0.546.0","@ai-sdk/openai":"^2.0.53","react-markdown":"^10.1.0","@types/pdf-parse":"^1.1.5","rehype-highlight":"^7.0.2","@ai-sdk/anthropic":"^2.0.37","@assistant-ui/react":"^0.11.34","@modelcontextprotocol/sdk":"^1.20.1","@assistant-ui/react-ai-sdk":"^1.1.8"},"publishConfig":{"access":"restricted"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","typescript":"^5","@types/node":"^20","tailwindcss":"^4","@types/react":"^18","@types/react-dom":"^18","eslint-config-next":"16.0.0","@tailwindcss/postcss":"^4"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"peerDependenciesMeta":{"react":{"optional":false},"react-dom":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/sign-assistant-sdk_0.1.9_1762292734738_0.25820809670263967","host":"s3://npm-registry-packages-npm-production"}},"0.1.11":{"name":"@dwn-protocol/sign-assistant-sdk","version":"0.1.11","_id":"@dwn-protocol/sign-assistant-sdk@0.1.11","maintainers":[{"name":"213374you","email":"tobrien820@gmail.com"},{"name":"devtestingstuff","email":"nolanjacobson@protonmail.com"},{"name":"jdutchak","email":"john.dutchak@gmail.com"}],"dist":{"shasum":"2deb5f3d1dd6db0fbf64011efd76837ee4f8cbb0","tarball":"https://registry.npmjs.org/@dwn-protocol/sign-assistant-sdk/-/sign-assistant-sdk-0.1.11.tgz","fileCount":39,"integrity":"sha512-p2AC9QYHHZAhgj/1sVG2KkH7YwZ/sA4hJ/LFrmojxybSzPnVvNQvWZmM28YtVfDPCYUeoHktBizRhwjWMp0V3A==","signatures":[{"sig":"MEQCID4EVp1HcLk20tYK0+41yxjieYjHo8d88AS5f4h346wCAiAfr7LWUb9uZYhUnCNARGwcIcn0qGChZv5x6M7/BcvWxA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":86847},"main":"./dist/sdk/index.js","type":"module","types":"./dist/sdk/index.d.ts","exports":{".":{"types":"./dist/sdk/index.d.ts","import":"./dist/sdk/index.js"},"./server":{"types":"./dist/sdk/server/index.d.ts","import":"./dist/sdk/server/index.js"},"./styles":"./dist/sdk/styles.css","./components":{"types":"./dist/sdk/components/index.d.ts","import":"./dist/sdk/components/index.js"}},"gitHead":"faa3c09278f1f45c27e2af2bd98c754fdbb52c8c","scripts":{"dev":"next dev --port 3007","lint":"eslint","build":"next build","start":"next start","publish":"npm publish","build:sdk":"tsc -p tsconfig.sdk.json && npm run copy:sdk-assets","publish:beta":"npm publish --tag beta","publish:alpha":"npm publish --tag alpha","prepublishOnly":"npm run build:sdk","copy:sdk-assets":"mkdir -p dist/sdk && cp src/sdk/styles.css dist/sdk/styles.css"},"_npmUser":{"name":"devtestingstuff","email":"nolanjacobson@protonmail.com"},"_npmVersion":"11.4.2","description":"AI-powered assistant SDK for Abaxx Sign with MCP integration","directories":{},"_nodeVersion":"24.4.1","dependencies":{"ai":"^5.0.77","zod":"^4.1.12","next":"16.0.0","react":"^18.0.0","unpdf":"^1.3.2","react-dom":"^18.0.0","remark-gfm":"^4.0.1","highlight.js":"^11.11.1","lucide-react":"^0.546.0","@ai-sdk/openai":"^2.0.53","react-markdown":"^10.1.0","@types/pdf-parse":"^1.1.5","rehype-highlight":"^7.0.2","@ai-sdk/anthropic":"^2.0.37","@assistant-ui/react":"^0.11.34","@modelcontextprotocol/sdk":"^1.20.1","@assistant-ui/react-ai-sdk":"^1.1.8"},"publishConfig":{"access":"restricted"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","typescript":"^5","@types/node":"^20","tailwindcss":"^4","@types/react":"^18","@types/react-dom":"^18","eslint-config-next":"16.0.0","@tailwindcss/postcss":"^4"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"peerDependenciesMeta":{"react":{"optional":false},"react-dom":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/sign-assistant-sdk_0.1.11_1762558417435_0.44817126989192646","host":"s3://npm-registry-packages-npm-production"}},"0.1.12":{"name":"@dwn-protocol/sign-assistant-sdk","version":"0.1.12","_id":"@dwn-protocol/sign-assistant-sdk@0.1.12","maintainers":[{"name":"213374you","email":"tobrien820@gmail.com"},{"name":"devtestingstuff","email":"nolanjacobson@protonmail.com"},{"name":"jdutchak","email":"john.dutchak@gmail.com"}],"dist":{"shasum":"87360b1df0c3f4ba7d228fbdaec445c9ca508222","tarball":"https://registry.npmjs.org/@dwn-protocol/sign-assistant-sdk/-/sign-assistant-sdk-0.1.12.tgz","fileCount":39,"integrity":"sha512-RqJ8NNKZFRtqbxgCleXGTNBwvKRx7EbvT4Le/jzW57EPEifLWf2KPrgk2uMf/X4VsWwSMFsxbFwrtduxp5TbQw==","signatures":[{"sig":"MEYCIQCZPl3pNbudjAbwJaMyo9DgCxk4PVpBGv3lOr3aQkxMVQIhAPswaxCzRiT+dsyC//l9zlpZIvVwiPNBQ0Ov4xRl7TwY","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":87480},"main":"./dist/sdk/index.js","type":"module","types":"./dist/sdk/index.d.ts","exports":{".":{"types":"./dist/sdk/index.d.ts","import":"./dist/sdk/index.js"},"./server":{"types":"./dist/sdk/server/index.d.ts","import":"./dist/sdk/server/index.js"},"./styles":"./dist/sdk/styles.css","./components":{"types":"./dist/sdk/components/index.d.ts","import":"./dist/sdk/components/index.js"}},"gitHead":"414ebb9d85a8e768052ccf272f4df75ab8b37a75","scripts":{"dev":"next dev --port 3007","lint":"eslint","build":"next build","start":"next start","publish":"npm publish","build:sdk":"tsc -p tsconfig.sdk.json && npm run copy:sdk-assets","publish:beta":"npm publish --tag beta","publish:alpha":"npm publish --tag alpha","prepublishOnly":"npm run build:sdk","copy:sdk-assets":"mkdir -p dist/sdk && cp src/sdk/styles.css dist/sdk/styles.css"},"_npmUser":{"name":"devtestingstuff","email":"nolanjacobson@protonmail.com"},"_npmVersion":"11.4.2","description":"AI-powered assistant SDK for Abaxx Sign with MCP integration","directories":{},"_nodeVersion":"24.4.1","dependencies":{"ai":"^5.0.77","zod":"^4.1.12","next":"16.0.0","react":"^18.0.0 || ^19.0.0","unpdf":"^1.3.2","react-dom":"^18.0.0 || ^19.0.0","remark-gfm":"^4.0.1","highlight.js":"^11.11.1","lucide-react":"^0.546.0","@ai-sdk/openai":"^2.0.53","react-markdown":"^10.1.0","@remix-run/node":"^2.17.2","@types/pdf-parse":"^1.1.5","rehype-highlight":"^7.0.2","@ai-sdk/anthropic":"^2.0.37","@assistant-ui/react":"^0.11.34","@modelcontextprotocol/sdk":"^1.20.1","@assistant-ui/react-ai-sdk":"^1.1.8"},"publishConfig":{"access":"restricted"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","typescript":"^5","@types/node":"^20","tailwindcss":"^4","@types/react":"^18","@types/react-dom":"^18","eslint-config-next":"16.0.0","@tailwindcss/postcss":"^4"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"peerDependenciesMeta":{"react":{"optional":false},"react-dom":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/sign-assistant-sdk_0.1.12_1762794640558_0.6504392902124652","host":"s3://npm-registry-packages-npm-production"}},"0.1.13":{"name":"@dwn-protocol/sign-assistant-sdk","version":"0.1.13","_id":"@dwn-protocol/sign-assistant-sdk@0.1.13","maintainers":[{"name":"213374you","email":"tobrien820@gmail.com"},{"name":"devtestingstuff","email":"nolanjacobson@protonmail.com"},{"name":"jdutchak","email":"john.dutchak@gmail.com"}],"dist":{"shasum":"b1a68954a112f65264145dd031e2abe5ca82e93c","tarball":"https://registry.npmjs.org/@dwn-protocol/sign-assistant-sdk/-/sign-assistant-sdk-0.1.13.tgz","fileCount":39,"integrity":"sha512-MzC4pk/4kqRtCqtjc8ZMindUwxBsBMJLm/0SIvruyGQGouENsBzSM20l0rnnpTH6cQoLgIWFDhzWGP645T8U1g==","signatures":[{"sig":"MEUCIGrhZdqavttESJLGWTc6sPfZVlB7I+G8KPJUCoQGeATnAiEA19vR33mXQNbirFrfxBnfzXKf/pY0FdvE9nQufRsoLjA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":88494},"main":"./dist/sdk/index.js","type":"module","types":"./dist/sdk/index.d.ts","exports":{".":{"types":"./dist/sdk/index.d.ts","import":"./dist/sdk/index.js"},"./server":{"types":"./dist/sdk/server/index.d.ts","import":"./dist/sdk/server/index.js"},"./styles":"./dist/sdk/styles.css","./components":{"types":"./dist/sdk/components/index.d.ts","import":"./dist/sdk/components/index.js"}},"gitHead":"414ebb9d85a8e768052ccf272f4df75ab8b37a75","scripts":{"dev":"next dev --port 3007","lint":"eslint","build":"next build","start":"next start","publish":"npm publish","build:sdk":"tsc -p tsconfig.sdk.json && npm run copy:sdk-assets","publish:beta":"npm publish --tag beta","publish:alpha":"npm publish --tag alpha","prepublishOnly":"npm run build:sdk","copy:sdk-assets":"mkdir -p dist/sdk && cp src/sdk/styles.css dist/sdk/styles.css"},"_npmUser":{"name":"devtestingstuff","email":"nolanjacobson@protonmail.com"},"_npmVersion":"11.4.2","description":"AI-powered assistant SDK for Abaxx Sign with MCP integration","directories":{},"_nodeVersion":"24.4.1","dependencies":{"ai":"^5.0.77","zod":"^4.1.12","next":"16.0.0","react":"^18.0.0 || ^19.0.0","unpdf":"^1.3.2","react-dom":"^18.0.0 || ^19.0.0","remark-gfm":"^4.0.1","highlight.js":"^11.11.1","lucide-react":"^0.546.0","@ai-sdk/openai":"^2.0.53","react-markdown":"^10.1.0","@remix-run/node":"^2.17.2","@types/pdf-parse":"^1.1.5","rehype-highlight":"^7.0.2","@ai-sdk/anthropic":"^2.0.37","@assistant-ui/react":"^0.11.34","@modelcontextprotocol/sdk":"^1.20.1","@assistant-ui/react-ai-sdk":"^1.1.8"},"publishConfig":{"access":"restricted"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","typescript":"^5","@types/node":"^20","tailwindcss":"^4","@types/react":"^18","@types/react-dom":"^18","eslint-config-next":"16.0.0","@tailwindcss/postcss":"^4"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"peerDependenciesMeta":{"react":{"optional":false},"react-dom":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/sign-assistant-sdk_0.1.13_1762795693369_0.8386682661486564","host":"s3://npm-registry-packages-npm-production"}},"0.1.15":{"name":"@dwn-protocol/sign-assistant-sdk","version":"0.1.15","_id":"@dwn-protocol/sign-assistant-sdk@0.1.15","maintainers":[{"name":"213374you","email":"tobrien820@gmail.com"},{"name":"devtestingstuff","email":"nolanjacobson@protonmail.com"},{"name":"jdutchak","email":"john.dutchak@gmail.com"}],"dist":{"shasum":"6a67d34162e38aaa329ec9e1cdb204048dc881f3","tarball":"https://registry.npmjs.org/@dwn-protocol/sign-assistant-sdk/-/sign-assistant-sdk-0.1.15.tgz","fileCount":39,"integrity":"sha512-wgtOSIKsg/Ry7i/rnU19vS95rs+4EELBrKIsyFXsJ4Va1az154HDsDeDxQwvwV2UT/UxDN+i5YgYbXRuO5zVGQ==","signatures":[{"sig":"MEUCIQDnlmKw+Ouu9jvqtL76swn617juKlI3KwXpS/xbxE1d1QIgNNOe2qn+CoKNivjAgMXreEkNQEsPeDf8PkvFs3z2l48=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":89853},"main":"./dist/sdk/index.js","type":"module","types":"./dist/sdk/index.d.ts","exports":{".":{"types":"./dist/sdk/index.d.ts","import":"./dist/sdk/index.js"},"./server":{"types":"./dist/sdk/server/index.d.ts","import":"./dist/sdk/server/index.js"},"./styles":"./dist/sdk/styles.css","./components":{"types":"./dist/sdk/components/index.d.ts","import":"./dist/sdk/components/index.js"}},"gitHead":"94e0d52392cfdddee0fffe7ef818848c71e08f3e","scripts":{"dev":"next dev --port 3007","lint":"eslint","build":"next build","start":"next start","publish":"npm publish","build:sdk":"tsc -p tsconfig.sdk.json && npm run copy:sdk-assets","publish:beta":"npm publish --tag beta","publish:alpha":"npm publish --tag alpha","prepublishOnly":"npm run build:sdk","copy:sdk-assets":"mkdir -p dist/sdk && cp src/sdk/styles.css dist/sdk/styles.css"},"_npmUser":{"name":"devtestingstuff","email":"nolanjacobson@protonmail.com"},"_npmVersion":"11.4.2","description":"AI-powered assistant SDK for Abaxx Sign with MCP integration","directories":{},"_nodeVersion":"24.4.1","dependencies":{"ai":"^5.0.77","zod":"^4.1.12","next":"16.0.0","react":"^18.0.0 || ^19.0.0","unpdf":"^1.3.2","react-dom":"^18.0.0 || ^19.0.0","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","highlight.js":"^11.11.1","lucide-react":"^0.546.0","@ai-sdk/openai":"^2.0.53","react-markdown":"^10.1.0","@remix-run/node":"^2.17.2","@types/pdf-parse":"^1.1.5","rehype-highlight":"^7.0.2","@ai-sdk/anthropic":"^2.0.37","@assistant-ui/react":"^0.11.34","@modelcontextprotocol/sdk":"^1.20.1","@assistant-ui/react-ai-sdk":"^1.1.8"},"publishConfig":{"access":"restricted"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","typescript":"^5","@types/node":"^20","tailwindcss":"^4","@types/react":"^18","@types/react-dom":"^18","eslint-config-next":"16.0.0","@tailwindcss/postcss":"^4"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"peerDependenciesMeta":{"react":{"optional":false},"react-dom":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/sign-assistant-sdk_0.1.15_1763138523486_0.006421216799987084","host":"s3://npm-registry-packages-npm-production"}},"0.1.16":{"name":"@dwn-protocol/sign-assistant-sdk","version":"0.1.16","_id":"@dwn-protocol/sign-assistant-sdk@0.1.16","maintainers":[{"name":"213374you","email":"tobrien820@gmail.com"},{"name":"devtestingstuff","email":"nolanjacobson@protonmail.com"},{"name":"jdutchak","email":"john.dutchak@gmail.com"}],"dist":{"shasum":"8cc1f258fd6d0172520f3cf15c317ae210d798f5","tarball":"https://registry.npmjs.org/@dwn-protocol/sign-assistant-sdk/-/sign-assistant-sdk-0.1.16.tgz","fileCount":39,"integrity":"sha512-1LfaruD8tBrsA//NmKjqK9GFN05b1J0qlLl/7p4ngO/EaXmWTBToWIwmYjuhbrLLAlMx6Q3VGkBGJ9IDcE7/kw==","signatures":[{"sig":"MEUCIQCPSrvHjtZVV/e9oWP+C7CdrYtKLBQg0ot20dQgMOgmgAIgBavKM4xCXxfNXZL7MbUna3TTZ/f5pykeHtZqG+HQoKI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":89928},"main":"./dist/sdk/index.js","type":"module","types":"./dist/sdk/index.d.ts","exports":{".":{"types":"./dist/sdk/index.d.ts","import":"./dist/sdk/index.js"},"./server":{"types":"./dist/sdk/server/index.d.ts","import":"./dist/sdk/server/index.js"},"./styles":"./dist/sdk/styles.css","./components":{"types":"./dist/sdk/components/index.d.ts","import":"./dist/sdk/components/index.js"}},"gitHead":"cdec5dd6ca6d39909b6aad2558a627b3e17568d0","scripts":{"dev":"next dev --port 3007","lint":"eslint","build":"next build","start":"next start","publish":"npm publish","build:sdk":"tsc -p tsconfig.sdk.json && npm run copy:sdk-assets","publish:beta":"npm publish --tag beta","publish:alpha":"npm publish --tag alpha","prepublishOnly":"npm run build:sdk","copy:sdk-assets":"mkdir -p dist/sdk && cp src/sdk/styles.css dist/sdk/styles.css"},"_npmUser":{"name":"devtestingstuff","email":"nolanjacobson@protonmail.com"},"_npmVersion":"11.4.2","description":"AI-powered assistant SDK for Abaxx Sign with MCP integration","directories":{},"_nodeVersion":"24.4.1","dependencies":{"ai":"^5.0.77","zod":"^4.1.12","next":"16.0.0","unpdf":"^1.3.2","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","highlight.js":"^11.11.1","lucide-react":"^0.546.0","@ai-sdk/openai":"^2.0.53","react-markdown":"^10.1.0","@remix-run/node":"^2.17.2","@types/pdf-parse":"^1.1.5","rehype-highlight":"^7.0.2","@ai-sdk/anthropic":"^2.0.37","@assistant-ui/react":"^0.11.34","@modelcontextprotocol/sdk":"^1.20.1","@assistant-ui/react-ai-sdk":"^1.1.8"},"publishConfig":{"access":"restricted"},"_hasShrinkwrap":false,"devDependencies":{"react":"^18.0.0 || ^19.0.0","eslint":"^9","react-dom":"^18.0.0 || ^19.0.0","typescript":"^5","@types/node":"^20","tailwindcss":"^4","@types/react":"^18","@types/react-dom":"^18","eslint-config-next":"16.0.0","@tailwindcss/postcss":"^4","baseline-browser-mapping":"^2.9.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"peerDependenciesMeta":{"react":{"optional":false},"react-dom":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/sign-assistant-sdk_0.1.16_1764788357827_0.8686970263160068","host":"s3://npm-registry-packages-npm-production"}},"0.1.18":{"name":"@dwn-protocol/sign-assistant-sdk","version":"0.1.18","_id":"@dwn-protocol/sign-assistant-sdk@0.1.18","maintainers":[{"name":"213374you","email":"tobrien820@gmail.com"},{"name":"devtestingstuff","email":"nolanjacobson@protonmail.com"},{"name":"jdutchak","email":"john.dutchak@gmail.com"}],"dist":{"shasum":"e64702c052322de8af7cfb2975c42828aae5c54a","tarball":"https://registry.npmjs.org/@dwn-protocol/sign-assistant-sdk/-/sign-assistant-sdk-0.1.18.tgz","fileCount":39,"integrity":"sha512-Ppix2nDJKAkZ0S0xyvIN/lfQZVYaukv0lp9v8pOCOxit0UyCsRhYhNlQJMezFwuF9yfF3novM2Z0Vcx0YGPsJw==","signatures":[{"sig":"MEQCIEePgyapOR4PCwOrSjC/UL66U42PP1Yq+Fr+HXUtrx4CAiBiDnDtMVqWGOzKnpRzgugC/aNJ/7UoMYzmiCezneEibg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":90012},"main":"./dist/sdk/index.js","type":"module","types":"./dist/sdk/index.d.ts","exports":{".":{"types":"./dist/sdk/index.d.ts","import":"./dist/sdk/index.js"},"./server":{"types":"./dist/sdk/server/index.d.ts","import":"./dist/sdk/server/index.js"},"./styles":"./dist/sdk/styles.css","./components":{"types":"./dist/sdk/components/index.d.ts","import":"./dist/sdk/components/index.js"}},"gitHead":"97b200dda7481a07ac25f27cdbbf9a1c17bfb1c2","scripts":{"dev":"next dev --port 3007","lint":"eslint","build":"next build","start":"next start","publish":"npm publish","build:sdk":"tsc -p tsconfig.sdk.json && npm run copy:sdk-assets","publish:beta":"npm publish --tag beta","publish:alpha":"npm publish --tag alpha","prepublishOnly":"npm run build:sdk","copy:sdk-assets":"mkdir -p dist/sdk && cp src/sdk/styles.css dist/sdk/styles.css"},"_npmUser":{"name":"jdutchak","email":"john.dutchak@gmail.com"},"_npmVersion":"11.4.2","description":"AI-powered assistant SDK for Abaxx Sign with MCP integration","directories":{},"_nodeVersion":"24.4.1","dependencies":{"ai":"^5.0.77","zod":"^4.1.12","next":"16.0.0","unpdf":"^1.3.2","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","highlight.js":"^11.11.1","lucide-react":"^0.546.0","@ai-sdk/openai":"^2.0.53","react-markdown":"^10.1.0","@remix-run/node":"^2.17.2","@types/pdf-parse":"^1.1.5","rehype-highlight":"^7.0.2","@ai-sdk/anthropic":"^2.0.37","@assistant-ui/react":"^0.11.34","@modelcontextprotocol/sdk":"^1.20.1","@assistant-ui/react-ai-sdk":"^1.1.8"},"publishConfig":{"access":"restricted"},"_hasShrinkwrap":false,"devDependencies":{"react":"^18.0.0 || ^19.0.0","eslint":"^9","react-dom":"^18.0.0 || ^19.0.0","typescript":"^5","@types/node":"^20","tailwindcss":"^4","@types/react":"^18","@types/react-dom":"^18","eslint-config-next":"16.0.0","@tailwindcss/postcss":"^4","baseline-browser-mapping":"^2.9.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"peerDependenciesMeta":{"react":{"optional":false},"react-dom":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/sign-assistant-sdk_0.1.18_1764788825358_0.0029236188657864037","host":"s3://npm-registry-packages-npm-production"}},"0.1.19":{"name":"@dwn-protocol/sign-assistant-sdk","version":"0.1.19","_id":"@dwn-protocol/sign-assistant-sdk@0.1.19","maintainers":[{"name":"213374you","email":"tobrien820@gmail.com"},{"name":"devtestingstuff","email":"nolanjacobson@protonmail.com"},{"name":"jdutchak","email":"john.dutchak@gmail.com"}],"dist":{"shasum":"20e407bfb9b5cd379c954572cd43235eb7fde205","tarball":"https://registry.npmjs.org/@dwn-protocol/sign-assistant-sdk/-/sign-assistant-sdk-0.1.19.tgz","fileCount":39,"integrity":"sha512-IfCbjP0qMatZ5HOM+NFDZIgGBLcjNLhR/JmATlC7YDf8v2AeLYkO9phFuOwJ4UgHkG9/KT4v+rnfT+oHtpEuNQ==","signatures":[{"sig":"MEUCIQCtLtSNZJbarUV35PYhFV5qIhSY8OV5J4gsatGqbDM2SQIgdz5HApvIzmeIt5dSvAJL1my39o8n5wJHetUKLWwgDqs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":90238},"main":"./dist/sdk/index.js","type":"module","types":"./dist/sdk/index.d.ts","exports":{".":{"types":"./dist/sdk/index.d.ts","import":"./dist/sdk/index.js"},"./server":{"types":"./dist/sdk/server/index.d.ts","import":"./dist/sdk/server/index.js"},"./styles":"./dist/sdk/styles.css","./components":{"types":"./dist/sdk/components/index.d.ts","import":"./dist/sdk/components/index.js"}},"gitHead":"0c60ae6a9ac27c42c5d2bac5008bdf807d705765","scripts":{"dev":"next dev --port 3007","lint":"eslint","build":"next build","start":"next start","publish":"npm publish","build:sdk":"tsc -p tsconfig.sdk.json && npm run copy:sdk-assets","publish:beta":"npm publish --tag beta","publish:alpha":"npm publish --tag alpha","prepublishOnly":"npm run build:sdk","copy:sdk-assets":"mkdir -p dist/sdk && cp src/sdk/styles.css dist/sdk/styles.css"},"_npmUser":{"name":"devtestingstuff","email":"nolanjacobson@protonmail.com"},"_npmVersion":"11.4.2","description":"AI-powered assistant SDK for Abaxx Sign with MCP integration","directories":{},"_nodeVersion":"24.4.1","dependencies":{"ai":"^5.0.77","zod":"^4.1.12","next":"16.0.0","unpdf":"^1.3.2","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","highlight.js":"^11.11.1","lucide-react":"^0.546.0","@ai-sdk/openai":"^2.0.53","react-markdown":"^10.1.0","@remix-run/node":"^2.17.2","@types/pdf-parse":"^1.1.5","rehype-highlight":"^7.0.2","@ai-sdk/anthropic":"^2.0.37","@assistant-ui/react":"^0.11.34","@modelcontextprotocol/sdk":"^1.20.1","@assistant-ui/react-ai-sdk":"^1.1.8"},"publishConfig":{"access":"restricted"},"_hasShrinkwrap":false,"devDependencies":{"react":"^18.0.0 || ^19.0.0","eslint":"^9","react-dom":"^18.0.0 || ^19.0.0","typescript":"^5","@types/node":"^20","tailwindcss":"^4","@types/react":"^18","@types/react-dom":"^18","eslint-config-next":"16.0.0","@tailwindcss/postcss":"^4","baseline-browser-mapping":"^2.9.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"peerDependenciesMeta":{"react":{"optional":false},"react-dom":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/sign-assistant-sdk_0.1.19_1764789174170_0.1689268313355332","host":"s3://npm-registry-packages-npm-production"}}},"time":{"created":"2025-11-04T02:04:44.055Z","modified":"2026-05-27T23:59:39.282Z","0.1.0":"2025-11-04T02:04:44.322Z","0.1.1":"2025-11-04T02:11:16.119Z","0.1.2":"2025-11-04T02:16:03.672Z","0.1.3":"2025-11-04T02:18:30.835Z","0.1.4":"2025-11-04T14:16:20.980Z","0.1.5":"2025-11-04T16:49:34.577Z","0.1.6":"2025-11-04T19:23:43.979Z","0.1.7":"2025-11-04T19:36:29.865Z","0.1.8":"2025-11-04T19:42:08.616Z","0.1.9":"2025-11-04T21:45:34.939Z","0.1.11":"2025-11-07T23:33:37.656Z","0.1.12":"2025-11-10T17:10:40.737Z","0.1.13":"2025-11-10T17:28:13.567Z","0.1.15":"2025-11-14T16:42:03.686Z","0.1.16":"2025-12-03T18:59:18.043Z","0.1.18":"2025-12-03T19:07:05.560Z","0.1.19":"2025-12-03T19:12:54.380Z"},"description":"AI-powered assistant SDK for Abaxx Sign with MCP integration","maintainers":[{"email":"nolanjacobson@protonmail.com","name":"devtestingstuff"},{"email":"john.dutchak@gmail.com","name":"jdutchak"}],"readme":"# Sign Assistant\n\nAn AI-powered assistant for Abaxx Sign built with Next.js, featuring MCP (Model Context Protocol) integration and comprehensive attachment support including images, text files, and PDFs.\n\nThis project also exports the `@dwn-protocol/sign-assistant-sdk` package, which provides reusable React components and server utilities for integrating AI chat functionality into your own applications. See [SDK_README.md](./SDK_README.md) for SDK documentation.\n\n## Features\n\n- 🤖 **AI Chat Interface** - Custom chat modal with floating action button (FAB) design\n- 🔧 **MCP Tool Integration** - Connect to Abaxx Sign and other MCP servers dynamically\n- 📎 **Rich Attachments** - Support for images, text files, and PDFs with drag & drop\n- 🖼️ **Vision Capabilities** - Send images to vision-capable models like GPT-4o\n- 🎨 **Modern UI** - Beautiful landing page with modal chat interface\n- ⚡ **Streaming Responses** - Real-time AI responses with Vercel AI SDK\n- 📄 **Smart Tool Loading** - MCP tools only load for text queries, attachments use direct processing\n\n## Prerequisites\n\n- Node.js 18+ (managed with [n](https://github.com/tj/n))\n- npm\n- OpenAI API key\n\n## Getting Started\n\n### 1. Clone and Install\n\n```bash\ncd sign-assistant\nnpm install\n```\n\n### 2. Configure Environment Variables\n\nCreate a `.env.local` file in the root directory:\n\n```bash\ncp .env.example .env.local\n```\n\nEdit `.env.local` and add your OpenAI API key:\n\n```env\nOPENAI_API_KEY=your_openai_api_key_here\nOPENAI_MODEL=gpt-4o\n```\n\n**Note:** This demo app uses environment variables for convenience. The SDK (`@dwn-protocol/sign-assistant-sdk`) supports dynamic API keys passed at runtime, allowing you to get API keys from user settings or request bodies instead of environment variables. See [SDK_README.md](./SDK_README.md) for details.\n\n### 3. Configure MCP Servers (Optional)\n\n#### For Abaxx Sign Integration\n\nThe project includes a custom MCP server for Abaxx Sign. To configure it, add to your `.env.local`:\n\n```env\nMCP_SERVERS={\"sign\":{\"command\":\"node\",\"args\":[\"path/to/sign-mcp/build/index.js\"],\"env\":{\"SIGN_BASE_URL\":\"http://localhost:3000\",\"SIGN_API_TOKEN\":\"your_api_token\"}}}\n```\n\n#### For Other MCP Servers\n\nYou can add multiple MCP servers as a JSON object:\n\n```env\nMCP_SERVERS={\"filesystem\":{\"command\":\"npx\",\"args\":[\"-y\",\"@modelcontextprotocol/server-filesystem\",\"/Users/yourusername/allowed-directory\"]},\"sign\":{\"command\":\"node\",\"args\":[\"path/to/sign-mcp/build/index.js\"],\"env\":{\"SIGN_BASE_URL\":\"http://localhost:3000\",\"SIGN_API_TOKEN\":\"your_token\"}}}\n```\n\nExample MCP servers you can use:\n- `sign-mcp` - Custom Abaxx Sign integration (21 tools for document management)\n- `@modelcontextprotocol/server-filesystem` - File system access\n- `@modelcontextprotocol/server-github` - GitHub integration\n- `@modelcontextprotocol/server-slack` - Slack integration\n- Custom MCP servers\n\n#### MCP Configuration Example\n\nFor easier configuration, see `mcp-config.example.json` for a formatted example.\n\n### 4. Run Development Server\n\n```bash\nnpm run dev\n```\n\nOpen [http://localhost:3008](http://localhost:3008) in your browser.\n\n## User Interface\n\nThe application features a modern design with:\n\n- **Landing Page**: Beautiful gradient background with feature highlights\n- **Floating Action Button (FAB)**: Fixed button in the bottom-right corner to open chat\n- **Modal Chat Interface**: Full-screen modal with:\n  - Header with app title\n  - Scrollable message thread\n  - File attachment button (images, text, PDFs)\n  - Text input with send button\n  - Welcome message with capabilities overview\n\n## Attachment Support\n\nSign Assistant supports multiple file types with full processing:\n\n### Images ✅\n- **Formats**: JPEG, PNG, WebP, GIF\n- **Size limit**: 20MB\n- **Features**: GPT-4o vision analysis - AI can see and describe images\n- **Status**: Fully working!\n\n### Text Files ✅\n- **Formats**: Plain text, HTML, Markdown, CSV\n- **Size limit**: 5MB\n- **Features**: Full text extraction and processing\n- **Status**: Fully working!\n\n### PDF Documents ✅\n- **Formats**: PDF\n- **Size limit**: 10MB\n- **Features**: Automatic text extraction using `unpdf` library (serverless-compatible!)\n- **Status**: Fully working!\n\n## Project Structure\n\n```\nsign-assistant/\n├── src/\n│   ├── app/\n│   │   ├── api/chat/        # Chat API endpoint with MCP integration\n│   │   ├── layout.tsx       # Root layout with metadata\n│   │   └── page.tsx         # Landing page with ChatModal\n│   ├── components/\n│   │   ├── assistant-ui/\n│   │   │   ├── attachment.tsx        # Legacy attachment components\n│   │   │   ├── thread.tsx            # Legacy chat thread UI\n│   │   │   └── runtime-provider.tsx  # Legacy runtime configuration\n│   │   ├── chat-interface.tsx        # Custom chat UI (main component)\n│   │   └── chat-modal.tsx            # Modal wrapper with FAB\n│   └── lib/\n│       ├── attachment-adapters.ts    # Attachment processing logic\n│       └── mcp-client.ts             # MCP client manager\n├── .env.local              # Environment variables (not in repo)\n├── .env.example           # Environment variable template\n├── mcp-config.example.json # MCP configuration example\n├── package.json\n└── README.md\n```\n\n## Architecture\n\n### Custom Chat Interface\n\nThe project uses a custom chat interface (`ChatInterface` component) instead of `assistant-ui` runtime components to avoid infinite loop issues and provide better control over the UI. The interface includes:\n\n- Custom message rendering with markdown support\n- File attachment handling with visual previews\n- Streaming response handling\n- Tool invocation display\n\n### MCP Integration\n\nThe MCP client manager (`src/lib/mcp-client.ts`) connects to configured MCP servers and exposes their tools to the AI:\n\n1. **Server Connection**: Connects to MCP servers via stdio transport on first request\n2. **Tool Discovery**: Lists all available tools from connected servers\n3. **Schema Conversion**: Converts MCP tool schemas (JSON Schema) to Zod schemas for AI SDK\n4. **Tool Execution**: Handles tool invocations and returns results to the AI\n5. **Smart Loading**: Only loads MCP tools for text-only queries (not when processing attachments)\n\n#### Known Issues\n\n- **Schema Compatibility**: Some MCP tools return schemas with `type: \"None\"` which causes OpenAI API validation errors. The code attempts to normalize these to `type: \"object\"` but may need further refinement for certain edge cases.\n\n### Attachment Processing\n\nEach file type has a dedicated adapter in `src/lib/attachment-adapters.ts`:\n\n- **VisionImageAdapter** - Converts images to base64 data URLs for vision models\n- **SimpleTextAttachmentAdapter** - Wraps text content for processing  \n- **PDFAttachmentAdapter** - Extracts text from PDFs using `unpdf`\n- **CompositeAttachmentAdapter** - Routes files to appropriate adapter based on MIME type\n\n### Chat API Flow\n\nThe `/api/chat` endpoint (`src/app/api/chat/route.ts`):\n\n1. Receives messages from the frontend\n2. Detects if any attachments are present\n3. If attachments: processes them directly without MCP tools\n4. If no attachments: initializes MCP, loads tools, and enables tool calling\n5. Calls OpenAI with `generateText` from Vercel AI SDK (uses environment variable for API key)\n6. Returns streaming text response\n\n**Note:** This demo app uses environment variables for the OpenAI API key. The SDK (`@dwn-protocol/sign-assistant-sdk`) supports dynamic API keys via the `apiKey` parameter, allowing per-user or per-request API keys. See [SDK_README.md](./SDK_README.md) for SDK usage examples.\n\n## Customization\n\n### Adding New MCP Tools\n\nTo add new MCP capabilities:\n\n1. Create or install an MCP server\n2. Add the server configuration to `MCP_SERVERS` in `.env.local`\n3. Restart the development server\n4. Tools will be automatically discovered and made available to the AI\n\n### Adding New Attachment Types\n\nCreate a new adapter in `src/lib/attachment-adapters.ts`:\n\n```typescript\nexport class CustomAttachmentAdapter implements AttachmentAdapter {\n  accept = \"application/custom\";\n  \n  async add({ file }: { file: File }): Promise<PendingAttachment> {\n    // Validation logic\n    if (file.size > MAX_SIZE) {\n      throw new Error(\"File too large\");\n    }\n    // Return pending attachment\n  }\n  \n  async send(attachment: PendingAttachment): Promise<CompleteAttachment> {\n    // Processing logic - convert file to format AI can understand\n    const content = await processFile(attachment.file);\n    return { ...attachment, content: [{ type: \"text\", text: content }] };\n  }\n  \n  async remove(attachment: PendingAttachment): Promise<void> {\n    // Cleanup logic if needed\n  }\n}\n```\n\nThen add it to the `CompositeAttachmentAdapter` in your chat interface.\n\n### Configuring MCP Servers\n\nAdd servers to the `MCP_SERVERS` environment variable as a JSON object:\n\n```json\n{\n  \"server-name\": {\n    \"command\": \"command-to-run\",\n    \"args\": [\"arg1\", \"arg2\"],\n    \"env\": {\n      \"ENV_VAR\": \"value\"\n    }\n  }\n}\n```\n\n#### Available MCP Tools (sign-mcp)\n\nWhen connected to the Abaxx Sign MCP server, the following tools are available:\n\n**Documents**\n- `get_documents` - List all documents\n- `get_document` - Get specific document details\n- `create_document` - Create a new document\n- `update_document` - Update document\n- `delete_document` - Delete document\n- `send_document` - Send document for signing\n- `resend_document` - Resend document\n- `download_document` - Download signed document\n\n**Recipients**\n- `get_recipient` - Get recipient details\n- `create_recipient` - Add recipient\n- `update_recipient` - Update recipient\n- `delete_recipient` - Remove recipient\n\n**Fields**\n- `get_field` - Get form field details\n- `create_field` - Add form field\n- `update_field` - Update form field\n- `delete_field` - Remove form field\n\n**Templates**\n- `get_templates` - List all templates\n- `get_template` - Get template details\n- `create_template` - Create template\n- `delete_template` - Delete template\n- `generate_document_from_template` - Create document from template\n\n## Tech Stack\n\n- **Framework**: [Next.js 16](https://nextjs.org) - React framework with App Router\n- **AI SDK**: [Vercel AI SDK](https://sdk.vercel.ai) - Streaming AI responses\n- **AI Provider**: OpenAI GPT-4o - Vision and language model\n- **MCP**: [Model Context Protocol SDK](https://github.com/modelcontextprotocol/sdk) - Tool integration\n- **Styling**: [Tailwind CSS 4](https://tailwindcss.com) - Utility-first CSS\n- **Icons**: [Lucide React](https://lucide.dev) - Icon library\n- **Language**: [TypeScript](https://www.typescriptlang.org) - Type-safe JavaScript\n- **PDF Processing**: [unpdf](https://github.com/unjs/unpdf) - Serverless PDF text extraction\n- **Schema Validation**: [Zod](https://zod.dev) - TypeScript-first schema validation\n\n## Troubleshooting\n\n### MCP Schema Errors\n\nIf you see errors like `Invalid schema for function 'X': schema must be a JSON Schema of 'type: \"object\"', got 'type: \"None\"'`:\n\n1. This is a known compatibility issue with certain MCP tool schemas\n2. The code attempts to normalize these schemas automatically\n3. For persistent issues, check your MCP server's tool schema definitions\n4. Test your MCP server with MCP Inspector to verify it works correctly\n\n### Attachments Not Working\n\n1. Check file size limits (images: 20MB, text: 5MB, PDFs: 10MB)\n2. Verify file MIME types are supported\n3. Check browser console for errors\n4. Ensure OpenAI API key is configured\n\n### Port Already in Use\n\nThe dev server runs on port 3008. If it's already in use:\n\n```bash\n# Find and kill the process\nlsof -i :3008\nkill -9 <PID>\n\n# Or use a different port\nnpm run dev -- --port 3009\n```\n\n## Resources\n\n- [Vercel AI SDK Documentation](https://sdk.vercel.ai/docs)\n- [Model Context Protocol](https://modelcontextprotocol.io)\n- [MCP Inspector](https://github.com/modelcontextprotocol/inspector) - Test MCP servers\n- [Next.js Documentation](https://nextjs.org/docs)\n- [OpenAI API Documentation](https://platform.openai.com/docs)\n\n## SDK Package\n\nThis project exports `@dwn-protocol/sign-assistant-sdk`, a reusable SDK for integrating AI chat functionality into your applications. The SDK includes:\n\n- **React Components**: `ChatModal` and `ChatInterface` components\n- **Server Utilities**: `handleChatStream`, `handleChatRequest`, and `parsePDF` functions\n- **Dynamic API Keys**: Support for per-user API keys (no environment variables required!)\n- **MCP Integration**: Built-in MCP server connection and tool management\n\nSee [SDK_README.md](./SDK_README.md) for complete SDK documentation and usage examples.\n\n**Package Name**: `@dwn-protocol/sign-assistant-sdk` (private package)\n\n## Development Notes\n\n- **Custom Chat UI**: Uses custom `ChatInterface` component instead of `assistant-ui` runtime to avoid infinite loop bugs\n- **Smart Tool Loading**: MCP tools only load when no attachments are present to prevent conflicts\n- **Streaming**: All AI responses stream in real-time for better UX\n- **Error Handling**: Comprehensive error logging for debugging MCP and attachment issues\n- **SDK API Keys**: The SDK supports dynamic API keys via the `apiKey` parameter, allowing integration with user settings and per-request authentication\n\n## License\n\nMIT\n\n## Support\n\nFor issues and questions:\n- Check the [Troubleshooting](#troubleshooting) section\n- Review terminal logs for detailed error messages\n- Test MCP servers independently with MCP Inspector\n- Open an issue on GitHub\n","readmeFilename":"README.md"}