{"_id":"@aidex/marketing","_rev":"8-acca35540151243ec405954cb645fe2d","name":"@aidex/marketing","dist-tags":{"latest":"1.2.0"},"versions":{"0.1.0-alpha":{"name":"@aidex/marketing","version":"0.1.0-alpha","keywords":["ai","marketing","campaign","seo","social-media","email-marketing","analytics","feature-pack"],"author":"Sudheer Babu <isudheerbabu.dev@gmail.com>","license":"MIT","_id":"@aidex/marketing@0.1.0-alpha","maintainers":[{"name":"sudheerbabu","email":"isudheerbabu.dev@gmail.com"}],"homepage":"https://github.com/getaidex/aidex/tree/main/packages/marketing#readme","bugs":{"url":"https://github.com/getaidex/aidex/issues"},"dist":{"shasum":"38aa19d835054bb6c7da114faec21f0b273fe61f","tarball":"https://registry.npmjs.org/@aidex/marketing/-/marketing-0.1.0-alpha.tgz","fileCount":279,"integrity":"sha512-1YjoYCyhwaKox+ohEjMRGeFl/i3Cu03osWZzuFcniCV5Y+vAb0sOf5p5L3YdRnim91mjzcpph7lIq2cQKtStpw==","signatures":[{"sig":"MEUCIC7nHksVDqOTtDN4eFWmucDFDP2B0GrMwY4HLsPqaHQ8AiEAznINYzJKdy/M4FRQBY7prj1Gv5wYlO4tFmXgee8IGYE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":366032},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"build":"tsc -b","typecheck":"tsc -b --noEmit"},"_npmUser":{"name":"sudheerbabu","email":"isudheerbabu.dev@gmail.com"},"repository":{"url":"git+https://github.com/getaidex/aidex.git","type":"git","directory":"packages/marketing"},"description":"Aidex Marketing — an Aidex Feature Pack: engine identifiers and typed request/response contracts for campaign planning, SEO, social media, email marketing, and marketing analytics.","directories":{},"sideEffects":false,"_nodeVersion":"24.13.0","dependencies":{"@aidex/sdk":"0.1.0-alpha","@aidex/core":"0.1.0-alpha","@aidex/catalog":"0.1.0-alpha","@aidex/engines":"0.1.0-alpha","@aidex/prompts":"0.1.0-alpha","@aidex/workflow":"0.1.0-alpha","@aidex/observability":"0.1.0-alpha"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/marketing_0.1.0-alpha_1785768607776_0.9276609857416793","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-alpha":{"name":"@aidex/marketing","version":"0.2.0-alpha","keywords":["ai","marketing","campaign","seo","social-media","email-marketing","analytics","feature-pack"],"author":"Sudheer Babu <isudheerbabu.dev@gmail.com>","license":"MIT","_id":"@aidex/marketing@0.2.0-alpha","maintainers":[{"name":"sudheerbabu","email":"isudheerbabu.dev@gmail.com"}],"homepage":"https://github.com/getaidex/aidex/tree/main/packages/marketing#readme","bugs":{"url":"https://github.com/getaidex/aidex/issues"},"dist":{"shasum":"c76fb468847d2427064b64eb02a65397d5ca7c95","tarball":"https://registry.npmjs.org/@aidex/marketing/-/marketing-0.2.0-alpha.tgz","fileCount":145,"integrity":"sha512-9XTqZxKTIWC0MnkKcCbJ3O75+o9+N+FzsVXzcXNDBY7/9RCEQpMTJDCfJoRQGXhj1svHKDZhvAxrXDwrZBQ+RQ==","signatures":[{"sig":"MEUCIAW9RiSbwo+vGXRsc2aP8LRR6ohRGB4ldUahjGylrrt0AiEAgktCnpA7XAwgKIKDrFgUUwMTh3fS6Uyx294hhrkXaT8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":718455},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"scripts":{"build":"tsc -b && tsup","typecheck":"tsc -b --noEmit"},"_npmUser":{"name":"sudheerbabu","email":"isudheerbabu.dev@gmail.com"},"repository":{"url":"git+https://github.com/getaidex/aidex.git","type":"git","directory":"packages/marketing"},"description":"Aidex Marketing — an Aidex Feature Pack: engine identifiers and typed request/response contracts for campaign planning, SEO, social media, email marketing, and marketing analytics.","directories":{},"sideEffects":false,"_nodeVersion":"24.13.0","dependencies":{"@aidex/sdk":"0.2.0-alpha","@aidex/core":"0.2.0-alpha","@aidex/catalog":"0.2.0-alpha","@aidex/engines":"0.2.0-alpha","@aidex/prompts":"0.2.0-alpha","@aidex/workflow":"0.2.0-alpha","@aidex/observability":"0.2.0-alpha"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/marketing_0.2.0-alpha_1785772049996_0.43828771698385305","host":"s3://npm-registry-packages-npm-production"}},"0.2.1-alpha":{"name":"@aidex/marketing","version":"0.2.1-alpha","keywords":["ai","marketing","campaign","seo","social-media","email-marketing","analytics","feature-pack"],"author":"Sudheer Babu <isudheerbabu.dev@gmail.com>","license":"MIT","_id":"@aidex/marketing@0.2.1-alpha","maintainers":[{"name":"sudheerbabu","email":"isudheerbabu.dev@gmail.com"}],"homepage":"https://github.com/getaidex/aidex/tree/main/packages/marketing#readme","bugs":{"url":"https://github.com/getaidex/aidex/issues"},"dist":{"shasum":"7ea35408e666212652a389ce8232b464afc9b750","tarball":"https://registry.npmjs.org/@aidex/marketing/-/marketing-0.2.1-alpha.tgz","fileCount":146,"integrity":"sha512-+OE4IgYUyr6xQXAtzXqynRGt0mtG+BVp+k7CpQN+FV3wMF/tfGybBQRgY1VEpfdh2EcQJpl43EkdTY+aifA72Q==","signatures":[{"sig":"MEYCIQDgNrsGZRltZ2MFR0PyaXyIKDEeW0YrlaNvnvHGjSv5KgIhAJXNos5UIldbvJeqSPgPm0eQEWfLihEzDoFTl8Z934uX","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":825454},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"scripts":{"build":"tsc -b && tsup","typecheck":"tsc -b --noEmit"},"_npmUser":{"name":"sudheerbabu","email":"isudheerbabu.dev@gmail.com"},"repository":{"url":"git+https://github.com/getaidex/aidex.git","type":"git","directory":"packages/marketing"},"description":"Aidex Marketing — an Aidex Feature Pack: engine identifiers and typed request/response contracts for campaign planning, SEO, social media, email marketing, and marketing analytics.","directories":{},"sideEffects":false,"_nodeVersion":"24.13.0","dependencies":{"@aidex/sdk":"0.2.1-alpha","@aidex/core":"0.2.1-alpha","@aidex/catalog":"0.2.1-alpha","@aidex/engines":"0.2.1-alpha","@aidex/prompts":"0.2.1-alpha","@aidex/workflow":"0.2.1-alpha","@aidex/observability":"0.2.1-alpha"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/marketing_0.2.1-alpha_1785778174149_0.07426345456051742","host":"s3://npm-registry-packages-npm-production"}},"0.3.0-alpha":{"name":"@aidex/marketing","version":"0.3.0-alpha","keywords":["ai","marketing","campaign","seo","social-media","email-marketing","analytics","feature-pack"],"author":"Sudheer Babu <isudheerbabu.dev@gmail.com>","license":"MIT","_id":"@aidex/marketing@0.3.0-alpha","maintainers":[{"name":"sudheerbabu","email":"isudheerbabu.dev@gmail.com"}],"homepage":"https://github.com/getaidex/aidex/tree/main/packages/marketing#readme","bugs":{"url":"https://github.com/getaidex/aidex/issues"},"dist":{"shasum":"f104be017bd9f0a415e2186afb36982ca0ee4051","tarball":"https://registry.npmjs.org/@aidex/marketing/-/marketing-0.3.0-alpha.tgz","fileCount":9,"integrity":"sha512-ZiIKiR2dJLcTIppSJttA6jFlIzgo0WDfpnexIXUCFU/s+cvLXdYX9O8L1pUP5yeVlMJjXIM8X8p3c+9mIa1Yow==","signatures":[{"sig":"MEYCIQChgrN+3mh3/ujLo8FDZtevT8xCYDfc3pwP1BJHcK5iXgIhAIowyBTnqHqIFM+mxsWKxV+xguUw0Oz6kbc6TpZQXDo7","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":697601},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20.19.0","pnpm":">=9"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"scripts":{"build":"tsc -b && tsup","typecheck":"tsc -b --noEmit"},"_npmUser":{"name":"sudheerbabu","email":"isudheerbabu.dev@gmail.com"},"repository":{"url":"git+https://github.com/getaidex/aidex.git","type":"git","directory":"packages/marketing"},"description":"Aidex Marketing — an Aidex Feature Pack: engine identifiers and typed request/response contracts for campaign planning, SEO, social media, email marketing, and marketing analytics.","directories":{},"sideEffects":false,"_nodeVersion":"24.13.0","dependencies":{"@aidex/sdk":"0.3.0-alpha","@aidex/core":"0.3.0-alpha","@aidex/catalog":"0.3.0-alpha","@aidex/engines":"0.3.0-alpha","@aidex/prompts":"0.3.0-alpha","@aidex/workflow":"0.3.0-alpha","@aidex/observability":"0.3.0-alpha"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/marketing_0.3.0-alpha_1786213616455_0.3834577451462635","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@aidex/marketing","version":"1.0.0","keywords":["ai","marketing","campaign","seo","social-media","email-marketing","analytics","feature-pack"],"author":"Sudheer Babu <isudheerbabu.dev@gmail.com>","license":"MIT","_id":"@aidex/marketing@1.0.0","maintainers":[{"name":"sudheerbabu","email":"isudheerbabu.dev@gmail.com"}],"homepage":"https://github.com/getaidex/aidex/tree/main/packages/marketing#readme","bugs":{"url":"https://github.com/getaidex/aidex/issues"},"dist":{"shasum":"dd75d0395b5d9e9c86bbdf2f97b6ba6257885926","tarball":"https://registry.npmjs.org/@aidex/marketing/-/marketing-1.0.0.tgz","fileCount":10,"integrity":"sha512-bSWDsLpTzGuGaf159/sJijCFlWIJd3LpnmNhukp8s58fv/5EADV+/z9cokwmRK8XBXnD0DAszmFLQYaTbsFzaQ==","signatures":[{"sig":"MEQCIFY2hvyfBfDRXWAmEIFp/R4oMALfpZ4Yn4/3321ysRb6AiAT+YcnwBQsXnFURL40E70KTXE/sbTMf5Y4/DmcceYIuw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":698071},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20.19.0","pnpm":">=9"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"scripts":{"build":"tsc -b && tsup","typecheck":"tsc -b --noEmit"},"_npmUser":{"name":"sudheerbabu","email":"isudheerbabu.dev@gmail.com"},"repository":{"url":"git+https://github.com/getaidex/aidex.git","type":"git","directory":"packages/marketing"},"description":"Aidex Marketing — an Aidex Feature Pack: engine identifiers and typed request/response contracts for campaign planning, SEO, social media, email marketing, and marketing analytics.","directories":{},"sideEffects":false,"_nodeVersion":"24.13.0","dependencies":{"@aidex/sdk":"1.0.0","@aidex/core":"1.0.0","@aidex/catalog":"1.0.0","@aidex/engines":"1.0.0","@aidex/prompts":"1.0.0","@aidex/workflow":"1.0.0","@aidex/observability":"1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/marketing_1.0.0_1786431588089_0.37480267277567525","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@aidex/marketing","version":"1.0.1","keywords":["ai","marketing","campaign","seo","social-media","email-marketing","analytics","feature-pack"],"author":"Sudheer Babu <isudheerbabu.dev@gmail.com>","license":"MIT","_id":"@aidex/marketing@1.0.1","maintainers":[{"name":"sudheerbabu","email":"isudheerbabu.dev@gmail.com"}],"homepage":"https://github.com/getaidex/aidex/tree/main/packages/marketing#readme","bugs":{"url":"https://github.com/getaidex/aidex/issues"},"dist":{"shasum":"e54e0a43816a29f0086748c718a9cb74434c7120","tarball":"https://registry.npmjs.org/@aidex/marketing/-/marketing-1.0.1.tgz","fileCount":10,"integrity":"sha512-to579lLJxrykfRBW04EvW1hFKl7TKBlTZAVoWKcfeqZnW2GkYI25XNNCn8YJFoBvCtzN0yul1OtHEBspSWcqXQ==","signatures":[{"sig":"MEYCIQDCDqYIwM5EYZG1obIWQxe1lcGgcLv2jOqUd3tWKDqn+QIhAL8quaQotCI2KS8cyn8cBMD1kXtO2+HiXe0kTGUdgmet","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":698071},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20.19.0","pnpm":">=9"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"scripts":{"build":"tsc -b && tsup","typecheck":"tsc -b --noEmit"},"_npmUser":{"name":"sudheerbabu","email":"isudheerbabu.dev@gmail.com"},"repository":{"url":"git+https://github.com/getaidex/aidex.git","type":"git","directory":"packages/marketing"},"description":"Aidex Marketing — an Aidex Feature Pack: engine identifiers and typed request/response contracts for campaign planning, SEO, social media, email marketing, and marketing analytics.","directories":{},"sideEffects":false,"_nodeVersion":"24.13.0","dependencies":{"@aidex/sdk":"1.0.1","@aidex/core":"1.0.1","@aidex/catalog":"1.0.1","@aidex/engines":"1.0.1","@aidex/prompts":"1.0.1","@aidex/workflow":"1.0.1","@aidex/observability":"1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/marketing_1.0.1_1786432226611_0.11870497847396178","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@aidex/marketing","version":"1.1.0","keywords":["ai","marketing","campaign","seo","social-media","email-marketing","analytics","feature-pack"],"author":{"name":"Sudheer Babu","email":"isudheerbabu.dev@gmail.com"},"license":"MIT","_id":"@aidex/marketing@1.1.0","maintainers":[{"name":"sudheerbabu","email":"isudheerbabu.dev@gmail.com"}],"homepage":"https://github.com/getaidex/aidex/tree/main/packages/marketing#readme","bugs":{"url":"https://github.com/getaidex/aidex/issues"},"dist":{"shasum":"35a1a6003c538ea599d3f7614aeb1e1c58f1c041","tarball":"https://registry.npmjs.org/@aidex/marketing/-/marketing-1.1.0.tgz","fileCount":146,"integrity":"sha512-xNYdRE/OkME7x9ORMM4LUTpCnn9B4+zp8wz9p/5QkbYzvn4pYQqnis0flBIbE9U4btjWpsxwbYogyEiNAiYvpw==","signatures":[{"sig":"MEUCID8odeYqQJu+RnvouCqLspczoeTxpcREbyyBn6lJ3ZFzAiEAsWg5ShP/dF1vOSIwyYnOQ7VkubRHp25ysrgt5WhuGBs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":825421},"main":"./dist/index.cjs","type":"module","_from":"file:aidex-marketing-1.1.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20.19.0","pnpm":">=9"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"scripts":{"build":"tsc -b && tsup","typecheck":"tsc -b --noEmit"},"_npmUser":{"name":"sudheerbabu","email":"isudheerbabu.dev@gmail.com"},"_resolved":"/tmp/6086295eb03b6649dc0d7e1f6b5e7cad/aidex-marketing-1.1.0.tgz","_integrity":"sha512-xNYdRE/OkME7x9ORMM4LUTpCnn9B4+zp8wz9p/5QkbYzvn4pYQqnis0flBIbE9U4btjWpsxwbYogyEiNAiYvpw==","repository":{"url":"git+https://github.com/getaidex/aidex.git","type":"git","directory":"packages/marketing"},"_npmVersion":"10.9.8","description":"Aidex Marketing — an Aidex Feature Pack: engine identifiers and typed request/response contracts for campaign planning, SEO, social media, email marketing, and marketing analytics.","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"@aidex/sdk":"1.1.0","@aidex/core":"1.1.0","@aidex/catalog":"1.1.0","@aidex/engines":"1.1.0","@aidex/prompts":"1.1.0","@aidex/workflow":"1.1.0","@aidex/observability":"1.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/marketing_1.1.0_1787417555207_0.19377218548787645","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@aidex/marketing","version":"1.2.0","description":"Aidex Marketing — an Aidex Feature Pack: engine identifiers and typed request/response contracts for campaign planning, SEO, social media, email marketing, and marketing analytics.","keywords":["ai","marketing","campaign","seo","social-media","email-marketing","analytics","feature-pack"],"license":"MIT","author":"Sudheer Babu <isudheerbabu.dev@gmail.com>","homepage":"https://github.com/getaidex/aidex/tree/main/packages/marketing#readme","repository":{"type":"git","url":"git+https://github.com/getaidex/aidex.git","directory":"packages/marketing"},"bugs":{"url":"https://github.com/getaidex/aidex/issues"},"type":"module","main":"./dist/index.cjs","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"sideEffects":false,"publishConfig":{"access":"public"},"dependencies":{"@aidex/catalog":"1.2.0","@aidex/core":"1.2.0","@aidex/engines":"1.2.0","@aidex/prompts":"1.2.0","@aidex/sdk":"1.2.0","@aidex/workflow":"1.2.0","@aidex/observability":"1.2.0"},"engines":{"node":">=20.19.0","pnpm":">=9"},"scripts":{"build":"tsc -b && tsup","typecheck":"tsc -b --noEmit"},"_nodeVersion":"24.13.0","_id":"@aidex/marketing@1.2.0","dist":{"integrity":"sha512-WaPI16aY19V4brtCjfxUspseldThr5JPkKuObDiPwduW8aT90QFowpRhOAOv9b1LaAOdHWNYsF+0aZzZRUnvUw==","shasum":"b6aa5f4df3e5f29d13915e74edd5788b14a0b85c","tarball":"https://registry.npmjs.org/@aidex/marketing/-/marketing-1.2.0.tgz","fileCount":146,"unpackedSize":825421,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDV7w7NNF3EOtUVHA99KH3HSc30frUKJ5M8X3+VdAPvIAIhAO94CvbfxDrCtjD3IgiuAQH5B00H8Lma+CjZOal1xfjH"}]},"_npmUser":{"name":"sudheerbabu","email":"isudheerbabu.dev@gmail.com"},"directories":{},"maintainers":[{"name":"sudheerbabu","email":"isudheerbabu.dev@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/marketing_1.2.0_1787491738817_0.6073759117947826"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-03T14:50:07.579Z","modified":"2026-08-23T13:28:59.092Z","0.1.0-alpha":"2026-08-03T14:50:07.910Z","0.2.0-alpha":"2026-08-03T15:47:30.183Z","0.2.1-alpha":"2026-08-03T17:29:34.289Z","0.3.0-alpha":"2026-08-08T18:26:56.625Z","1.0.0":"2026-08-11T06:59:48.217Z","1.0.1":"2026-08-11T07:10:26.789Z","1.1.0":"2026-08-22T16:52:35.373Z","1.2.0":"2026-08-23T13:28:58.942Z"},"bugs":{"url":"https://github.com/getaidex/aidex/issues"},"author":"Sudheer Babu <isudheerbabu.dev@gmail.com>","license":"MIT","homepage":"https://github.com/getaidex/aidex/tree/main/packages/marketing#readme","keywords":["ai","marketing","campaign","seo","social-media","email-marketing","analytics","feature-pack"],"repository":{"type":"git","url":"git+https://github.com/getaidex/aidex.git","directory":"packages/marketing"},"description":"Aidex Marketing — an Aidex Feature Pack: engine identifiers and typed request/response contracts for campaign planning, SEO, social media, email marketing, and marketing analytics.","maintainers":[{"name":"sudheerbabu","email":"isudheerbabu.dev@gmail.com"}],"readme":"# @aidex/marketing\n\n## Installation\n\n```sh\npnpm add @aidex/marketing\n```\n\n```sh\nnpm install @aidex/marketing\n```\n\nAn **Aidex Feature Pack** — campaign planning, SEO, social media, email\nmarketing, and marketing analytics, built to the reference architecture\n`@aidex/document`, `@aidex/content`, `@aidex/design`, and `@aidex/media`\nestablished.\n\n## What this is\n\nA Feature Pack is a domain-specific capability layer built *on* the Aidex\nplatform, consumed the same way any external developer would consume it —\nnever granted special access to `packages/core` or any other platform\npackage. `@aidex/marketing` covers cross-marketing operations: planning\ncampaigns and calendars; generating SEO keywords, meta tags, and audits;\ngenerating and scheduling social media content; generating email subject\nlines, copy, and sequences; and summarizing/analyzing marketing metrics.\n\n## Status\n\n| Phase | What it added | State |\n| --- | --- | --- |\n| 1 | Engine ids + typed request/response contracts + catalog metadata | Done |\n| 2 | Executable engines returning deterministic placeholder results | Done |\n| 3 | AI integration — prompt → provider → structured result | Done |\n| 4 | Reusable multi-engine workflows | Done |\n\nAll 14 engines are AI-backed: each resolves its own registered prompt,\ncalls `context.provider.generate()`, and parses the response into its\nResult type. `MARKETING_ENGINE_METADATA` versions are `1.0.0` across all\n14 entries. 5 workflows compose existing engines via `@aidex/workflow`'s\nreal `Workflow`/`WorkflowStep`/`WorkflowExecutor` contract:\n`marketing.workflow.campaign`, `marketing.workflow.social`,\n`marketing.workflow.email`, `marketing.workflow.seo`,\n`marketing.workflow.analytics`. No new engines, no new prompts, no new\nproviders, no application-specific logic, no vendor SDKs, no external\nAPIs.\n\n## Dependencies\n\n`@aidex/catalog` (for the `EngineMetadata` type `MARKETING_ENGINE_METADATA`\nis typed against), `@aidex/core` (for `ExecutionContext`/`Provider`/\n`Strategy`), `@aidex/engines` (for the `Engine` interface), `@aidex/prompts`\n(for `PromptRegistry`), `@aidex/observability` (for the optional\n`ObservabilityBus` every Strategy can record events to), and\n`@aidex/workflow` (for `Workflow`/`WorkflowStep`/`WorkflowExecutor`, added\nthis phase). No provider SDK — this package stays provider-agnostic, same\nas every other Feature Pack.\n\n## Folder structure\n\n```\nsrc/\n  index.ts\n  identifiers.ts\n  types/\n    marketing.types.ts   — MarketingBrief, MarketingChannel (shared base)\n    campaign.types.ts    — campaign.plan / campaign.brief / campaign.calendar\n    seo.types.ts          — seo.keywords / seo.meta / seo.audit\n    social.types.ts       — social.caption / social.hashtags / social.schedule\n    email.types.ts        — email.subject / email.copy / email.sequence\n    analytics.types.ts    — analytics.summary / analytics.insights\n  engines/\n    metadata.ts           — MARKETING_ENGINE_METADATA\n```\n\nTypes are grouped by marketing subdomain (one file per category), matching\n`@aidex/media`'s Phase 1 structure — not `@aidex/document`'s/`@aidex/content`'s/\n`@aidex/design`'s one-file-per-engine layout.\n\n## Engine identifiers\n\n14 engines across 4 categories, all under the `marketing.*` namespace:\n\n| Category | Engine id |\n| --- | --- |\n| Campaign | `marketing.campaign.plan`, `marketing.campaign.brief`, `marketing.campaign.calendar` |\n| SEO | `marketing.seo.keywords`, `marketing.seo.meta`, `marketing.seo.audit` |\n| Social | `marketing.social.caption`, `marketing.social.hashtags`, `marketing.social.schedule` |\n| Email | `marketing.email.subject`, `marketing.email.copy`, `marketing.email.sequence` |\n| Analytics | `marketing.analytics.summary`, `marketing.analytics.insights` |\n\n## Engine Catalog metadata\n\n`MARKETING_ENGINE_METADATA` registers all 14 engines with `@aidex/catalog`'s\n`EngineMetadata` shape — `version: '0.1.0'` (planned, not yet\nimplemented), one `requestType`/`responseType` pair per engine, and\ncategories reused entirely from the existing catalog (`generation`,\n`transformation`, `analysis`, `planning`, `summarization`, `marketing`) —\nzero new categories invented. Live-verified: `EngineCatalog.findByCategory\n('marketing')` groups `marketing.social.caption`/`marketing.social.hashtags`\ntogether with `@aidex/design`'s `design.banner`/`design.social-post`, and\n`findByCategory('summarization')` groups `marketing.analytics.summary`\nwith `@aidex/media`'s `media.audio.summarize`.\n\n## Feature Package Manifest\n\n`MARKETING_FEATURE_PACKAGE` (a `FeaturePackage` from `@aidex/sdk`) bundles\nevery engine, prompt, and catalog-metadata entry this package ships, ready\nfor `AIBuilder.use(MARKETING_FEATURE_PACKAGE)`:\n\n```ts\nimport { AIBuilder } from '@aidex/sdk';\nimport { MARKETING_FEATURE_PACKAGE } from '@aidex/marketing';\n\nconst ai = new AIBuilder().provider(myProvider).use(MARKETING_FEATURE_PACKAGE).build();\n```\n\nEvery engine in this manifest is a **singleton** — constructed once, at\nmodule load, and shared across every `EngineRegistry` that registers it.\nEngine implementations must stay stateless: all execution state belongs\non `ExecutionContext`, never on the engine instance itself.\n\n`workflows` (`CampaignWorkflow`, `SocialWorkflow`, `EmailWorkflow`,\n`SeoWorkflow`, `AnalyticsWorkflow`) is pass-through only —\n`AIBuilder.use()` never registers, adapts, or executes them. Call each\nworkflow's own `.run(input, provider, options)` directly.\n\n## Design decisions\n\n**`MarketingBrief` stays genuinely minimal — two fields, not more.**\nAlmost every generative engine in this pack needs a `brief` (the creative\nstarting point) and benefits from an optional `targetAudience` — unlike\n`@aidex/media`'s domain, where a shared \"audience\" concept doesn't apply\ncleanly across image/video/audio operations, marketing is inherently\naudience-directed. Fields like `tone`, `channel`, or `budget` stayed out\nof the shared base because they're not universal: `seo.audit` has no\naudience at all, and `campaign.plan`'s `budget`/`channels` are specific to\none engine, not shared across the pack.\n\n**8 of 14 requests extend `MarketingBrief`; 6 deliberately don't.** The\n6 — `campaign.calendar`, `seo.meta`, `seo.audit`, `social.schedule`,\n`analytics.summary`, `analytics.insights` — operate on *already-produced*\nmaterial (an existing campaign plan, existing page content, an existing\nURL, already-written posts, existing metrics data), not a fresh creative\nbrief. Extending `MarketingBrief` onto them would add a required field\nwith nothing meaningful to say — the same reasoning `@aidex/media`'s\n`image.optimize`/`video.thumbnail`/`audio.transcribe`/`audio.summarize`/\n`asset.convert` established for their own domain.\n\n**`MarketingChannel` (marketing.types.ts) vs `SocialPlatform`\n(social.types.ts) are deliberately two different types**, not one shared\nenum. `MarketingChannel` (`'email' | 'social' | 'seo' | 'paid-ads' |\n'content'`) names broad marketing channels a campaign spans; `SocialPlatform`\n(`'instagram' | 'twitter' | 'linkedin' | 'facebook' | 'tiktok'`) names\nspecific social networks a caption/hashtag set/scheduled post targets.\nCollapsing them into one union would either pollute campaign-level channel\nselection with platform-specific values, or force social engines to\naccept irrelevant values like `'paid-ads'`.\n\n**Categories deliberately reuse the existing cross-pack vocabulary, with\nzero new categories.** `generation`, `transformation`, `analysis`,\n`planning`, and `summarization` are the exact strings `@aidex/document`,\n`@aidex/content`, `@aidex/design`, and `@aidex/media` already use.\n`marketing` — reused specifically from `design.banner`/`design.social-post`\n— is applied to `social.caption`/`social.hashtags` because those two\nengines produce the same kind of artifact (a piece of promotional social\ncontent), not because this whole pack is \"about marketing\" (that would\nmake the category redundant with `featurePack`, the same reason no other\npack blanket-tags every entry with its own domain name).\n\n**`CampaignCalendarRequest` takes `campaignContext: string`, not a\nstructured `CampaignPlanResult`.** Phase 1 contracts stay engine-local —\nno engine's Request type reaches into another engine's Result type across\nfiles, keeping every contract independently understandable and avoiding a\ncoupling that would only make sense once real composition (a future\nPhase 4 workflow) exists.\n\n**A 3rd validation helper, `assertHasNonEmptyArrayField`, is new to this\npack.** `@aidex/media`'s Phase 2 needed only `assertHasNonEmptyStringField`\nand `assertHasValidSource` (a specific object shape). This pack has no\n\"source\" concept, but 3 requests (`social.schedule`'s `posts`,\n`analytics.summary`'s/`analytics.insights`' `metrics`) require a\nnon-empty array — a genuinely recurring shape across 3 engines, unlike\n`campaign.calendar`'s one-off required `durationDays` number, which is\nvalidated inline rather than promoted to a 4th shared helper for a single\ncall site.\n\n**No `assertHasValidSource`-style type-narrowing chain exists here.**\nEvery validation helper in this pack only narrows `input` to\n`Record<string, unknown>`, never to a specific field's type — engines\nread fields with a plain cast afterward (`input.brief as string`), the\nsame pattern `@aidex/media`'s engines use for their own `brief`/`source`\nreads once already narrowed. `@aidex/media` needed a more specific\nintersected assertion type only for `assertHasValidSource` specifically,\nbecause it was chained *after* a string-field assertion on the same\n`input` and needed to preserve access to prior fields through that second\nassertion — a scenario this pack's Phase 2 engines don't hit.\n\n**`addDays` (engines/internal/text.ts) makes `campaign.calendar` and\n`social.schedule` genuinely deterministic despite producing per-day\ndates.** Both derive every date arithmetically from the caller-supplied\n`startDate`, never from `Date.now()` — the same \"no randomness, no\ntimestamps\" discipline `@aidex/media`'s Phase 2 placeholders established,\nextended here to date math instead of asset URLs.\n\n**Every Phase 3 Result shape is genuinely AI-producible text/structured\ncontent — no `@aidex/media`-style \"binary asset\" workaround was needed\nanywhere in this pack.** `@aidex/media`'s Phase 3 had to invent\n`mediaAssetFromDescription` (encoding AI text as a `data:text/plain,` URI)\nbecause 9 of its 13 Results represented binary assets a text-only\nProvider can't actually render. Every one of this pack's 14 Results —\ncampaign plans, keyword lists, captions, email copy, metric summaries —\nis exactly the kind of structured text a Provider can produce directly, so\nevery Strategy here parses straight from JSON with no encoding trick.\n\n**Deterministic fields stay deterministic — never re-derived from the\nAI — even in the AI-backed Phase 3 versions.** `campaign.plan`'s\n`channels`, `campaign.calendar`'s `date`/`channel` per entry,\n`email.sequence`'s `sendDayOffset` per step, and `social.schedule`'s\n`publishAt` per entry are all computed the same way Phase 2 computed\nthem — from the request/`addDays`, never asked of the provider. Only the\ngenuinely creative parts of each Result (objectives, activity text,\nsubject/body copy, captions) come from the JSON response. This mirrors\n`@aidex/media`'s Phase 3 split (`mimeType`/`fileSizeKb` staying\ndeterministic while `assetUrl` came from AI), applied here to date math\nand channel assignment instead.\n\n**`social.schedule` is the one interesting design call in this phase.**\nIts Result (`ScheduledPost[]`) already had all its data — `content`,\n`platform` from the caller, `publishAt` computable from `startDate` — so a\nnaive Phase 3 upgrade would have nothing for the provider to do. Instead,\nthe prompt asks the provider to decide the optimal *publishing order* for\nthe given posts, returned as a permutation of 0-based indices\n(`{\"order\": [...]}`). `parseSocialScheduleResponse` validates it's a true\npermutation (correct length, no duplicates, no out-of-range indices)\nbefore applying it — a genuinely AI-driven decision with deterministic\nguardrails, not a rubber-stamp wrapper around already-complete data.\n\n**`buildAudienceNote` is new to this pack** (`strategies/\nbuildAudienceNote.ts`) — 8 of 14 strategies extend `MarketingBrief` and\ncan supply an optional `targetAudience`; extracted once rather than\nrepeated 8 times, in the same spirit as `@aidex/design`'s\n`buildGuidanceNote`/`@aidex/media`'s `buildSourceNote` but scoped to the\none field this pack's requests actually share (this pack has no\n`style`/`source` concept spanning every request the way those other packs\ndo).\n\n**`coerce.ts` gained `asRecordArray`/`asNumberArray`, new relative to\n`@aidex/media`'s Phase 3.** 4 Result shapes here\n(`CampaignPlanResult.objectives`, `SeoKeywordsResult.keywords`,\n`SeoAuditResult.findings`, `AnalyticsInsightsResult.insights`) are arrays\nof objects, not arrays of strings — `@aidex/media`'s coerce toolkit never\nneeded an object-array reader because none of its Results had that shape.\n`asNumberArray` exists solely for `social.schedule`'s `order` permutation.\n\n**4 of 5 workflows are genuinely data-dependent pipelines — more than\neither `@aidex/design`'s or `@aidex/media`'s Phase 4.** `CampaignWorkflow`\nchains all 3 steps: `campaign.brief`'s formal document becomes\n`campaign.plan`'s own brief text, and `campaign.plan`'s summary/channels\nbecome `campaign.calendar`'s context. `SocialWorkflow` chains all 3:\n`social.caption`'s and `social.hashtags`' own outputs are combined into\nthe single post `social.schedule` schedules. `EmailWorkflow` chains all 3\nby folding each step's own output into the next step's brief text as\ninspiration/core-message. `SeoWorkflow` chains all 3: `seo.keywords`' top\nresult becomes `seo.meta`'s `targetKeyword`, and `seo.meta`'s own\ntitle/description are folded into the content `seo.audit` reviews. Only\n`AnalyticsWorkflow` has no real dependency between its 2 steps — the same\nhonest constraint `@aidex/media`'s `AudioProcessingWorkflow` documented:\n`analytics.insights`' Phase 1 contract takes structured `MetricPoint[]`,\nnot free text, so there's no field for `analytics.summary`'s narrative\noutput to flow into. Reshaping that contract to fit workflow convenience\nwould violate Phase 4's own \"do not duplicate engine logic\" constraint\nfrom the other direction. See each workflow's own doc comment for the\nspecific rationale.\n\n**`social.schedule`'s single-post composition is a deliberate\nsimplification, not a limitation being hidden.** `SocialWorkflow`\nproduces exactly one social post (one caption + one hashtag set), so\n`social.schedule`'s AI-decided \"optimal publishing order\" (from Phase 3)\noperates on a list of length 1 — a trivial permutation. The workflow\nstill calls the real engine with its real contract rather than\nspecial-casing around it; a future caller composing multiple\n`SocialWorkflow` runs into a shared `posts` array would get genuine\nreordering value from the same engine, unchanged.\n\n**Workflow file names also stay unprefixed** (`CampaignWorkflow.ts`, not\n`MarketingCampaignWorkflow.ts`), consistent with Phase 1–3's own\nunprefixed convention for this pack.\n\n## Why this follows the reference architecture\n\n- **Standalone.** No dependency on any Aidex platform package beyond\n  `@aidex/catalog`'s pure metadata type.\n- **Consumes, never modifies, the platform.** Nothing in this package\n  changes `@aidex/core`, `@aidex/sdk`, `@aidex/providers`, `@aidex/plugins`,\n  `@aidex/workflow`, `@aidex/prompts`, `@aidex/tools`, `@aidex/observability`,\n  or any other Feature Pack.\n- **Strongly typed.** Every one of the 14 engines has its own\n  `*Request`/`*Result` pair — no engine is forced into a generic\n  `MarketingResult` that would erase real structural differences (a\n  keyword list is not a calendar is not an email sequence).\n- **Independently publishable.** Standard `package.json`\n  `main`/`types`/`exports` shape, `files: [\"dist\", \"README.md\"]`, and a\n  `dist/` build — the same npm-packaging discipline every other Feature\n  Pack in this repo follows (including the repo-wide fix that keeps\n  compiled `*.test.ts` files out of every tarball).\n","readmeFilename":""}