codymaster 5.2.0 → 7.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (380) hide show
  1. package/CHANGELOG.md +276 -0
  2. package/README.md +216 -333
  3. package/dist/agent/antigravity.js +152 -0
  4. package/dist/agent/backend.js +2 -0
  5. package/dist/agent/claude.js +196 -0
  6. package/dist/agent/codex.js +204 -0
  7. package/dist/agent/copilot.js +284 -0
  8. package/dist/agent/cursor.js +211 -0
  9. package/dist/agent/factory.js +30 -0
  10. package/dist/agent/gemini.js +142 -0
  11. package/dist/agent/opencode.js +205 -0
  12. package/dist/agent/spawn-helper.js +237 -0
  13. package/dist/agent/version.js +25 -0
  14. package/dist/browse/adapter-factory.js +69 -0
  15. package/dist/browse/adapters/agent-browser-adapter.js +305 -0
  16. package/dist/browse/adapters/playwright-adapter.js +309 -0
  17. package/dist/browse/adapters/types.js +6 -0
  18. package/dist/browse/error-collector.js +132 -0
  19. package/dist/browse/event-log.js +109 -0
  20. package/dist/browse/index.js +17 -0
  21. package/dist/browse-server.js +204 -120
  22. package/dist/cli/command-registry.js +12 -0
  23. package/dist/cli/commands/dashboard.js +76 -2
  24. package/dist/cli/commands/engineering.js +218 -4
  25. package/dist/cli/commands/install.js +160 -0
  26. package/dist/cli/commands/learn.js +181 -0
  27. package/dist/cli/commands/parallel.js +138 -0
  28. package/dist/cli/commands/quality.js +105 -0
  29. package/dist/cli/commands/stack.js +49 -0
  30. package/dist/cli/commands/update.js +159 -0
  31. package/dist/cli/update-check.js +94 -10
  32. package/dist/continuity.js +3 -1
  33. package/dist/dashboard.js +47 -6
  34. package/dist/data.js +35 -0
  35. package/dist/execution/tdd-gate.js +113 -0
  36. package/dist/executor/cancel.js +34 -0
  37. package/dist/executor/gc.js +74 -0
  38. package/dist/executor/index.js +14 -0
  39. package/dist/executor/runner.js +70 -0
  40. package/dist/executor/workdir.js +31 -0
  41. package/dist/handoff/contracts.js +22 -0
  42. package/dist/handoff/index.js +18 -0
  43. package/dist/handoff/io.js +121 -0
  44. package/dist/index.js +7 -3
  45. package/dist/indexer/stack-detect.js +219 -0
  46. package/dist/install/copy.js +98 -0
  47. package/dist/install/engine.js +42 -0
  48. package/dist/install/paths.js +70 -0
  49. package/dist/install/platforms/_simple.js +85 -0
  50. package/dist/install/platforms/antigravity.js +91 -0
  51. package/dist/install/platforms/claude-code.js +107 -0
  52. package/dist/install/platforms/cursor.js +77 -0
  53. package/dist/install/platforms/index.js +27 -0
  54. package/dist/install/platforms/simple.js +163 -0
  55. package/dist/install/profiles.js +75 -0
  56. package/dist/install/types.js +2 -0
  57. package/dist/learnings.js +208 -0
  58. package/dist/mcp-context-server.js +1 -1
  59. package/dist/middleware/metrics.js +30 -0
  60. package/dist/middleware/security-headers.js +14 -0
  61. package/dist/realtime/event-bus.js +29 -0
  62. package/dist/realtime/ws-hub.js +91 -0
  63. package/dist/schemas/task-schema.js +48 -0
  64. package/dist/schemas/validate.js +18 -0
  65. package/dist/skills-lock.js +96 -0
  66. package/dist/sprint-pipeline.js +26 -0
  67. package/dist/storage/index.js +21 -0
  68. package/dist/storage/repos/activity-repo.js +46 -0
  69. package/dist/storage/repos/message-repo.js +39 -0
  70. package/dist/storage/repos/project-repo.js +56 -0
  71. package/dist/storage/repos/task-repo.js +142 -0
  72. package/dist/storage/services/project-service.js +49 -0
  73. package/dist/storage/services/task-service.js +97 -0
  74. package/dist/storage/sqlite.js +113 -0
  75. package/dist/tier-classify.js +131 -0
  76. package/dist/ui/onboarding.js +51 -15
  77. package/dist/utils/cli-utils.js +7 -2
  78. package/dist/utils/design-taste.js +108 -0
  79. package/dist/utils/output-compress.js +143 -0
  80. package/dist/vibecoding-index.js +126 -0
  81. package/package.json +27 -4
  82. package/public/dashboard/app.js +52 -1
  83. package/scripts/build-skills-lock.mjs +88 -0
  84. package/scripts/build-skills.mjs +187 -28
  85. package/scripts/compress-skill.mjs +73 -0
  86. package/scripts/deprecate-skill.mjs +72 -0
  87. package/scripts/install.sh +170 -0
  88. package/scripts/mcp-bridge.js +2 -2
  89. package/scripts/postinstall.js +54 -287
  90. package/scripts/release.sh +126 -0
  91. package/scripts/update-changelog.sh +88 -0
  92. package/scripts/validate-skills.mjs +101 -4
  93. package/skills/_shared/SKILL_TEMPLATE.md +62 -0
  94. package/skills/cm-autopilot/scripts/autopilot.py +19 -2
  95. package/skills/cm-brainstorm-idea/SKILL.md +9 -0
  96. package/skills/cm-clean-code/SKILL.md +20 -0
  97. package/skills/cm-code-review/SKILL.md +21 -0
  98. package/skills/cm-codeintell/SKILL.md +9 -0
  99. package/skills/cm-conductor-worktrees/SKILL.archive.md +28 -0
  100. package/skills/cm-conductor-worktrees/SKILL.md +17 -19
  101. package/skills/cm-continuity/SKILL.md +9 -0
  102. package/skills/cm-dashboard/SKILL.archive.md +15 -0
  103. package/skills/cm-dashboard/SKILL.md +20 -9
  104. package/skills/cm-dashboard/ui/app.js +9 -1
  105. package/skills/cm-debugging/SKILL.md +9 -0
  106. package/skills/cm-design-studio/SKILL.archive.md +34 -0
  107. package/skills/cm-design-studio/SKILL.md +17 -25
  108. package/skills/cm-design-system/SKILL.md +1 -0
  109. package/skills/cm-engineering-meta/SKILL.archive.md +73 -0
  110. package/skills/cm-engineering-meta/SKILL.md +16 -63
  111. package/skills/cm-execution/SKILL.md +98 -0
  112. package/skills/cm-git-worktrees/SKILL.archive.md +157 -0
  113. package/skills/cm-git-worktrees/SKILL.md +15 -146
  114. package/skills/cm-identity-guard/SKILL.md +8 -0
  115. package/skills/cm-planning/SKILL.md +63 -92
  116. package/skills/cm-post-deploy-canary/SKILL.archive.md +22 -0
  117. package/skills/cm-post-deploy-canary/SKILL.md +17 -13
  118. package/skills/cm-qa-visual-cli/SKILL.archive.md +22 -0
  119. package/skills/cm-qa-visual-cli/SKILL.md +16 -12
  120. package/skills/cm-quality-gate/SKILL.md +38 -0
  121. package/skills/cm-safe-deploy/SKILL.md +9 -0
  122. package/skills/cm-second-opinion-cli/SKILL.archive.md +23 -0
  123. package/skills/cm-second-opinion-cli/SKILL.md +17 -14
  124. package/skills/cm-secret-shield/SKILL.archive.md +580 -0
  125. package/skills/cm-secret-shield/SKILL.md +15 -569
  126. package/skills/cm-security-gate/SKILL.archive.md +239 -0
  127. package/skills/cm-security-gate/SKILL.md +15 -228
  128. package/skills/cm-skill-health/SKILL.archive.md +83 -0
  129. package/skills/cm-skill-health/SKILL.md +16 -73
  130. package/skills/cm-skill-index/SKILL.md +8 -0
  131. package/skills/cm-skill-mastery/SKILL.archive.md +156 -0
  132. package/skills/cm-skill-mastery/SKILL.md +16 -146
  133. package/skills/cm-skill-search/SKILL.archive.md +49 -0
  134. package/skills/cm-skill-search/SKILL.md +17 -40
  135. package/skills/cm-skill-share/SKILL.archive.md +58 -0
  136. package/skills/cm-skill-share/SKILL.md +17 -49
  137. package/skills/cm-sprint-bus/SKILL.md +9 -0
  138. package/skills/cm-start/SKILL.md +17 -0
  139. package/skills/cm-tdd/SKILL.md +19 -0
  140. package/skills/cm-terminal/SKILL.md +15 -0
  141. package/skills/cm-test-gate/SKILL.archive.md +245 -0
  142. package/skills/cm-test-gate/SKILL.md +15 -234
  143. package/skills/cm-ui-preview/SKILL.archive.md +153 -0
  144. package/skills/cm-ui-preview/SKILL.md +16 -143
  145. package/skills/cm-ux-master/cli/uxmaster/commands/mcp.py +1 -1
  146. package/skills/cm-ux-master/mcp/mcp-config.json +1 -1
  147. package/skills/cm-ux-master/mcp/server.py +2 -2
  148. package/skills/profiles/design.txt +1 -1
  149. package/skills/profiles/full.txt +0 -10
  150. package/skills/profiles/growth.txt +8 -8
  151. package/skills/profiles/knowledge.txt +1 -1
  152. package/skills/profiles/top35.json +41 -0
  153. package/adapters/antigravity.js +0 -15
  154. package/adapters/claude-code.js +0 -17
  155. package/adapters/cursor.js +0 -16
  156. package/skills/cm-ads-tracker/SKILL.md +0 -401
  157. package/skills/cm-ads-tracker/evals/evals.json +0 -55
  158. package/skills/cm-ads-tracker/references/gtm-architecture.md +0 -321
  159. package/skills/cm-ads-tracker/references/industry-events.md +0 -294
  160. package/skills/cm-ads-tracker/references/platforms-api.md +0 -238
  161. package/skills/cm-ads-tracker/templates/capi-payload.md +0 -79
  162. package/skills/cm-ads-tracker/templates/datalayer-push.js +0 -104
  163. package/skills/cm-ads-tracker/templates/gtm-variables.js +0 -56
  164. package/skills/cm-auto-publisher/SKILL.md +0 -81
  165. package/skills/cm-booking-calendar/SKILL.md +0 -521
  166. package/skills/cm-booking-calendar/references/industry-patterns.md +0 -527
  167. package/skills/cm-booking-calendar/templates/booking-form.css +0 -626
  168. package/skills/cm-booking-calendar/templates/booking-form.html +0 -477
  169. package/skills/cm-booking-calendar/templates/calendar-engine.js +0 -419
  170. package/skills/cm-booking-calendar/templates/calendar-export.js +0 -395
  171. package/skills/cm-booking-calendar/templates/reminder-config.js +0 -629
  172. package/skills/cm-content-factory/.content-factory-state.json +0 -132
  173. package/skills/cm-content-factory/.git 2/logs/refs/heads/main +0 -1
  174. package/skills/cm-content-factory/.git 2/logs/refs/remotes/origin/main +0 -1
  175. package/skills/cm-content-factory/.git 2/objects/02/fb0956734b5f8ba3f918b7defd04a89cfe0076 +0 -0
  176. package/skills/cm-content-factory/.git 2/objects/08/1e129d75dc6feac6c02037272e6bd1a04e3324 +0 -0
  177. package/skills/cm-content-factory/.git 2/objects/0c/5393416f3c5e01c9a655a802bff0dd52f76f0a +0 -0
  178. package/skills/cm-content-factory/.git 2/objects/10/0b9be46978a946a77188f68be725098a122001 +0 -0
  179. package/skills/cm-content-factory/.git 2/objects/10/cf041167fc9843610eb3d90259ef3396315fdc +0 -0
  180. package/skills/cm-content-factory/.git 2/objects/12/5e19538dd6e1338ffe74f6c4c165b00435bf48 +0 -0
  181. package/skills/cm-content-factory/.git 2/objects/16/a9b9d0088d5c1347628b45a2620b479d8ad57c +0 -0
  182. package/skills/cm-content-factory/.git 2/objects/17/8c2a9ef93c33ae4eec9d58e82321f9229843a1 +0 -0
  183. package/skills/cm-content-factory/.git 2/objects/25/397ae41d09104d763bdcac2695209d85cdea89 +0 -0
  184. package/skills/cm-content-factory/.git 2/objects/2f/a836b7947f2d458e1f639788bf4bb0983a3305 +0 -0
  185. package/skills/cm-content-factory/.git 2/objects/3a/baaaf0a1c0909c0828335791557125fba911e0 +0 -0
  186. package/skills/cm-content-factory/.git 2/objects/42/2924221b81f5ce3c4e4daac9a64a24f9b01f9a +0 -0
  187. package/skills/cm-content-factory/.git 2/objects/42/ec0ce707447dc11446a34c9995fb8533801731 +0 -0
  188. package/skills/cm-content-factory/.git 2/objects/46/e43ce92866d56ce74b1d750db307cfe6154a15 +0 -0
  189. package/skills/cm-content-factory/.git 2/objects/48/5e41b633c63f55b8277bcc59f44f67681f671a +0 -0
  190. package/skills/cm-content-factory/.git 2/objects/49/49c596a3a89fa240642acd95dd3258e261eb09 +0 -0
  191. package/skills/cm-content-factory/.git 2/objects/50/9d42d8412ef8eaf7f7e138476bac2e4d10ce60 +0 -0
  192. package/skills/cm-content-factory/.git 2/objects/55/0c8c389d981b463ef849aeb792d8be3ccb6ec8 +0 -0
  193. package/skills/cm-content-factory/.git 2/objects/5d/82d3b18410cdda3ace3677436f0cb599dbe2d2 +0 -0
  194. package/skills/cm-content-factory/.git 2/objects/60/0617c58e871a38b33bf29e282d132bb3c381ad +0 -0
  195. package/skills/cm-content-factory/.git 2/objects/6a/8369a99c687b7245c92ffaf0e0f0dab9014504 +0 -0
  196. package/skills/cm-content-factory/.git 2/objects/79/bea435d40ab531c1aaf6be0432c6a5b7aaed21 +0 -0
  197. package/skills/cm-content-factory/.git 2/objects/7e/5ebd79251c2f14e4aceb86c74b6b6daae6b500 +0 -0
  198. package/skills/cm-content-factory/.git 2/objects/81/98a822a60178d6d5023ddb3e222cddf048742e +0 -0
  199. package/skills/cm-content-factory/.git 2/objects/86/0a0e1943dfe53411d2e499a1f16f46a96ef758 +0 -0
  200. package/skills/cm-content-factory/.git 2/objects/86/971fb55fdc081fdbae52376f0f13e57a4e9b04 +0 -0
  201. package/skills/cm-content-factory/.git 2/objects/88/b89dd609a0a03f8d4fe8bfde20d5b8fc1d326d +0 -0
  202. package/skills/cm-content-factory/.git 2/objects/90/8737edb6b7809e32cc01590b4e08ba42a9d40d +0 -0
  203. package/skills/cm-content-factory/.git 2/objects/93/d5a8a9a7d4fb7f11491cb596a6880528725118 +0 -0
  204. package/skills/cm-content-factory/.git 2/objects/98/46a2ab81d0c3b3eb00ef88fc56989aa7e9f316 +0 -0
  205. package/skills/cm-content-factory/.git 2/objects/9b/d8dd1e49cf274eaf9c555f3ab39dce7af5715e +0 -0
  206. package/skills/cm-content-factory/.git 2/objects/a1/13329fb0cec96ae78b222d33a24c3b5bc7fa1f +0 -0
  207. package/skills/cm-content-factory/.git 2/objects/a9/e6effe626e8a3aea3a8fc3364b492191c6e7d0 +0 -0
  208. package/skills/cm-content-factory/.git 2/objects/ad/6de7e48d9782cca9353d1ff0aa1aab7fe1df85 +0 -0
  209. package/skills/cm-content-factory/.git 2/objects/af/54ae316f771ff692e299ffcd8bf2f06b413b59 +0 -0
  210. package/skills/cm-content-factory/.git 2/objects/b0/4cb8b0b00dad633e731c1472161419e738d674 +0 -0
  211. package/skills/cm-content-factory/.git 2/objects/b3/094abb0b9ed46419b269e4a4e36a459690e3b0 +0 -0
  212. package/skills/cm-content-factory/.git 2/objects/b9/435c5d4baac2cfc5c83009ddd27b46b60db5f1 +0 -0
  213. package/skills/cm-content-factory/.git 2/objects/ba/5da17dbaec5ec2dcfdfd126aead518d1171d5c +0 -0
  214. package/skills/cm-content-factory/.git 2/objects/c0/bf58703aa258ba5dd63083bebaec8f223d844c +0 -0
  215. package/skills/cm-content-factory/.git 2/objects/c4/701a34edf1fc1bad58ccc57bd03f9426acb59a +0 -0
  216. package/skills/cm-content-factory/.git 2/objects/c7/5ccce9a4e5cc74d9b3174550cf6d993ca43638 +0 -0
  217. package/skills/cm-content-factory/.git 2/objects/c7/710d59b5a35b0f1f0a0399386643a0bd94c929 +0 -0
  218. package/skills/cm-content-factory/.git 2/objects/d1/fe58237112e953e5fec52da22cf38e08be3df9 +0 -5
  219. package/skills/cm-content-factory/.git 2/objects/d2/2bbe9fd2f74c95bc5583e803f5e435f1e2cd86 +0 -0
  220. package/skills/cm-content-factory/.git 2/objects/d7/e72852ea2bff74581dbf247d400120086229f4 +0 -0
  221. package/skills/cm-content-factory/.git 2/objects/d8/d4c3b5553e4fd72807e1d4b49ef07d9ef3ac35 +0 -0
  222. package/skills/cm-content-factory/.git 2/objects/dc/75050c2876f6a02ae2a53a3c886f395b622977 +0 -0
  223. package/skills/cm-content-factory/.git 2/objects/ee/e8546f95acec500187c08a28a8b9ee02db0dec +0 -0
  224. package/skills/cm-content-factory/.git 2/objects/ef/263c059208b416c2146434f10cb2b9fabcba16 +0 -0
  225. package/skills/cm-content-factory/.git 2/objects/f3/ae597e84d9a59b88acd21c99bde2eaf686d785 +0 -0
  226. package/skills/cm-content-factory/.git 2/objects/f3/f6f5673c821d3d8e76fa267a9e882e7a5387ea +0 -0
  227. package/skills/cm-content-factory/.git 2/objects/f9/6e6d0ad02624dd11d5848594d056caef7a5e8b +0 -0
  228. package/skills/cm-content-factory/.git 2/objects/ff/278988fc1edf0db3abcf18de795f4cc0b4f3e1 +0 -0
  229. package/skills/cm-content-factory/.git 2/refs/heads/main +0 -1
  230. package/skills/cm-content-factory/.git 2/refs/remotes/origin/main +0 -1
  231. package/skills/cm-content-factory/.pytest_cache 2/v/cache/nodeids +0 -76
  232. package/skills/cm-content-factory/.pytest_cache 2/v/cache/stepwise +0 -1
  233. package/skills/cm-content-factory/AGENTS.md +0 -61
  234. package/skills/cm-content-factory/CLAUDE.md +0 -63
  235. package/skills/cm-content-factory/CURSOR.md +0 -43
  236. package/skills/cm-content-factory/Content Factory.zip +0 -0
  237. package/skills/cm-content-factory/SKILL.md +0 -416
  238. package/skills/cm-content-factory/cf +0 -313
  239. package/skills/cm-content-factory/config.schema.json +0 -397
  240. package/skills/cm-content-factory/dashboard/app.js +0 -556
  241. package/skills/cm-content-factory/dashboard/index.html +0 -397
  242. package/skills/cm-content-factory/dashboard/style.css +0 -1211
  243. package/skills/cm-content-factory/examples/01-real-estate.config.json +0 -146
  244. package/skills/cm-content-factory/examples/02-personal-finance.config.json +0 -146
  245. package/skills/cm-content-factory/examples/03-health-wellness.config.json +0 -147
  246. package/skills/cm-content-factory/examples/04-saas-software.config.json +0 -147
  247. package/skills/cm-content-factory/examples/05-legal-services.config.json +0 -147
  248. package/skills/cm-content-factory/examples/06-insurance.config.json +0 -146
  249. package/skills/cm-content-factory/examples/07-ecommerce-dropship.config.json +0 -146
  250. package/skills/cm-content-factory/examples/08-online-education.config.json +0 -147
  251. package/skills/cm-content-factory/examples/09-crypto-defi.config.json +0 -147
  252. package/skills/cm-content-factory/examples/10-beauty-skincare.config.json +0 -147
  253. package/skills/cm-content-factory/examples/11-home-services.config.json +0 -146
  254. package/skills/cm-content-factory/examples/12-dental-clinic.config.json +0 -147
  255. package/skills/cm-content-factory/examples/13-pet-care.config.json +0 -147
  256. package/skills/cm-content-factory/examples/14-travel-hospitality.config.json +0 -147
  257. package/skills/cm-content-factory/examples/15-ai-automation.config.json +0 -147
  258. package/skills/cm-content-factory/examples/16-wedding-events.config.json +0 -147
  259. package/skills/cm-content-factory/examples/17-fitness-coaching.config.json +0 -148
  260. package/skills/cm-content-factory/examples/18-cybersecurity.config.json +0 -147
  261. package/skills/cm-content-factory/examples/19-food-restaurant.config.json +0 -148
  262. package/skills/cm-content-factory/examples/20-solar-energy.config.json +0 -147
  263. package/skills/cm-content-factory/examples/fitness-blog.config.json +0 -116
  264. package/skills/cm-content-factory/examples/tech-blog.config.json +0 -107
  265. package/skills/cm-content-factory/extensions/EXTENSION_GUIDE.md +0 -72
  266. package/skills/cm-content-factory/extensions/hooks.py +0 -126
  267. package/skills/cm-content-factory/extensions/openclaw_adapter.py +0 -132
  268. package/skills/cm-content-factory/landing/docs/content/changelog.md +0 -36
  269. package/skills/cm-content-factory/landing/docs/content/deployment.md +0 -46
  270. package/skills/cm-content-factory/landing/docs/content/execution-flow.md +0 -67
  271. package/skills/cm-content-factory/landing/docs/content/memory-system.md +0 -38
  272. package/skills/cm-content-factory/landing/docs/content/openspace.md +0 -27
  273. package/skills/cm-content-factory/landing/docs/content/use-cases.md +0 -26
  274. package/skills/cm-content-factory/landing/docs/content/v5-intro.md +0 -28
  275. package/skills/cm-content-factory/landing/docs/index.html +0 -240
  276. package/skills/cm-content-factory/landing/index.html +0 -680
  277. package/skills/cm-content-factory/landing/script.js +0 -143
  278. package/skills/cm-content-factory/landing/style.css +0 -1216
  279. package/skills/cm-content-factory/landing/translations.js +0 -508
  280. package/skills/cm-content-factory/logs/events.jsonl +0 -11
  281. package/skills/cm-content-factory/profiles/_template.profile.json +0 -231
  282. package/skills/cm-content-factory/profiles/finance.profile.json +0 -278
  283. package/skills/cm-content-factory/profiles/legal.profile.json +0 -263
  284. package/skills/cm-content-factory/profiles/medical-research.profile.json +0 -321
  285. package/skills/cm-content-factory/profiles/technology.profile.json +0 -275
  286. package/skills/cm-content-factory/scripts/agent_dispatcher.py +0 -266
  287. package/skills/cm-content-factory/scripts/audit.py +0 -106
  288. package/skills/cm-content-factory/scripts/dashboard_server.py +0 -225
  289. package/skills/cm-content-factory/scripts/deploy.py +0 -146
  290. package/skills/cm-content-factory/scripts/extract.py +0 -132
  291. package/skills/cm-content-factory/scripts/landing_generator.py +0 -459
  292. package/skills/cm-content-factory/scripts/memory.py +0 -521
  293. package/skills/cm-content-factory/scripts/monetize.py +0 -239
  294. package/skills/cm-content-factory/scripts/pipeline.py +0 -357
  295. package/skills/cm-content-factory/scripts/plan.py +0 -163
  296. package/skills/cm-content-factory/scripts/publish.py +0 -145
  297. package/skills/cm-content-factory/scripts/research.py +0 -337
  298. package/skills/cm-content-factory/scripts/scaffold.py +0 -464
  299. package/skills/cm-content-factory/scripts/scoreboard.py +0 -336
  300. package/skills/cm-content-factory/scripts/seo.py +0 -90
  301. package/skills/cm-content-factory/scripts/state_manager.py +0 -320
  302. package/skills/cm-content-factory/scripts/token_manager.py +0 -268
  303. package/skills/cm-content-factory/scripts/validate.py +0 -221
  304. package/skills/cm-content-factory/scripts/wizard.py +0 -329
  305. package/skills/cm-content-factory/scripts/write.py +0 -93
  306. package/skills/cm-content-factory/sites/docs-site/src/assets/houston.webp +0 -0
  307. package/skills/cm-content-factory/sites/docs-site/src/content/docs/architecture.md +0 -90
  308. package/skills/cm-content-factory/sites/docs-site/src/content/docs/data-flow.md +0 -54
  309. package/skills/cm-content-factory/sites/docs-site/src/content/docs/deployment.md +0 -38
  310. package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/index.md +0 -65
  311. package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/lc-content-lifecycle.md +0 -48
  312. package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/seq-write-mode.md +0 -39
  313. package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/uj-first-batch.md +0 -42
  314. package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/wf-content-pipeline.md +0 -51
  315. package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/wf-learning-cycle.md +0 -52
  316. package/skills/cm-content-factory/sites/docs-site/src/content/docs/getting-started/configuration.md +0 -86
  317. package/skills/cm-content-factory/sites/docs-site/src/content/docs/getting-started/installation.md +0 -80
  318. package/skills/cm-content-factory/sites/docs-site/src/content/docs/getting-started/intro.md +0 -58
  319. package/skills/cm-content-factory/sites/docs-site/src/content/docs/index.md +0 -102
  320. package/skills/cm-content-factory/sites/docs-site/src/content/docs/jtbd/index.md +0 -45
  321. package/skills/cm-content-factory/sites/docs-site/src/content/docs/jtbd/optimize-seo.md +0 -29
  322. package/skills/cm-content-factory/sites/docs-site/src/content/docs/jtbd/scale-content-production.md +0 -55
  323. package/skills/cm-content-factory/sites/docs-site/src/content/docs/jtbd/standardize-quality.md +0 -29
  324. package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/buyer-cmo-huong.md +0 -41
  325. package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/buyer-content-lead-khoa.md +0 -40
  326. package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/index.md +0 -56
  327. package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/user-content-manager-lan.md +0 -46
  328. package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/user-seo-minh.md +0 -45
  329. package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/user-writer-tu.md +0 -45
  330. package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/content-pipeline.md +0 -108
  331. package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/index.md +0 -22
  332. package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/memory-system.md +0 -52
  333. package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/seo-optimization.md +0 -58
  334. package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/troubleshooting-guide.md +0 -92
  335. package/skills/cm-content-factory/sites/docs-site/src/styles/custom.css +0 -575
  336. package/skills/cm-content-factory/tests/conftest.py +0 -66
  337. package/skills/cm-content-factory/tests/test_agent_dispatcher.py +0 -125
  338. package/skills/cm-content-factory/tests/test_memory.py +0 -128
  339. package/skills/cm-content-factory/tests/test_pipeline.py +0 -107
  340. package/skills/cm-content-factory/tests/test_research.py +0 -56
  341. package/skills/cm-content-factory/tests/test_state_manager.py +0 -131
  342. package/skills/cm-content-factory/tests/test_token_manager.py +0 -110
  343. package/skills/cm-content-factory/tests/test_wizard.py +0 -121
  344. package/skills/cm-cro-methodology/SKILL.md +0 -290
  345. package/skills/cm-cro-methodology/references/COPYWRITING.md +0 -178
  346. package/skills/cm-cro-methodology/references/OBJECTIONS.md +0 -135
  347. package/skills/cm-cro-methodology/references/PERSUASION.md +0 -158
  348. package/skills/cm-cro-methodology/references/RESEARCH.md +0 -220
  349. package/skills/cm-cro-methodology/references/funnel-analysis.md +0 -365
  350. package/skills/cm-cro-methodology/references/testing-methodology.md +0 -330
  351. package/skills/cm-google-form/SKILL.md +0 -266
  352. package/skills/cm-google-form/templates/apps-script.js +0 -55
  353. package/skills/cm-google-form/templates/form-markup.html +0 -110
  354. package/skills/cm-google-form/templates/form-submit.js +0 -201
  355. package/skills/cm-google-form/templates/toast.css +0 -152
  356. package/skills/cm-growth-hacking/SKILL.md +0 -282
  357. package/skills/cm-growth-hacking/bottom-sheet-engine.md +0 -261
  358. package/skills/cm-growth-hacking/calendar-integration.md +0 -264
  359. package/skills/cm-growth-hacking/references/engagement-patterns.md +0 -346
  360. package/skills/cm-growth-hacking/templates/bottom-sheet.css +0 -528
  361. package/skills/cm-growth-hacking/templates/bottom-sheet.js +0 -269
  362. package/skills/cm-growth-hacking/templates/calendar-cta.js +0 -213
  363. package/skills/cm-growth-hacking/templates/tracking-events.js +0 -211
  364. package/skills/cm-growth-hacking/templates/trigger-manager.js +0 -254
  365. package/skills/cm-growth-hacking/tracking-events.md +0 -246
  366. package/skills/cm-growth-hacking/trigger-system.md +0 -342
  367. package/skills/cm-jtbd/SKILL.md +0 -98
  368. package/skills/cm-notebooklm/SKILL.md +0 -156
  369. package/skills/cm-notebooklm/references/command_reference.md +0 -94
  370. package/skills/cm-notebooklm/references/workflows.md +0 -60
  371. package/skills/cm-notebooklm/resources/knowledge_sources.md +0 -106
  372. package/skills/cm-notebooklm/scripts/brain-sync.sh +0 -453
  373. package/skills/cm-notebooklm/scripts/graduate_wisdom.py +0 -101
  374. package/skills/cm-readit/SKILL.md +0 -289
  375. package/skills/cm-readit/audio-player.md +0 -206
  376. package/skills/cm-readit/examples/blog-reader.js +0 -352
  377. package/skills/cm-readit/examples/voice-cro.js +0 -390
  378. package/skills/cm-readit/tts-engine.md +0 -262
  379. package/skills/cm-readit/ui-patterns.md +0 -362
  380. package/skills/cm-readit/voice-cro.md +0 -223
