{"_id":"@byldd/seo-tools-plugin","_rev":"8-9efd67d2971bb4643eac037dcea2bfb8","name":"@byldd/seo-tools-plugin","dist-tags":{"latest":"1.1.1"},"versions":{"1.0.0":{"name":"@byldd/seo-tools-plugin","version":"1.0.0","keywords":["paperclip","plugin","connector"],"author":{"name":"Plugin Author"},"license":"MIT","_id":"@byldd/seo-tools-plugin@1.0.0","maintainers":[{"name":"khalid-byldd","email":"khalid@byldd.com"},{"name":"abhishek.singh.byldd","email":"abhishek.singh@byldd.com"},{"name":"abdul.byldd","email":"abdul@byldd.com"},{"name":"tanish_byldd","email":"tanish@byldd.com"}],"dist":{"shasum":"f51dba6ef7b10220ea4a5aae0fe4b0ebd840828f","tarball":"https://registry.npmjs.org/@byldd/seo-tools-plugin/-/seo-tools-plugin-1.0.0.tgz","fileCount":8,"integrity":"sha512-acUjOP+rbFDr7k2qDeoXSNpaW+P8pLJvYA7hKQ4jqlnPMtv6ElaW06+3zJNxZBExx75MzSwt4WGuBFyJMezJiA==","signatures":[{"sig":"MEUCIB0OwXZ1BgkChFZr/VnErwwPFlFTDxRdptiwkPnAUvNjAiEAul3XWdMOa1r5qq3vr8N0WSdFbdvVqgSN56nI61IrzKI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":847146},"type":"module","gitHead":"b4339537300d60c76a4c4319ee5071dabaedf6a5","scripts":{"dev":"node ./esbuild.config.mjs --watch","test":"vitest run --config ./vitest.config.ts","build":"node ./esbuild.config.mjs","dev:ui":"paperclip-plugin-dev-server --root . --ui-dir dist/ui --port 4177","typecheck":"tsc --noEmit","build:rollup":"rollup -c"},"_npmUser":{"name":"khalid-byldd","email":"khalid@byldd.com"},"_npmVersion":"10.9.2","description":"A Paperclip plugin","directories":{},"_nodeVersion":"22.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","rollup":"^4.38.0","vitest":"^3.0.5","esbuild":"^0.27.3","typescript":"^5.7.3","@types/node":"^24.6.0","@types/react":"^19.0.8","@paperclipai/plugin-sdk":"*","@rollup/plugin-typescript":"^12.1.2","@rollup/plugin-node-resolve":"^16.0.1"},"paperclipPlugin":{"ui":"./dist/ui/","worker":"./dist/worker.js","manifest":"./dist/manifest.js"},"peerDependencies":{"react":">=18"},"_npmOperationalInternal":{"tmp":"tmp/seo-tools-plugin_1.0.0_1782110234940_0.10882032544985543","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@byldd/seo-tools-plugin","version":"1.0.1","keywords":["paperclip","plugin","connector"],"author":{"name":"Plugin Author"},"license":"MIT","_id":"@byldd/seo-tools-plugin@1.0.1","maintainers":[{"name":"khalid-byldd","email":"khalid@byldd.com"},{"name":"abhishek.singh.byldd","email":"abhishek.singh@byldd.com"},{"name":"abdul.byldd","email":"abdul@byldd.com"},{"name":"tanish_byldd","email":"tanish@byldd.com"}],"dist":{"shasum":"a844400e61d4cfd6a2df98d5d53e83aeef117eb0","tarball":"https://registry.npmjs.org/@byldd/seo-tools-plugin/-/seo-tools-plugin-1.0.1.tgz","fileCount":8,"integrity":"sha512-8cv8AdU4XuwxuqEuBwyqorCVYhjXM46JQJAGE3ZlgTitpJyIaA9+i1tNmXqMeSjAiMjDdjslqSquK0li145TfA==","signatures":[{"sig":"MEYCIQDH8VW6GPWR2KVPYVv4T38I851zl+uRQ5Jy1F7G391vBwIhANIEL5RpIrIrPiQ+LUeARx/R0hzw2o/fYebu+SdHEyek","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":847151},"type":"module","gitHead":"d3bfba4b91fd727b883daed4f3bca1016a80ae9d","scripts":{"dev":"node ./esbuild.config.mjs --watch","test":"vitest run --config ./vitest.config.ts","build":"node ./esbuild.config.mjs","dev:ui":"paperclip-plugin-dev-server --root . --ui-dir dist/ui --port 4177","typecheck":"tsc --noEmit","build:rollup":"rollup -c"},"_npmUser":{"name":"khalid-byldd","email":"khalid@byldd.com"},"_npmVersion":"10.9.2","description":"A Paperclip plugin","directories":{},"_nodeVersion":"22.14.0","dependencies":{"react":">=18","@paperclipai/plugin-sdk":"2026.618.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","rollup":"^4.38.0","vitest":"^3.0.5","esbuild":"^0.27.3","typescript":"^5.7.3","@types/node":"^24.6.0","@types/react":"^19.0.8","@rollup/plugin-typescript":"^12.1.2","@rollup/plugin-node-resolve":"^16.0.1"},"paperclipPlugin":{"ui":"./dist/ui/","worker":"./dist/worker.js","manifest":"./dist/manifest.js"},"_npmOperationalInternal":{"tmp":"tmp/seo-tools-plugin_1.0.1_1782293314965_0.7866404420330619","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@byldd/seo-tools-plugin","version":"1.0.2","keywords":["paperclip","plugin","connector"],"author":{"name":"Plugin Author"},"license":"MIT","_id":"@byldd/seo-tools-plugin@1.0.2","maintainers":[{"name":"khalid-byldd","email":"khalid@byldd.com"},{"name":"abhishek.singh.byldd","email":"abhishek.singh@byldd.com"},{"name":"abdul.byldd","email":"abdul@byldd.com"},{"name":"tanish_byldd","email":"tanish@byldd.com"}],"dist":{"shasum":"a7f734eaf309f4a6a1a7b8caa933f9b117d8e971","tarball":"https://registry.npmjs.org/@byldd/seo-tools-plugin/-/seo-tools-plugin-1.0.2.tgz","fileCount":8,"integrity":"sha512-e6O6qro1C/RaXZlEWHWH/M/Io4sQbEHJlQMnFGLzy2UbdGGGfoA8pzOl4FHrWn4fZOdX0qs6n8dDaK4Gv8cSDw==","signatures":[{"sig":"MEYCIQC2UxT7NmGRAxYGs7pX5KxgszG+LSvmSx34We/1YXPsUwIhAIPdoO5rpJi64nBa+LR+0n+xLfWrqsFD1mK952hjBup9","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":852938},"type":"module","gitHead":"9a75764947afc59a329290e9d20af4c97fa8bcdd","scripts":{"dev":"node ./esbuild.config.mjs --watch","test":"vitest run --config ./vitest.config.ts","build":"node ./esbuild.config.mjs","dev:ui":"paperclip-plugin-dev-server --root . --ui-dir dist/ui --port 4177","typecheck":"tsc --noEmit","build:rollup":"rollup -c"},"_npmUser":{"name":"khalid-byldd","email":"khalid@byldd.com"},"_npmVersion":"10.9.2","description":"A Paperclip plugin","directories":{},"_nodeVersion":"22.14.0","dependencies":{"react":">=18","@paperclipai/plugin-sdk":"2026.618.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","rollup":"^4.38.0","vitest":"^3.0.5","esbuild":"^0.27.3","typescript":"^5.7.3","@types/node":"^24.6.0","@types/react":"^19.0.8","@rollup/plugin-typescript":"^12.1.2","@rollup/plugin-node-resolve":"^16.0.1"},"paperclipPlugin":{"ui":"./dist/ui/","worker":"./dist/worker.js","manifest":"./dist/manifest.js"},"_npmOperationalInternal":{"tmp":"tmp/seo-tools-plugin_1.0.2_1782379154230_0.03879057019770804","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@byldd/seo-tools-plugin","version":"1.0.3","keywords":["paperclip","plugin","connector"],"author":{"name":"Plugin Author"},"license":"MIT","_id":"@byldd/seo-tools-plugin@1.0.3","maintainers":[{"name":"khalid-byldd","email":"khalid@byldd.com"},{"name":"abhishek.singh.byldd","email":"abhishek.singh@byldd.com"},{"name":"abdul.byldd","email":"abdul@byldd.com"},{"name":"tanish_byldd","email":"tanish@byldd.com"}],"dist":{"shasum":"fd37e662ad4354f85fbe86807dcdb543dc945312","tarball":"https://registry.npmjs.org/@byldd/seo-tools-plugin/-/seo-tools-plugin-1.0.3.tgz","fileCount":8,"integrity":"sha512-8XxwQkR0nFcOYwltn0TwtSoV/zLIPflVEYIvj7BKHwrPi1aCSUMA9gnDVy5lUIu//a2svMKGb1SvJXGH75Z+iQ==","signatures":[{"sig":"MEUCIQD0f6T7mGMUa5IEpJ9Rgk2lEDBa3KFQc/jTGG+7ch4YewIgCSXj3SZn24cpBctHSxp0IlSdO8M9e7hy/YV+UT0Ub2I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":871098},"type":"module","gitHead":"5bfaf50e1457fd7107109cb5dd76576f7c9a3b1d","scripts":{"dev":"node ./esbuild.config.mjs --watch","test":"vitest run --config ./vitest.config.ts","build":"node ./esbuild.config.mjs","dev:ui":"paperclip-plugin-dev-server --root . --ui-dir dist/ui --port 4177","typecheck":"tsc --noEmit","build:rollup":"rollup -c"},"_npmUser":{"name":"khalid-byldd","email":"khalid@byldd.com"},"_npmVersion":"10.9.2","description":"A Paperclip plugin","directories":{},"_nodeVersion":"22.14.0","dependencies":{"react":">=18","@paperclipai/plugin-sdk":"2026.618.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","rollup":"^4.38.0","vitest":"^3.0.5","esbuild":"^0.27.3","typescript":"^5.7.3","@types/node":"^24.6.0","@types/react":"^19.0.8","@rollup/plugin-typescript":"^12.1.2","@rollup/plugin-node-resolve":"^16.0.1"},"paperclipPlugin":{"ui":"./dist/ui/","worker":"./dist/worker.js","manifest":"./dist/manifest.js"},"_npmOperationalInternal":{"tmp":"tmp/seo-tools-plugin_1.0.3_1783515767502_0.10889017463405959","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@byldd/seo-tools-plugin","version":"1.0.4","keywords":["paperclip","plugin","connector"],"author":{"name":"Plugin Author"},"license":"MIT","_id":"@byldd/seo-tools-plugin@1.0.4","maintainers":[{"name":"khalid-byldd","email":"khalid@byldd.com"},{"name":"abhishek.singh.byldd","email":"abhishek.singh@byldd.com"},{"name":"abdul.byldd","email":"abdul@byldd.com"},{"name":"tanish_byldd","email":"tanish@byldd.com"}],"dist":{"shasum":"8266e65bc196efac608abaaf0bec2252b136435e","tarball":"https://registry.npmjs.org/@byldd/seo-tools-plugin/-/seo-tools-plugin-1.0.4.tgz","fileCount":8,"integrity":"sha512-qWchXFSgorrHAKjTahhtbaGj3dREBUo2JR++jTCHFTBeIyOeA9wn2mfjjss4q0Biqje1Kl9+GR7JAL0LGp2mZw==","signatures":[{"sig":"MEUCIQDQJGk89qqi0ISMB3d7zLSm3o+pC5ULvygivconkY8NrgIgNJnMBkQkjLLxCoYM2FJ/vqLbQEetRQ6drl/FmRFPMGE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":871098},"type":"module","gitHead":"116b677db9d4c8def46882864e8ed922397edeeb","scripts":{"dev":"node ./esbuild.config.mjs --watch","test":"vitest run --config ./vitest.config.ts","build":"node ./esbuild.config.mjs","dev:ui":"paperclip-plugin-dev-server --root . --ui-dir dist/ui --port 4177","typecheck":"tsc --noEmit","build:rollup":"rollup -c"},"_npmUser":{"name":"khalid-byldd","email":"khalid@byldd.com"},"_npmVersion":"10.9.2","description":"A Paperclip plugin","directories":{},"_nodeVersion":"22.14.0","dependencies":{"react":">=18","@paperclipai/plugin-sdk":"2026.618.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","rollup":"^4.38.0","vitest":"^3.0.5","esbuild":"^0.27.3","typescript":"^5.7.3","@types/node":"^24.6.0","@types/react":"^19.0.8","@rollup/plugin-typescript":"^12.1.2","@rollup/plugin-node-resolve":"^16.0.1"},"paperclipPlugin":{"ui":"./dist/ui/","worker":"./dist/worker.js","manifest":"./dist/manifest.js"},"_npmOperationalInternal":{"tmp":"tmp/seo-tools-plugin_1.0.4_1783574998560_0.6570222543044972","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@byldd/seo-tools-plugin","version":"1.0.5","keywords":["paperclip","plugin","connector"],"author":{"name":"Plugin Author"},"license":"MIT","_id":"@byldd/seo-tools-plugin@1.0.5","maintainers":[{"name":"khalid-byldd","email":"khalid@byldd.com"},{"name":"abhishek.singh.byldd","email":"abhishek.singh@byldd.com"},{"name":"abdul.byldd","email":"abdul@byldd.com"},{"name":"tanish_byldd","email":"tanish@byldd.com"}],"dist":{"shasum":"101063edfef8d6bbb7f5311a37da79a82a29203c","tarball":"https://registry.npmjs.org/@byldd/seo-tools-plugin/-/seo-tools-plugin-1.0.5.tgz","fileCount":8,"integrity":"sha512-apYnXF65BDE1sU3NllTE6cN1Ekzoew5Ho+eaNkx8OxvlohQzJZMlB+ghouc9Z2cyLpmHPkWEvklOJG48BCK4Qg==","signatures":[{"sig":"MEYCIQD33OSdJRM/7yT8b5TI1xkbiyu8XW1ei9y07pf/mg626gIhANNYofTjfWhZ8i596MLfABAvwTFJIqoPXfj6j2gKHWMg","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":900972},"type":"module","gitHead":"3bf6baf33533a2a42300bc273da324ceb56ef080","scripts":{"dev":"node ./esbuild.config.mjs --watch","test":"vitest run --config ./vitest.config.ts","build":"node ./esbuild.config.mjs","dev:ui":"paperclip-plugin-dev-server --root . --ui-dir dist/ui --port 4177","typecheck":"tsc --noEmit","build:rollup":"rollup -c"},"_npmUser":{"name":"khalid-byldd","email":"khalid@byldd.com"},"_npmVersion":"10.9.2","description":"A Paperclip plugin","directories":{},"_nodeVersion":"22.14.0","dependencies":{"react":">=18","@paperclipai/plugin-sdk":"2026.618.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","rollup":"^4.38.0","vitest":"^3.0.5","esbuild":"^0.27.3","typescript":"^5.7.3","@types/node":"^24.6.0","@types/react":"^19.0.8","@rollup/plugin-typescript":"^12.1.2","@rollup/plugin-node-resolve":"^16.0.1"},"paperclipPlugin":{"ui":"./dist/ui/","worker":"./dist/worker.js","manifest":"./dist/manifest.js"},"_npmOperationalInternal":{"tmp":"tmp/seo-tools-plugin_1.0.5_1783575904317_0.3051117362247986","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@byldd/seo-tools-plugin","version":"1.1.0","keywords":["paperclip","plugin","connector"],"author":{"name":"Plugin Author"},"license":"MIT","_id":"@byldd/seo-tools-plugin@1.1.0","maintainers":[{"name":"khalid-byldd","email":"khalid@byldd.com"},{"name":"abhishek.singh.byldd","email":"abhishek.singh@byldd.com"},{"name":"abdul.byldd","email":"abdul@byldd.com"},{"name":"tanish_byldd","email":"tanish@byldd.com"}],"dist":{"shasum":"9d19c05d1e03b0920de45646ac5c7eba53f2dc70","tarball":"https://registry.npmjs.org/@byldd/seo-tools-plugin/-/seo-tools-plugin-1.1.0.tgz","fileCount":8,"integrity":"sha512-i51fQrQda7Vtb3Wh8C+lAH3INRdMVRE8Bu2kBLSWs76WxXxWplGfCfu381lJeH6VPjj9Vz8c/4IgI3Sn16e7eQ==","signatures":[{"sig":"MEUCIB0SNrRu7/1ahmF8KVFAvAxEaB+KZzHDrmsh6f62mw+DAiEAg2WeJsq/GX6QNIQUkNiTvPP+RrxEFDDRYGYRYRnz9TQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":900972},"type":"module","gitHead":"737931af843ef4cda03377fdefb3f0c340fe5adb","scripts":{"dev":"node ./esbuild.config.mjs --watch","test":"vitest run --config ./vitest.config.ts","build":"node ./esbuild.config.mjs","dev:ui":"paperclip-plugin-dev-server --root . --ui-dir dist/ui --port 4177","typecheck":"tsc --noEmit","build:rollup":"rollup -c"},"_npmUser":{"name":"khalid-byldd","email":"khalid@byldd.com"},"_npmVersion":"10.9.2","description":"A Paperclip plugin","directories":{},"_nodeVersion":"22.14.0","dependencies":{"react":">=18","@paperclipai/plugin-sdk":"2026.618.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","rollup":"^4.38.0","vitest":"^3.0.5","esbuild":"^0.27.3","typescript":"^5.7.3","@types/node":"^24.6.0","@types/react":"^19.0.8","@rollup/plugin-typescript":"^12.1.2","@rollup/plugin-node-resolve":"^16.0.1"},"paperclipPlugin":{"ui":"./dist/ui/","worker":"./dist/worker.js","manifest":"./dist/manifest.js"},"_npmOperationalInternal":{"tmp":"tmp/seo-tools-plugin_1.1.0_1784801140041_0.48825603703226994","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@byldd/seo-tools-plugin","version":"1.1.1","type":"module","publishConfig":{"access":"public"},"description":"A Paperclip plugin","scripts":{"build":"node ./esbuild.config.mjs","build:rollup":"rollup -c","dev":"node ./esbuild.config.mjs --watch","dev:ui":"paperclip-plugin-dev-server --root . --ui-dir dist/ui --port 4177","test":"vitest run --config ./vitest.config.ts","typecheck":"tsc --noEmit"},"paperclipPlugin":{"manifest":"./dist/manifest.js","worker":"./dist/worker.js","ui":"./dist/ui/"},"keywords":["paperclip","plugin","connector"],"author":{"name":"Plugin Author"},"license":"MIT","devDependencies":{"@rollup/plugin-node-resolve":"^16.0.1","@rollup/plugin-typescript":"^12.1.2","@types/node":"^24.6.0","@types/react":"^19.0.8","esbuild":"^0.27.3","rollup":"^4.38.0","tslib":"^2.8.1","typescript":"^5.7.3","vitest":"^3.0.5"},"dependencies":{"react":">=18","@paperclipai/plugin-sdk":"2026.618.0"},"_id":"@byldd/seo-tools-plugin@1.1.1","gitHead":"3fef054c841b0dee0c01e1c82f676153dfbe50ee","_nodeVersion":"22.14.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-PdOr9RMAm5pJcsP6GR6odaOyZqO1WnAY8sa0x2aLO+b0bd2OmT747obzgFnu6JyGnChdJNQTSqgUsCfR0e/YuA==","shasum":"93dbd1cdf5f44070e86849cd16e13727087d3d00","tarball":"https://registry.npmjs.org/@byldd/seo-tools-plugin/-/seo-tools-plugin-1.1.1.tgz","fileCount":8,"unpackedSize":901024,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCxGrziMGCiPiIEt/EFKeYUpZ6qBWNAz2UFsScutFbHAQIga67o8/LibJIQA4cPhXVOH6eUWr/jFiQ3STZMPKBWfkQ="}]},"_npmUser":{"name":"khalid-byldd","email":"khalid@byldd.com"},"directories":{},"maintainers":[{"name":"khalid-byldd","email":"khalid@byldd.com"},{"name":"abhishek.singh.byldd","email":"abhishek.singh@byldd.com"},{"name":"abdul.byldd","email":"abdul@byldd.com"},{"name":"tanish_byldd","email":"tanish@byldd.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/seo-tools-plugin_1.1.1_1784811309037_0.9527539571757944"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-22T06:37:14.786Z","modified":"2026-07-23T12:55:09.404Z","1.0.0":"2026-06-22T06:37:15.116Z","1.0.1":"2026-06-24T09:28:35.123Z","1.0.2":"2026-06-25T09:19:14.380Z","1.0.3":"2026-07-08T13:02:47.640Z","1.0.4":"2026-07-09T05:29:58.704Z","1.0.5":"2026-07-09T05:45:04.465Z","1.1.0":"2026-07-23T10:05:40.200Z","1.1.1":"2026-07-23T12:55:09.221Z"},"author":{"name":"Plugin Author"},"license":"MIT","keywords":["paperclip","plugin","connector"],"description":"A Paperclip plugin","maintainers":[{"name":"khalid-byldd","email":"khalid@byldd.com"},{"name":"abhishek.singh.byldd","email":"abhishek.singh@byldd.com"},{"name":"abdul.byldd","email":"abdul@byldd.com"},{"name":"tanish_byldd","email":"tanish@byldd.com"}],"readme":"# Byldd SEO Tools — Paperclip Plugin\n\nA [Paperclip AI](https://paperclip.dev) plugin that connects autonomous SEO agents to the **Byldd SEO Backend**. It exposes keyword research, clustering, and content brief generation as agent tools — enabling a fully automated, Human-in-the-Loop SEO content pipeline.\n\n## What It Does\n\nThis plugin registers **11 agent tools** that proxy requests to the Byldd SEO backend API:\n\n| Tool | Description |\n|------|-------------|\n| `startKeywordResearch` | Start an async keyword discovery + enrichment pipeline for a seed keyword |\n| `getKeywordSessionStatus` | Poll a running keyword research job until completion |\n| `listKeywordResearchSessions` | List all past keyword research sessions |\n| `clusterKeywords` | Group enriched keywords into topical hub-and-spoke clusters |\n| `getClusterStatus` | Poll a running clustering job until completion |\n| `listClusterSessions` | List all past clustering sessions |\n| `generateContentBrief` | Generate a full content brief from a cluster or standalone keyword |\n| `getBriefStatus` | Poll a running brief generation job until completion |\n| `listContentBriefs` | List content briefs, optionally filtered by cluster |\n| `rerunBriefStage` | Regenerate a single stage of the brief pipeline |\n| `attachProofPoints` | Inject business-specific proof points (pricing, timelines, outcomes) into a brief |\n\n### UI Components\n\n| Slot | Type | Description |\n|------|------|-------------|\n| `health-widget` | Dashboard Widget | Shows plugin health status |\n| `keyword-research-tab` | Issue Detail Tab | Session picker + keyword metrics table (search volume, competition, intent, priority tier) with a per-keyword negative/exclude toggle |\n\n### Data Handlers\n\n| Key | Description |\n|-----|-------------|\n| `health` | Plugin health check |\n| `sessions` | List keyword research sessions (backs the UI tab) |\n| `enrichResult` | Full keyword metrics for a session (backs the UI tab) |\n\n### UI Actions\n\n| Key | Description |\n|-----|-------------|\n| `setKeywordNegative` | Set the negative/exclude flag on a single keyword from the Keyword Research tab |\n\n## Prerequisites\n\n- [Paperclip AI](https://paperclip.dev) instance running locally or deployed\n- [Byldd SEO Backend](https://github.com/byldd/seo-byldd-backend) running and accessible\n- Node.js ≥ 18\n\n## Setup\n\n### 1. Install Dependencies\n\n```bash\nnpm install\n```\n\n### 2. Build\n\n```bash\nnpm run build\n```\n\n### 3. Install Into Paperclip\n\nOnce published to npm, you can install the plugin directly using its package name:\n\n```bash\npaperclipai plugin install @byldd/seo-tools\n```\n\n> **Note:** For local development before publishing, you can still install it from the local path:\n> ```bash\n> paperclipai plugin install /path/to/seo-tools\n> ```\n\n### 4. Configure Credentials\n\nThis plugin reads the backend URL and auth token from **Paperclip's plugin instance config** (not hardcoded in source). Set them after installing:\n\n**Via CLI:**\n\n```bash\nnpx paperclipai plugin config:set byldd.seo-tools \\\n  --payload-json '{\"backendUrl\":\"<YOUR_BACKEND_URI>\",\"authToken\":\"<YOUR_JWT_TOKEN>\"}'\n```\n\n**Via Paperclip UI:**\n\n1. Open Paperclip → **Settings** → **Plugins** → **Seo Tools**\n2. Fill in:\n   - **Backend URL**: Your SEO backend base URL \n   - **Auth Token**: A valid JWT token for the backend\n\n> **Note:** The auth token is a JWT with an expiry. Rotate it in the Paperclip UI when it expires — no code changes needed.\n\n## Development\n\n```bash\nnpm run dev          # watch-mode rebuild (worker + manifest + UI)\nnpm run dev:ui       # local UI dev server with hot-reload\nnpm test             # run tests with vitest\nnpm run typecheck    # type-check without emitting\n```\n\n`npm run dev` rebuilds into `dist/` on file changes. Paperclip watches the output directory and hot-reloads the plugin worker automatically for local installs.\n\n## Project Structure\n\n```\nseo-tools/\n├── src/\n│   ├── worker.ts          # Plugin worker — tool handlers + data handlers\n│   ├── manifest.ts        # Plugin manifest — tools, capabilities, config schema\n│   ├── types/\n│   │   └── index.ts       # TypeScript interfaces/enums for tool params, cluster shapes, and UI rows\n│   ├── utils/\n│   │   ├── brief-view.ts       # Projects backend brief payloads into the BriefWriterView shape\n│   │   └── keyword-status.ts   # Maps keyword enums (tier, competition, intent) to StatusBadge variants\n│   └── ui/\n│       ├── index.tsx               # React UI components (dashboard widget, detail tab entry)\n│       └── KeywordResearchTab.tsx  # Keyword research detail tab (session picker + metrics table)\n├── tests/\n│   └── plugin.spec.ts     # Plugin tests\n├── dist/                  # Build output (gitignored)\n├── esbuild.config.mjs     # esbuild bundler config\n├── rollup.config.mjs      # Rollup bundler config (alternative)\n├── tsconfig.json\n├── vitest.config.ts\n└── package.json\n```\n\n## Configuration Schema\n\nThe plugin declares an `instanceConfigSchema` in the manifest. Operators fill these fields in the Paperclip UI:\n\n| Field | Type | Required | Description |\n|-------|------|----------|-------------|\n| `backendUrl` | `string` | ✅ | Base URL of the SEO backend API |\n| `authToken` | `string` | ✅ | JWT auth token for the backend |\n\n## Capabilities\n\nThis plugin requests the following Paperclip capabilities:\n\n| Capability | Purpose |\n|------------|---------|\n| `agent.tools.register` | Register SEO tools for agent use |\n| `http.outbound` | Make HTTP requests to the SEO backend |\n| `ui.detailTab.register` | Render the Keyword Research tab on issues |\n| `ui.action.register` | Register UI actions callable from plugin UI components (e.g. `setKeywordNegative`) |\n| `ui.dashboardWidget.register` | Render the health dashboard widget |\n| `events.subscribe` | Listen to Paperclip domain events |\n| `plugin.state.read` | Read plugin-scoped state |\n| `plugin.state.write` | Write plugin-scoped state |\n\n## Build Options\n\n- `npm run build` — esbuild (default, faster)\n- `npm run build:rollup` — rollup (alternative)\n\nBoth output to `dist/`.\n\n## License\n\nMIT\n","readmeFilename":"README.md"}