@@ -1,238 +0,0 @@
1
- # Platform Server-Side APIs Reference
2
-
3
- ## Why Server-Side APIs Matter
4
-
5
- Browser-side pixels face increasing signal loss due to:
6
- - Ad blockers (15-40% of users block tracking scripts)
7
- - iOS 14+ and browser privacy restrictions (Safari ITP, Firefox ETP)
8
- - Cookie deprecation timeline
9
-
10
- Server-side APIs (CAPI, Events API) send events directly from your server to the platform — bypassing browser restrictions entirely. Combined with browser pixels and deduplication via event_id, this gives you the best possible signal quality.
11
-
12
- Typical uplift from adding server-side APIs:
13
- - Meta CAPI: +10-20% more matched conversions
14
- - TikTok Events API: +8-15% uplift
15
- - Google Enhanced Conversions: +15-25% conversion recovery
16
-
17
- ---
18
-
19
- ## 1. Meta Conversions API (CAPI)
20
-
21
- ### Setup Methods (choose one)
22
-
23
- **Option A: Via Server-Side GTM (recommended for non-developers)**
24
- - Set up GTM Server-Side container (hosted on Google Cloud or Stape.io)
25
- - Route website events through server GTM → server GTM sends to Meta CAPI
26
- - No backend code changes needed
27
-
28
- **Option B: Direct API Integration (for developers)**
29
- - Endpoint: https://graph.facebook.com/v18.0/{pixel_id}/events
30
- - Authentication: System User Access Token from Meta Business Manager
31
- - Server sends HTTP POST for each conversion event
32
-
33
- ### Required Fields for Every CAPI Event
34
-
35
- ```
36
- {
37
- "data": [{
38
- "event_name": "Purchase", // Standard Meta event name
39
- "event_time": 1703123456, // Unix timestamp (server time)
40
- "event_id": "uuid-generated-at-conversion", // CRITICAL for dedup
41
- "action_source": "website", // Required
42
- "event_source_url": "https://yoursite.com/thank-you",
43
- "user_data": {
44
- "em": ["sha256_of_lowercase_email"], // Hashed email
45
- "ph": ["sha256_of_digitsonly_phone"], // Hashed phone
46
- "client_ip_address": "123.456.789.0", // Server-detected IP
47
- "client_user_agent": "Mozilla/5.0...", // From request headers
48
- "fbp": "_fb.1.1234567890.abcdefg", // _fbp cookie value
49
- "fbc": "fb.1.1234567890.AbCdEfGhIj" // _fbc cookie value (from fbclid)
50
- },
51
- "custom_data": {
52
- "value": 500000,
53
- "currency": "VND",
54
- "content_ids": ["PROD-123"],
55
- "content_type": "product",
56
- "contents": [{"id": "PROD-123", "quantity": 1, "item_price": 500000}],
57
- "num_items": 1,
58
- "order_id": "ORDER-20240101-001"
59
- }
60
- }],
61
- "access_token": "EAAxxxxxxxxxxxx"
62
- }
63
- ```
64
-
65
- ### Deduplication Logic
66
-
67
- When your browser pixel AND CAPI both fire for the same conversion:
68
- - Both include identical `event_id` value
69
- - Meta's system receives both events within 48-hour window
70
- - Meta matches them by event_id and counts as ONE conversion
71
- - You see "Matched events" count in Events Manager
72
-
73
- The `event_id` MUST be:
74
- - Generated ONCE per conversion (not per request)
75
- - Identical in both browser dataLayer.push() and CAPI payload
76
- - Unique across all conversions (use UUID v4)
77
-
78
- ### How to Get CAPI Access Token
79
-
80
- 1. Go to Meta Business Manager → Events Manager
81
- 2. Select your Pixel → Settings
82
- 3. Scroll to "Conversions API"
83
- 4. Click "Generate Access Token" (or use System User token from Business Settings)
84
- 5. Copy token — treat it as a secret (never expose in browser-side code)
85
-
86
- ### Testing CAPI Events
87
-
88
- Use Meta's Test Events tool in Events Manager → Test Events tab.
89
- Set test_event_code in payload during development:
90
- Add "test_event_code": "TEST12345" to the payload root (not inside data array).
91
-
92
- ---
93
-
94
- ## 2. TikTok Events API
95
-
96
- ### Setup Methods
97
-
98
- **Option A: Via Server-Side GTM with TikTok template**
99
- - Use community TikTok Events API GTM server-side template
100
- - Route events through server GTM
101
-
102
- **Option B: Direct API Integration**
103
- - Endpoint: https://business-api.tiktok.com/open_api/v1.3/event/track/
104
- - Authentication: Access Token from TikTok Events Manager
105
-
106
- ### Required Fields for Every Events API Event
107
-
108
- ```
109
- {
110
- "pixel_code": "CXXXXXXXXXX",
111
- "event": "CompletePayment", // TikTok standard event name
112
- "event_id": "uuid-generated-at-conversion", // For dedup with pixel
113
- "timestamp": "2024-01-15T10:30:00+07:00",
114
- "context": {
115
- "page": {
116
- "url": "https://yoursite.com/thank-you",
117
- "referrer": "https://yoursite.com/checkout"
118
- },
119
- "user": {
120
- "email": "sha256_of_lowercase_email",
121
- "phone_number": "sha256_of_digits_only_phone"
122
- },
123
- "ip": "123.456.789.0",
124
- "user_agent": "Mozilla/5.0..."
125
- },
126
- "properties": {
127
- "value": 500000,
128
- "currency": "VND",
129
- "content_ids": ["PROD-123"],
130
- "content_type": "product",
131
- "contents": [
132
- {
133
- "content_id": "PROD-123",
134
- "content_name": "Product Name",
135
- "content_type": "product",
136
- "quantity": 1,
137
- "price": 500000
138
- }
139
- ]
140
- }
141
- }
142
- ```
143
-
144
- Authentication header: "Access-Token: [your access token]"
145
- Content-Type: application/json
146
-
147
- ### Getting TikTok Events API Access Token
148
-
149
- 1. TikTok Ads Manager → Assets → Events
150
- 2. Select your Pixel → Set Up Web Events → Events API
151
- 3. Generate Access Token
152
- 4. Store securely server-side
153
-
154
- ### TikTok Deduplication
155
-
156
- Works identically to Meta: same event_id sent from both pixel and Events API.
157
- TikTok matches within 48-hour window.
158
-
159
- ---
160
-
161
- ## 3. Google Enhanced Conversions
162
-
163
- ### How It Works
164
-
165
- Unlike Meta CAPI and TikTok Events API (which are standalone APIs), Google Enhanced Conversions supplements your existing Google Ads conversion tag with hashed user data.
166
-
167
- The existing GTM Google Ads tag is enhanced with a user_data object containing:
168
- - email_address (raw — Google hashes it)
169
- - phone_number (raw — with country code prefix e.g. "+84912345678")
170
- - address.first_name, address.last_name, address.country, address.postal_code
171
-
172
- IMPORTANT: Google hashes the data itself (unlike Meta/TikTok where you pre-hash).
173
- Do NOT SHA256 hash for Enhanced Conversions — pass raw data.
174
-
175
- ### Setup in GTM
176
-
177
- In your existing Google Ads Conversion Tracking tag:
178
- 1. Scroll to "Enhanced conversions"
179
- 2. Enable "Include user-provided data from your website"
180
- 3. Under "User-provided data variable", create a new variable:
181
- - Type: User-Provided Data
182
- - Enter email variable: [DataLayer variable for email]
183
- - Enter phone variable: [DataLayer variable for phone]
184
-
185
- The DataLayer push should include raw (unhashed) email and phone:
186
- email: "customer@email.com"
187
- phone: "+84912345678"
188
-
189
- Or if privacy is a concern: pre-hash with SHA256 and mark as "sha256_email_address" in the enhanced conversions config.
190
-
191
- ### Google Tag API (Server-Side Enhanced Conversions)
192
-
193
- For server-side Enhanced Conversions via the Google Ads API:
194
- - Use the Google Ads API ConversionUploadService
195
- - Send click conversion with hashed user identifiers
196
- - Match window: same as your conversion window setting
197
-
198
- ---
199
-
200
- ## 4. Attribution Accuracy Benchmark
201
-
202
- After implementing pixel + server-side API for all platforms, expect:
203
-
204
- | Scenario | Pixel Only | Pixel + CAPI/Events API |
205
- |---|---|---|
206
- | iOS 14+ users | 30-50% signal loss | Full signal recovery |
207
- | Ad blocker users | 0% tracking | 80-90% recovery |
208
- | Overall conversion match rate | 60-70% | 85-95% |
209
- | ROAS accuracy | Understated by 20-40% | Near-accurate |
210
-
211
- ### Validating Server-Side Setup
212
-
213
- **Meta:** Events Manager → Pixel → Overview → Check "Event match quality" score
214
- - Score 6-7: Good
215
- - Score 8+: Excellent
216
- - Below 5: Missing user_data fields (em, ph, fbp, fbc)
217
-
218
- **TikTok:** Ads Manager → Assets → Events → Pixel → Data Details
219
- - Check "Match rate" percentage
220
- - Target: 60%+ match rate
221
-
222
- **Google:** Google Ads → Conversions → View column "Enhanced conv." count
223
- - Compare with standard conversion count
224
- - Uplift of 15-25% is typical and expected
225
-
226
- ---
227
-
228
- ## 5. Priority Implementation Order
229
-
230
- If budget/time is limited, implement in this order:
231
-
232
- 1. Browser pixels via GTM (Phase B) — covers 60-70% of users
233
- 2. First-touch cookie + UTM tracking — attribution clarity
234
- 3. Meta CAPI — highest ROI platform, biggest uplift from server-side
235
- 4. Google Enhanced Conversions — easy to add, 15-25% uplift
236
- 5. TikTok Events API — add once other platforms are stable
237
-
238
- Never implement CAPI without also keeping the browser pixel — you need both for deduplication to work. If you only have CAPI, you lose browser-generated signals like fbp cookie.
@@ -1,79 +0,0 @@
1
- # Facebook/Meta CAPI Server-Side Template
2
-
3
- ## Required Payload Fields
4
-
5
- ```json
6
- {
7
- "data": [{
8
- "event_name": "Purchase",
9
- "event_time": 1700000000,
10
- "event_id": "uuid-same-as-pixel-event-id",
11
- "action_source": "website",
12
- "event_source_url": "https://example.com/thank-you",
13
- "user_data": {
14
- "em": ["sha256_hashed_email"],
15
- "ph": ["sha256_hashed_phone_digits_only"],
16
- "client_ip_address": "1.2.3.4",
17
- "client_user_agent": "Mozilla/5.0...",
18
- "fbp": "_fbp cookie value",
19
- "fbc": "fb.1.timestamp.fbclid_value"
20
- },
21
- "custom_data": {
22
- "value": 299000,
23
- "currency": "VND",
24
- "order_id": "ORD-12345",
25
- "content_ids": ["prod_001", "prod_002"],
26
- "content_type": "product",
27
- "num_items": 2
28
- }
29
- }]
30
- }
31
- ```
32
-
33
- ## API Endpoint
34
-
35
- ```
36
- POST https://graph.facebook.com/v21.0/{PIXEL_ID}/events?access_token={CAPI_ACCESS_TOKEN}
37
- ```
38
-
39
- ## Deduplication
40
-
41
- Both browser Pixel and CAPI send the SAME `event_id`. Meta matches within 48h and counts once.
42
-
43
- ## Enhanced Matching Priority (hash with SHA256)
44
-
45
- 1. `em` — email (lowercase, trim whitespace)
46
- 2. `ph` — phone (digits only, include country code)
47
- 3. `fn` — first name (lowercase)
48
- 4. `ln` — last name (lowercase)
49
- 5. `fbp` — Facebook browser cookie
50
- 6. `fbc` — Facebook click ID cookie
51
-
52
- ## TikTok Events API Equivalent
53
-
54
- ```
55
- POST https://business-api.tiktok.com/open_api/v1.3/event/track/
56
- Headers: Access-Token: {TIKTOK_ACCESS_TOKEN}
57
- ```
58
-
59
- ```json
60
- {
61
- "pixel_code": "TIKTOK_PIXEL_ID",
62
- "event": "CompletePayment",
63
- "event_id": "same-uuid-as-pixel",
64
- "timestamp": "2025-01-15T10:30:00+07:00",
65
- "context": {
66
- "user_agent": "Mozilla/5.0...",
67
- "ip": "1.2.3.4"
68
- },
69
- "properties": {
70
- "value": 299000,
71
- "currency": "VND",
72
- "content_id": "prod_001",
73
- "content_type": "product",
74
- "contents": [
75
- {"content_id": "prod_001", "content_name": "Product A", "quantity": 1, "price": 299000}
76
- ]
77
- }
78
- }
79
- ```
@@ -1,104 +0,0 @@
1
- // DataLayer Push Templates — CM Ads Tracker v2
2
- // Copy and customize these for your project.
3
- // Developer writes ONE push per event. GTM does the rest.
4
-
5
- // ═══════════════════════════════════════════
6
- // PURCHASE (E-commerce, Courses, SaaS)
7
- // ═══════════════════════════════════════════
8
- dataLayer.push({
9
- event: 'cro_purchase',
10
- event_id: '[UUID generated server-side — same value sent to CAPI]',
11
- transaction_id: '[order_id]',
12
- value: 0, // numeric order total — NOT string
13
- currency: 'VND', // ISO 4217 code
14
- content_type: 'product',
15
- content_ids: ['product_id_1', 'product_id_2'],
16
- contents: [
17
- { content_id: 'id', content_name: 'name', content_type: 'product', quantity: 1, price: 0 }
18
- ],
19
- num_items: 1,
20
- email_hashed: '[SHA256(lowercase(email))]',
21
- phone_hashed: '[SHA256(digits-only phone)]'
22
- });
23
-
24
- // ═══════════════════════════════════════════
25
- // LEAD / FORM SUBMIT (Lead Gen, B2B, Education)
26
- // ═══════════════════════════════════════════
27
- dataLayer.push({
28
- event: 'cro_lead',
29
- event_id: '[UUID]',
30
- lead_id: '[unique lead identifier]',
31
- content_name: '[form_name or page_name]',
32
- value: 0, // lead_value_if_known — optional
33
- currency: 'VND',
34
- email_hashed: '[SHA256(lowercase(email))]',
35
- phone_hashed: '[SHA256(digits-only phone)]'
36
- });
37
-
38
- // ═══════════════════════════════════════════
39
- // VIEW CONTENT (Product/Service page)
40
- // ═══════════════════════════════════════════
41
- dataLayer.push({
42
- event: 'cro_view_content',
43
- event_id: '[UUID]',
44
- content_ids: ['product_id'],
45
- content_type: 'product',
46
- content_name: '[Product Name]',
47
- value: 0,
48
- currency: 'VND'
49
- });
50
-
51
- // ═══════════════════════════════════════════
52
- // ADD TO CART
53
- // ═══════════════════════════════════════════
54
- dataLayer.push({
55
- event: 'cro_add_to_cart',
56
- event_id: '[UUID]',
57
- content_ids: ['product_id'],
58
- content_type: 'product',
59
- content_name: '[Product Name]',
60
- value: 0,
61
- currency: 'VND',
62
- quantity: 1
63
- });
64
-
65
- // ═══════════════════════════════════════════
66
- // INITIATE CHECKOUT
67
- // ═══════════════════════════════════════════
68
- dataLayer.push({
69
- event: 'cro_initiate_checkout',
70
- event_id: '[UUID]',
71
- value: 0,
72
- currency: 'VND',
73
- num_items: 1,
74
- content_ids: ['product_id_1']
75
- });
76
-
77
- // ═══════════════════════════════════════════
78
- // REGISTRATION / SIGNUP
79
- // ═══════════════════════════════════════════
80
- dataLayer.push({
81
- event: 'cro_registration',
82
- event_id: '[UUID]',
83
- status: 'complete',
84
- email_hashed: '[SHA256]',
85
- phone_hashed: '[SHA256]'
86
- });
87
-
88
- // ═══════════════════════════════════════════
89
- // PHONE CALL CLICK
90
- // ═══════════════════════════════════════════
91
- dataLayer.push({
92
- event: 'cro_phone_call',
93
- event_id: '[UUID]',
94
- phone_number: '[phone number clicked]'
95
- });
96
-
97
- // ═══════════════════════════════════════════
98
- // SEARCH
99
- // ═══════════════════════════════════════════
100
- dataLayer.push({
101
- event: 'cro_search',
102
- event_id: '[UUID]',
103
- search_string: '[user search query]'
104
- });
@@ -1,56 +0,0 @@
1
- // GTM Variables — Full Configuration Reference
2
- // Create ALL of these in GTM > Variables > User-Defined Variables
3
-
4
- // ═══════ DataLayer Variables ═══════
5
- // Variable Name | Type | DataLayer Variable Name
6
- // DL - event_id | Data Layer Variable | event_id
7
- // DL - order_id | Data Layer Variable | transaction_id
8
- // DL - order_value | Data Layer Variable | value
9
- // DL - currency | Data Layer Variable | currency
10
- // DL - content_ids | Data Layer Variable | content_ids
11
- // DL - content_type | Data Layer Variable | content_type
12
- // DL - content_name | Data Layer Variable | content_name
13
- // DL - email_hashed | Data Layer Variable | email_hashed
14
- // DL - phone_hashed | Data Layer Variable | phone_hashed
15
-
16
- // ═══════ First-Touch Cookie Variables ═══════
17
- // Variable Name | Type | Cookie / Key
18
- // FTC - source | 1st-Party Cookie | Cookie: _ftc, key: src
19
- // FTC - medium | 1st-Party Cookie | Cookie: _ftc, key: med
20
- // FTC - campaign | 1st-Party Cookie | Cookie: _ftc, key: cmp
21
-
22
- // ═══════ URL Parameters ═══════
23
- // Variable Name | Type | Query Parameter
24
- // URL - utm_source | URL | utm_source
25
- // URL - utm_medium | URL | utm_medium
26
- // URL - utm_campaign | URL | utm_campaign
27
- // URL - fbclid | URL | fbclid
28
- // URL - ttclid | URL | ttclid
29
- // URL - gclid | URL | gclid
30
-
31
- // ═══════ First-Touch Cookie Capture (Custom HTML Tag) ═══════
32
- // Trigger: All Pages
33
- // Fire once: Only if _ftc cookie does NOT exist
34
- <script>
35
- (function(){
36
- if (document.cookie.indexOf('_ftc=') !== -1) return;
37
- var params = new URLSearchParams(window.location.search);
38
- var ftc = {
39
- src: params.get('utm_source') || '',
40
- med: params.get('utm_medium') || '',
41
- cmp: params.get('utm_campaign') || '',
42
- cnt: params.get('utm_content') || '',
43
- trm: params.get('utm_term') || '',
44
- fbclid: params.get('fbclid') || '',
45
- ttclid: params.get('ttclid') || '',
46
- gclid: params.get('gclid') || '',
47
- ref: document.referrer ? new URL(document.referrer).hostname : '',
48
- ts: new Date().toISOString()
49
- };
50
- var expiry = new Date();
51
- expiry.setDate(expiry.getDate() + 90);
52
- document.cookie = '_ftc=' + encodeURIComponent(JSON.stringify(ftc))
53
- + ';expires=' + expiry.toUTCString()
54
- + ';path=/;SameSite=Lax';
55
- })();
56
- </script>
@@ -1,81 +0,0 @@
1
- ---
2
- name: cm-auto-publisher
3
- description: Comprehensive publishing automation skill bridging AI agents (OpenClaw, Manus, Claude) to the Content Factory Router. Uses the Router API to publish markdown articles with rich media to any connected Astro site natively.
4
- ---
5
-
6
- # cm-auto-publisher: The Agentic Publishing Skill
7
-
8
- > **Goal:** Take unstructured input (links, ideas, raw text), write a highly engaging article following Content Factory rules, and instantly publish it via the Content Factory Router API.
9
-
10
- ## When to Use
11
-
12
- **ALWAYS when:**
13
- - User provides a link/video and says "Write an article about this and publish it".
14
- - User says "Draft and push this news to the blog".
15
- - You have finished drafting an article and need to deploy it to the live site.
16
- - An automated cron job triggers you to aggregate news and auto-publish.
17
-
18
- ## The Process
19
-
20
- ### Phase 1: Content Extraction & Structuring
21
- 1. **Analyze Input:** If given a URL, use `read_url_content` (or your browsing tool) to read the source. If given images or Youtube links, extract them.
22
- 2. **Draft Content:** Write a compelling article in standard Markdown.
23
- - Use headings (`##`, `###`).
24
- - For YouTube videos, use the Astro component: `<YouTube id="VIDEO_ID" />`.
25
- - For images, just use standard markdown: `![Alt text](image_filename.jpg)`.
26
-
27
- ### Phase 2: Media Preparation
28
- Identify all external images that need to be published with the article.
29
- DO NOT try to download them to the local disk using bash commands. The Content Factory Router will handle this.
30
- Instead, build a `media` array mapping the original URLs to the desired clean filenames.
31
-
32
- ```json
33
- "media": [
34
- {
35
- "url": "https://source.com/raw-image-123.jpg",
36
- "filename": "clean-seo-friendly-name.jpg"
37
- }
38
- ]
39
- ```
40
-
41
- ### Phase 3: API Payload Construction
42
- Construct the JSON payload matching the target site's schema.
43
- Standard Target: `cody-master` (mapped to `tody-agent/todyle-web`).
44
-
45
- ```json
46
- {
47
- "site_id": "cody-master",
48
- "title": "[Engaging Title]",
49
- "description": "[1-2 sentence SEO meta description]",
50
- "category": "news", // or "guide", "use-case"
51
- "readingTime": "5 min read",
52
- "tags": ["AI", "Vibe Coding", "Automation"],
53
- "content": "The raw markdown content here...",
54
- "media": [ ... ]
55
- }
56
- ```
57
-
58
- ### Phase 4: Publish via Router API
59
- Send the payload to the Cloudflare Worker via a standard `fetch` or `curl` command.
60
-
61
- 1. **Get the Secret:** Retrieve the API token from the `.env` file or ask the user for the `PUBLISHER_API_KEY`.
62
- 2. **Send POST Request:**
63
- Use a local script or curl to send the data to the worker.
64
-
65
- ```bash
66
- # Example curl (assuming the payload is saved to payload.json)
67
- curl -X POST https://content-factory-router.<YOUR-CLOUDFLARE-ACCOUNT>.workers.dev/publish \
68
- -H "Content-Type: application/json" \
69
- -H "Authorization: Bearer <API_KEY>" \
70
- -d @payload.json
71
- ```
72
-
73
- ### Phase 5: Verification
74
- 1. Check the response from the Worker. It should return `{"success": true, "message": "Published...", "commit_sha": "..."}`.
75
- 2. Inform the user that the article has been successfully committed to GitHub and Cloudflare Pages is now building it.
76
-
77
- ---
78
-
79
- ## Red Flags - STOP!
80
- - ❌ **DO NOT** manually create `.mdx` files in `src/content/articles/` and run `git push` if using this skill! Let the Router API handle the Git history and image blob creation to ensure data consistency.
81
- - ❌ **DO NOT** use `cat` or `echo` to build complex JSON payloads in bash. Save the payload to a `.json` file using your file writing tool, then pass it to `curl`.