codymaster 4.8.0 → 7.0.0

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 (416) hide show
  1. package/CHANGELOG.md +331 -7
  2. package/README.md +226 -296
  3. package/dist/advisory-handoff.js +89 -0
  4. package/dist/advisory-report.js +105 -0
  5. package/dist/agent/antigravity.js +152 -0
  6. package/dist/agent/backend.js +2 -0
  7. package/dist/agent/claude.js +196 -0
  8. package/dist/agent/codex.js +204 -0
  9. package/dist/agent/copilot.js +284 -0
  10. package/dist/agent/cursor.js +211 -0
  11. package/dist/agent/factory.js +30 -0
  12. package/dist/agent/gemini.js +142 -0
  13. package/dist/agent/opencode.js +205 -0
  14. package/dist/agent/spawn-helper.js +237 -0
  15. package/dist/agent/version.js +25 -0
  16. package/dist/browse/adapter-factory.js +69 -0
  17. package/dist/browse/adapters/agent-browser-adapter.js +305 -0
  18. package/dist/browse/adapters/playwright-adapter.js +309 -0
  19. package/dist/browse/adapters/types.js +6 -0
  20. package/dist/browse/error-collector.js +132 -0
  21. package/dist/browse/event-log.js +109 -0
  22. package/dist/browse/index.js +17 -0
  23. package/dist/browse-server.js +204 -120
  24. package/dist/cli/command-registry.js +20 -0
  25. package/dist/cli/commands/bench.js +69 -0
  26. package/dist/cli/commands/brain.js +108 -0
  27. package/dist/cli/commands/dashboard.js +76 -2
  28. package/dist/cli/commands/engineering.js +326 -4
  29. package/dist/cli/commands/evolve.js +123 -0
  30. package/dist/cli/commands/install.js +160 -0
  31. package/dist/cli/commands/learn.js +181 -0
  32. package/dist/cli/commands/mcp-serve.js +104 -0
  33. package/dist/cli/commands/parallel.js +138 -0
  34. package/dist/cli/commands/quality.js +105 -0
  35. package/dist/cli/commands/stack.js +49 -0
  36. package/dist/cli/commands/update.js +159 -0
  37. package/dist/cli/update-check.js +94 -10
  38. package/dist/cm-config.js +0 -18
  39. package/dist/codybench/judges/automated.js +31 -0
  40. package/dist/codybench/runners/claude-code.js +32 -0
  41. package/dist/codybench/suites/memory-retention.js +85 -0
  42. package/dist/codybench/suites/tdd-regression.js +35 -0
  43. package/dist/codybench/suites/token-efficiency.js +55 -0
  44. package/dist/codybench/types.js +2 -0
  45. package/dist/context-db.js +157 -0
  46. package/dist/continuity.js +5 -7
  47. package/dist/dashboard.js +47 -6
  48. package/dist/data.js +35 -0
  49. package/dist/execution/tdd-gate.js +113 -0
  50. package/dist/execution-analyzer.js +138 -0
  51. package/dist/executor/cancel.js +34 -0
  52. package/dist/executor/gc.js +74 -0
  53. package/dist/executor/index.js +14 -0
  54. package/dist/executor/runner.js +70 -0
  55. package/dist/executor/workdir.js +31 -0
  56. package/dist/handoff/contracts.js +22 -0
  57. package/dist/handoff/index.js +18 -0
  58. package/dist/handoff/io.js +121 -0
  59. package/dist/index.js +7 -3
  60. package/dist/indexer/skills-lib.js +533 -0
  61. package/dist/indexer/skills-map.js +1374 -0
  62. package/dist/indexer/skills.js +16 -0
  63. package/dist/indexer/stack-detect.js +219 -0
  64. package/dist/install/copy.js +98 -0
  65. package/dist/install/engine.js +42 -0
  66. package/dist/install/paths.js +70 -0
  67. package/dist/install/platforms/_simple.js +85 -0
  68. package/dist/install/platforms/antigravity.js +91 -0
  69. package/dist/install/platforms/claude-code.js +107 -0
  70. package/dist/install/platforms/cursor.js +77 -0
  71. package/dist/install/platforms/index.js +27 -0
  72. package/dist/install/platforms/simple.js +163 -0
  73. package/dist/install/profiles.js +75 -0
  74. package/dist/install/types.js +2 -0
  75. package/dist/learning-promoter.js +246 -0
  76. package/dist/learnings.js +208 -0
  77. package/dist/mcp-context-server.js +230 -1
  78. package/dist/middleware/metrics.js +30 -0
  79. package/dist/middleware/security-headers.js +14 -0
  80. package/dist/realtime/event-bus.js +29 -0
  81. package/dist/realtime/ws-hub.js +91 -0
  82. package/dist/schemas/task-schema.js +48 -0
  83. package/dist/schemas/validate.js +18 -0
  84. package/dist/skill-chain.js +63 -1
  85. package/dist/skill-evolver.js +456 -0
  86. package/dist/skill-execution-cache.js +254 -0
  87. package/dist/skills-lock.js +96 -0
  88. package/dist/smart-brain-router.js +184 -0
  89. package/dist/sprint-pipeline.js +26 -0
  90. package/dist/storage/index.js +21 -0
  91. package/dist/storage/repos/activity-repo.js +46 -0
  92. package/dist/storage/repos/message-repo.js +39 -0
  93. package/dist/storage/repos/project-repo.js +56 -0
  94. package/dist/storage/repos/task-repo.js +142 -0
  95. package/dist/storage/services/project-service.js +49 -0
  96. package/dist/storage/services/task-service.js +97 -0
  97. package/dist/storage/sqlite.js +113 -0
  98. package/dist/storage-backend.js +10 -8
  99. package/dist/tier-classify.js +131 -0
  100. package/dist/token-budget.js +88 -0
  101. package/dist/ui/onboarding.js +51 -15
  102. package/dist/utils/cli-utils.js +7 -2
  103. package/dist/utils/design-taste.js +108 -0
  104. package/dist/utils/output-compress.js +143 -0
  105. package/dist/vibecoding-index.js +126 -0
  106. package/package.json +20 -6
  107. package/public/dashboard/app.js +52 -1
  108. package/scripts/build-skills-lock.mjs +88 -0
  109. package/scripts/build-skills.mjs +187 -28
  110. package/scripts/compress-skill.mjs +73 -0
  111. package/scripts/deprecate-skill.mjs +72 -0
  112. package/scripts/install.sh +170 -0
  113. package/scripts/mcp-bridge.js +2 -2
  114. package/scripts/postinstall.js +53 -335
  115. package/scripts/update-changelog.sh +88 -0
  116. package/scripts/validate-skills.mjs +101 -4
  117. package/skills/CLAUDE.md +0 -5
  118. package/skills/_shared/SKILL_TEMPLATE.md +62 -0
  119. package/skills/_shared/helpers.md +2 -8
  120. package/skills/cm-autopilot/scripts/autopilot.py +19 -2
  121. package/skills/cm-brainstorm-idea/SKILL.md +9 -0
  122. package/skills/cm-browse/SKILL.md +6 -0
  123. package/skills/cm-clean-code/SKILL.md +20 -0
  124. package/skills/cm-code-review/SKILL.md +21 -0
  125. package/skills/cm-codeintell/SKILL.md +9 -0
  126. package/skills/cm-conductor-worktrees/SKILL.archive.md +28 -0
  127. package/skills/cm-conductor-worktrees/SKILL.md +20 -18
  128. package/skills/cm-continuity/SKILL.md +41 -33
  129. package/skills/cm-dashboard/SKILL.archive.md +15 -0
  130. package/skills/cm-dashboard/SKILL.md +20 -9
  131. package/skills/cm-dashboard/ui/app.js +9 -1
  132. package/skills/cm-debugging/SKILL.md +9 -0
  133. package/skills/cm-design-studio/SKILL.archive.md +34 -0
  134. package/skills/cm-design-studio/SKILL.md +20 -24
  135. package/skills/cm-design-system/SKILL.md +1 -0
  136. package/skills/cm-ecosystem-roadmap/SKILL.md +4 -0
  137. package/skills/cm-engineering-meta/SKILL.archive.md +73 -0
  138. package/skills/cm-engineering-meta/SKILL.md +19 -62
  139. package/skills/cm-execution/SKILL.md +98 -0
  140. package/skills/cm-git-worktrees/SKILL.archive.md +157 -0
  141. package/skills/cm-git-worktrees/SKILL.md +15 -146
  142. package/skills/cm-guardian-runtime/SKILL.md +5 -1
  143. package/skills/cm-identity-guard/SKILL.md +8 -0
  144. package/skills/cm-mcp-engineering/SKILL.md +4 -0
  145. package/skills/cm-planning/SKILL.md +63 -92
  146. package/skills/cm-post-deploy-canary/SKILL.archive.md +22 -0
  147. package/skills/cm-post-deploy-canary/SKILL.md +20 -12
  148. package/skills/cm-project-bootstrap/SKILL.md +11 -0
  149. package/skills/cm-qa-visual-cli/SKILL.archive.md +22 -0
  150. package/skills/cm-qa-visual-cli/SKILL.md +19 -11
  151. package/skills/cm-quality-gate/SKILL.md +38 -0
  152. package/skills/cm-retro-cli/SKILL.md +4 -0
  153. package/skills/cm-safe-deploy/SKILL.md +9 -0
  154. package/skills/cm-second-opinion-cli/SKILL.archive.md +23 -0
  155. package/skills/cm-second-opinion-cli/SKILL.md +20 -13
  156. package/skills/cm-secret-shield/SKILL.archive.md +580 -0
  157. package/skills/cm-secret-shield/SKILL.md +15 -569
  158. package/skills/cm-security-gate/SKILL.archive.md +239 -0
  159. package/skills/cm-security-gate/SKILL.md +16 -228
  160. package/skills/cm-skill-chain/SKILL.md +25 -4
  161. package/skills/cm-skill-evolution/SKILL.md +83 -0
  162. package/skills/cm-skill-health/SKILL.archive.md +83 -0
  163. package/skills/cm-skill-health/SKILL.md +26 -0
  164. package/skills/cm-skill-index/SKILL.md +19 -3
  165. package/skills/cm-skill-mastery/SKILL.archive.md +156 -0
  166. package/skills/cm-skill-mastery/SKILL.md +16 -146
  167. package/skills/cm-skill-search/SKILL.archive.md +49 -0
  168. package/skills/cm-skill-search/SKILL.md +26 -0
  169. package/skills/cm-skill-share/SKILL.archive.md +58 -0
  170. package/skills/cm-skill-share/SKILL.md +26 -0
  171. package/skills/cm-sprint-bus/SKILL.md +13 -0
  172. package/skills/cm-start/SKILL.md +17 -10
  173. package/skills/cm-tdd/SKILL.md +21 -2
  174. package/skills/cm-terminal/SKILL.md +15 -0
  175. package/skills/cm-test-gate/SKILL.archive.md +245 -0
  176. package/skills/cm-test-gate/SKILL.md +15 -234
  177. package/skills/cm-ui-preview/SKILL.archive.md +153 -0
  178. package/skills/cm-ui-preview/SKILL.md +16 -143
  179. package/skills/cm-ux-master/cli/uxmaster/commands/mcp.py +1 -1
  180. package/skills/cm-ux-master/mcp/mcp-config.json +1 -1
  181. package/skills/cm-ux-master/mcp/server.py +2 -2
  182. package/skills/profiles/design.txt +1 -1
  183. package/skills/profiles/full.txt +4 -10
  184. package/skills/profiles/growth.txt +8 -8
  185. package/skills/profiles/knowledge.txt +1 -1
  186. package/skills/profiles/top35.json +41 -0
  187. package/adapters/antigravity.js +0 -15
  188. package/adapters/claude-code.js +0 -17
  189. package/adapters/cursor.js +0 -16
  190. package/install.sh +0 -1125
  191. package/scripts/viking-demo.ts +0 -105
  192. package/skills/cm-ads-tracker/SKILL.md +0 -401
  193. package/skills/cm-ads-tracker/evals/evals.json +0 -55
  194. package/skills/cm-ads-tracker/references/gtm-architecture.md +0 -321
  195. package/skills/cm-ads-tracker/references/industry-events.md +0 -294
  196. package/skills/cm-ads-tracker/references/platforms-api.md +0 -238
  197. package/skills/cm-ads-tracker/templates/capi-payload.md +0 -79
  198. package/skills/cm-ads-tracker/templates/datalayer-push.js +0 -104
  199. package/skills/cm-ads-tracker/templates/gtm-variables.js +0 -56
  200. package/skills/cm-auto-publisher/SKILL.md +0 -81
  201. package/skills/cm-booking-calendar/SKILL.md +0 -521
  202. package/skills/cm-booking-calendar/references/industry-patterns.md +0 -527
  203. package/skills/cm-booking-calendar/templates/booking-form.css +0 -626
  204. package/skills/cm-booking-calendar/templates/booking-form.html +0 -477
  205. package/skills/cm-booking-calendar/templates/calendar-engine.js +0 -419
  206. package/skills/cm-booking-calendar/templates/calendar-export.js +0 -395
  207. package/skills/cm-booking-calendar/templates/reminder-config.js +0 -629
  208. package/skills/cm-content-factory/.content-factory-state.json +0 -132
  209. package/skills/cm-content-factory/.git 2/logs/refs/heads/main +0 -1
  210. package/skills/cm-content-factory/.git 2/logs/refs/remotes/origin/main +0 -1
  211. package/skills/cm-content-factory/.git 2/objects/02/fb0956734b5f8ba3f918b7defd04a89cfe0076 +0 -0
  212. package/skills/cm-content-factory/.git 2/objects/08/1e129d75dc6feac6c02037272e6bd1a04e3324 +0 -0
  213. package/skills/cm-content-factory/.git 2/objects/0c/5393416f3c5e01c9a655a802bff0dd52f76f0a +0 -0
  214. package/skills/cm-content-factory/.git 2/objects/10/0b9be46978a946a77188f68be725098a122001 +0 -0
  215. package/skills/cm-content-factory/.git 2/objects/10/cf041167fc9843610eb3d90259ef3396315fdc +0 -0
  216. package/skills/cm-content-factory/.git 2/objects/12/5e19538dd6e1338ffe74f6c4c165b00435bf48 +0 -0
  217. package/skills/cm-content-factory/.git 2/objects/16/a9b9d0088d5c1347628b45a2620b479d8ad57c +0 -0
  218. package/skills/cm-content-factory/.git 2/objects/17/8c2a9ef93c33ae4eec9d58e82321f9229843a1 +0 -0
  219. package/skills/cm-content-factory/.git 2/objects/25/397ae41d09104d763bdcac2695209d85cdea89 +0 -0
  220. package/skills/cm-content-factory/.git 2/objects/2f/a836b7947f2d458e1f639788bf4bb0983a3305 +0 -0
  221. package/skills/cm-content-factory/.git 2/objects/3a/baaaf0a1c0909c0828335791557125fba911e0 +0 -0
  222. package/skills/cm-content-factory/.git 2/objects/42/2924221b81f5ce3c4e4daac9a64a24f9b01f9a +0 -0
  223. package/skills/cm-content-factory/.git 2/objects/42/ec0ce707447dc11446a34c9995fb8533801731 +0 -0
  224. package/skills/cm-content-factory/.git 2/objects/46/e43ce92866d56ce74b1d750db307cfe6154a15 +0 -0
  225. package/skills/cm-content-factory/.git 2/objects/48/5e41b633c63f55b8277bcc59f44f67681f671a +0 -0
  226. package/skills/cm-content-factory/.git 2/objects/49/49c596a3a89fa240642acd95dd3258e261eb09 +0 -0
  227. package/skills/cm-content-factory/.git 2/objects/50/9d42d8412ef8eaf7f7e138476bac2e4d10ce60 +0 -0
  228. package/skills/cm-content-factory/.git 2/objects/55/0c8c389d981b463ef849aeb792d8be3ccb6ec8 +0 -0
  229. package/skills/cm-content-factory/.git 2/objects/5d/82d3b18410cdda3ace3677436f0cb599dbe2d2 +0 -0
  230. package/skills/cm-content-factory/.git 2/objects/60/0617c58e871a38b33bf29e282d132bb3c381ad +0 -0
  231. package/skills/cm-content-factory/.git 2/objects/6a/8369a99c687b7245c92ffaf0e0f0dab9014504 +0 -0
  232. package/skills/cm-content-factory/.git 2/objects/79/bea435d40ab531c1aaf6be0432c6a5b7aaed21 +0 -0
  233. package/skills/cm-content-factory/.git 2/objects/7e/5ebd79251c2f14e4aceb86c74b6b6daae6b500 +0 -0
  234. package/skills/cm-content-factory/.git 2/objects/81/98a822a60178d6d5023ddb3e222cddf048742e +0 -0
  235. package/skills/cm-content-factory/.git 2/objects/86/0a0e1943dfe53411d2e499a1f16f46a96ef758 +0 -0
  236. package/skills/cm-content-factory/.git 2/objects/86/971fb55fdc081fdbae52376f0f13e57a4e9b04 +0 -0
  237. package/skills/cm-content-factory/.git 2/objects/88/b89dd609a0a03f8d4fe8bfde20d5b8fc1d326d +0 -0
  238. package/skills/cm-content-factory/.git 2/objects/90/8737edb6b7809e32cc01590b4e08ba42a9d40d +0 -0
  239. package/skills/cm-content-factory/.git 2/objects/93/d5a8a9a7d4fb7f11491cb596a6880528725118 +0 -0
  240. package/skills/cm-content-factory/.git 2/objects/98/46a2ab81d0c3b3eb00ef88fc56989aa7e9f316 +0 -0
  241. package/skills/cm-content-factory/.git 2/objects/9b/d8dd1e49cf274eaf9c555f3ab39dce7af5715e +0 -0
  242. package/skills/cm-content-factory/.git 2/objects/a1/13329fb0cec96ae78b222d33a24c3b5bc7fa1f +0 -0
  243. package/skills/cm-content-factory/.git 2/objects/a9/e6effe626e8a3aea3a8fc3364b492191c6e7d0 +0 -0
  244. package/skills/cm-content-factory/.git 2/objects/ad/6de7e48d9782cca9353d1ff0aa1aab7fe1df85 +0 -0
  245. package/skills/cm-content-factory/.git 2/objects/af/54ae316f771ff692e299ffcd8bf2f06b413b59 +0 -0
  246. package/skills/cm-content-factory/.git 2/objects/b0/4cb8b0b00dad633e731c1472161419e738d674 +0 -0
  247. package/skills/cm-content-factory/.git 2/objects/b3/094abb0b9ed46419b269e4a4e36a459690e3b0 +0 -0
  248. package/skills/cm-content-factory/.git 2/objects/b9/435c5d4baac2cfc5c83009ddd27b46b60db5f1 +0 -0
  249. package/skills/cm-content-factory/.git 2/objects/ba/5da17dbaec5ec2dcfdfd126aead518d1171d5c +0 -0
  250. package/skills/cm-content-factory/.git 2/objects/c0/bf58703aa258ba5dd63083bebaec8f223d844c +0 -0
  251. package/skills/cm-content-factory/.git 2/objects/c4/701a34edf1fc1bad58ccc57bd03f9426acb59a +0 -0
  252. package/skills/cm-content-factory/.git 2/objects/c7/5ccce9a4e5cc74d9b3174550cf6d993ca43638 +0 -0
  253. package/skills/cm-content-factory/.git 2/objects/c7/710d59b5a35b0f1f0a0399386643a0bd94c929 +0 -0
  254. package/skills/cm-content-factory/.git 2/objects/d1/fe58237112e953e5fec52da22cf38e08be3df9 +0 -5
  255. package/skills/cm-content-factory/.git 2/objects/d2/2bbe9fd2f74c95bc5583e803f5e435f1e2cd86 +0 -0
  256. package/skills/cm-content-factory/.git 2/objects/d7/e72852ea2bff74581dbf247d400120086229f4 +0 -0
  257. package/skills/cm-content-factory/.git 2/objects/d8/d4c3b5553e4fd72807e1d4b49ef07d9ef3ac35 +0 -0
  258. package/skills/cm-content-factory/.git 2/objects/dc/75050c2876f6a02ae2a53a3c886f395b622977 +0 -0
  259. package/skills/cm-content-factory/.git 2/objects/ee/e8546f95acec500187c08a28a8b9ee02db0dec +0 -0
  260. package/skills/cm-content-factory/.git 2/objects/ef/263c059208b416c2146434f10cb2b9fabcba16 +0 -0
  261. package/skills/cm-content-factory/.git 2/objects/f3/ae597e84d9a59b88acd21c99bde2eaf686d785 +0 -0
  262. package/skills/cm-content-factory/.git 2/objects/f3/f6f5673c821d3d8e76fa267a9e882e7a5387ea +0 -0
  263. package/skills/cm-content-factory/.git 2/objects/f9/6e6d0ad02624dd11d5848594d056caef7a5e8b +0 -0
  264. package/skills/cm-content-factory/.git 2/objects/ff/278988fc1edf0db3abcf18de795f4cc0b4f3e1 +0 -0
  265. package/skills/cm-content-factory/.git 2/refs/heads/main +0 -1
  266. package/skills/cm-content-factory/.git 2/refs/remotes/origin/main +0 -1
  267. package/skills/cm-content-factory/.pytest_cache 2/v/cache/nodeids +0 -76
  268. package/skills/cm-content-factory/.pytest_cache 2/v/cache/stepwise +0 -1
  269. package/skills/cm-content-factory/AGENTS.md +0 -61
  270. package/skills/cm-content-factory/CLAUDE.md +0 -63
  271. package/skills/cm-content-factory/CURSOR.md +0 -43
  272. package/skills/cm-content-factory/Content Factory.zip +0 -0
  273. package/skills/cm-content-factory/SKILL.md +0 -416
  274. package/skills/cm-content-factory/cf +0 -313
  275. package/skills/cm-content-factory/config.schema.json +0 -397
  276. package/skills/cm-content-factory/dashboard/app.js +0 -556
  277. package/skills/cm-content-factory/dashboard/index.html +0 -397
  278. package/skills/cm-content-factory/dashboard/style.css +0 -1211
  279. package/skills/cm-content-factory/examples/01-real-estate.config.json +0 -146
  280. package/skills/cm-content-factory/examples/02-personal-finance.config.json +0 -146
  281. package/skills/cm-content-factory/examples/03-health-wellness.config.json +0 -147
  282. package/skills/cm-content-factory/examples/04-saas-software.config.json +0 -147
  283. package/skills/cm-content-factory/examples/05-legal-services.config.json +0 -147
  284. package/skills/cm-content-factory/examples/06-insurance.config.json +0 -146
  285. package/skills/cm-content-factory/examples/07-ecommerce-dropship.config.json +0 -146
  286. package/skills/cm-content-factory/examples/08-online-education.config.json +0 -147
  287. package/skills/cm-content-factory/examples/09-crypto-defi.config.json +0 -147
  288. package/skills/cm-content-factory/examples/10-beauty-skincare.config.json +0 -147
  289. package/skills/cm-content-factory/examples/11-home-services.config.json +0 -146
  290. package/skills/cm-content-factory/examples/12-dental-clinic.config.json +0 -147
  291. package/skills/cm-content-factory/examples/13-pet-care.config.json +0 -147
  292. package/skills/cm-content-factory/examples/14-travel-hospitality.config.json +0 -147
  293. package/skills/cm-content-factory/examples/15-ai-automation.config.json +0 -147
  294. package/skills/cm-content-factory/examples/16-wedding-events.config.json +0 -147
  295. package/skills/cm-content-factory/examples/17-fitness-coaching.config.json +0 -148
  296. package/skills/cm-content-factory/examples/18-cybersecurity.config.json +0 -147
  297. package/skills/cm-content-factory/examples/19-food-restaurant.config.json +0 -148
  298. package/skills/cm-content-factory/examples/20-solar-energy.config.json +0 -147
  299. package/skills/cm-content-factory/examples/fitness-blog.config.json +0 -116
  300. package/skills/cm-content-factory/examples/tech-blog.config.json +0 -107
  301. package/skills/cm-content-factory/extensions/EXTENSION_GUIDE.md +0 -72
  302. package/skills/cm-content-factory/extensions/hooks.py +0 -126
  303. package/skills/cm-content-factory/extensions/openclaw_adapter.py +0 -132
  304. package/skills/cm-content-factory/landing/docs/content/changelog.md +0 -36
  305. package/skills/cm-content-factory/landing/docs/content/deployment.md +0 -46
  306. package/skills/cm-content-factory/landing/docs/content/execution-flow.md +0 -67
  307. package/skills/cm-content-factory/landing/docs/content/openspace.md +0 -27
  308. package/skills/cm-content-factory/landing/docs/content/openviking.md +0 -33
  309. package/skills/cm-content-factory/landing/docs/content/use-cases.md +0 -26
  310. package/skills/cm-content-factory/landing/docs/content/v5-intro.md +0 -28
  311. package/skills/cm-content-factory/landing/docs/index.html +0 -240
  312. package/skills/cm-content-factory/landing/index.html +0 -680
  313. package/skills/cm-content-factory/landing/script.js +0 -143
  314. package/skills/cm-content-factory/landing/style.css +0 -1216
  315. package/skills/cm-content-factory/landing/translations.js +0 -508
  316. package/skills/cm-content-factory/logs/events.jsonl +0 -11
  317. package/skills/cm-content-factory/profiles/_template.profile.json +0 -231
  318. package/skills/cm-content-factory/profiles/finance.profile.json +0 -278
  319. package/skills/cm-content-factory/profiles/legal.profile.json +0 -263
  320. package/skills/cm-content-factory/profiles/medical-research.profile.json +0 -321
  321. package/skills/cm-content-factory/profiles/technology.profile.json +0 -275
  322. package/skills/cm-content-factory/scripts/agent_dispatcher.py +0 -266
  323. package/skills/cm-content-factory/scripts/audit.py +0 -106
  324. package/skills/cm-content-factory/scripts/dashboard_server.py +0 -225
  325. package/skills/cm-content-factory/scripts/deploy.py +0 -146
  326. package/skills/cm-content-factory/scripts/extract.py +0 -132
  327. package/skills/cm-content-factory/scripts/landing_generator.py +0 -459
  328. package/skills/cm-content-factory/scripts/memory.py +0 -521
  329. package/skills/cm-content-factory/scripts/monetize.py +0 -239
  330. package/skills/cm-content-factory/scripts/pipeline.py +0 -357
  331. package/skills/cm-content-factory/scripts/plan.py +0 -163
  332. package/skills/cm-content-factory/scripts/publish.py +0 -145
  333. package/skills/cm-content-factory/scripts/research.py +0 -337
  334. package/skills/cm-content-factory/scripts/scaffold.py +0 -464
  335. package/skills/cm-content-factory/scripts/scoreboard.py +0 -336
  336. package/skills/cm-content-factory/scripts/seo.py +0 -90
  337. package/skills/cm-content-factory/scripts/state_manager.py +0 -320
  338. package/skills/cm-content-factory/scripts/token_manager.py +0 -268
  339. package/skills/cm-content-factory/scripts/validate.py +0 -221
  340. package/skills/cm-content-factory/scripts/wizard.py +0 -329
  341. package/skills/cm-content-factory/scripts/write.py +0 -93
  342. package/skills/cm-content-factory/sites/docs-site/src/assets/houston.webp +0 -0
  343. package/skills/cm-content-factory/sites/docs-site/src/content/docs/architecture.md +0 -90
  344. package/skills/cm-content-factory/sites/docs-site/src/content/docs/data-flow.md +0 -54
  345. package/skills/cm-content-factory/sites/docs-site/src/content/docs/deployment.md +0 -38
  346. package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/index.md +0 -65
  347. package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/lc-content-lifecycle.md +0 -48
  348. package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/seq-write-mode.md +0 -39
  349. package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/uj-first-batch.md +0 -42
  350. package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/wf-content-pipeline.md +0 -51
  351. package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/wf-learning-cycle.md +0 -52
  352. package/skills/cm-content-factory/sites/docs-site/src/content/docs/getting-started/configuration.md +0 -86
  353. package/skills/cm-content-factory/sites/docs-site/src/content/docs/getting-started/installation.md +0 -80
  354. package/skills/cm-content-factory/sites/docs-site/src/content/docs/getting-started/intro.md +0 -58
  355. package/skills/cm-content-factory/sites/docs-site/src/content/docs/index.md +0 -102
  356. package/skills/cm-content-factory/sites/docs-site/src/content/docs/jtbd/index.md +0 -45
  357. package/skills/cm-content-factory/sites/docs-site/src/content/docs/jtbd/optimize-seo.md +0 -29
  358. package/skills/cm-content-factory/sites/docs-site/src/content/docs/jtbd/scale-content-production.md +0 -55
  359. package/skills/cm-content-factory/sites/docs-site/src/content/docs/jtbd/standardize-quality.md +0 -29
  360. package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/buyer-cmo-huong.md +0 -41
  361. package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/buyer-content-lead-khoa.md +0 -40
  362. package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/index.md +0 -56
  363. package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/user-content-manager-lan.md +0 -46
  364. package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/user-seo-minh.md +0 -45
  365. package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/user-writer-tu.md +0 -45
  366. package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/content-pipeline.md +0 -108
  367. package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/index.md +0 -22
  368. package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/memory-system.md +0 -52
  369. package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/seo-optimization.md +0 -58
  370. package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/troubleshooting-guide.md +0 -92
  371. package/skills/cm-content-factory/sites/docs-site/src/styles/custom.css +0 -575
  372. package/skills/cm-content-factory/tests/conftest.py +0 -66
  373. package/skills/cm-content-factory/tests/test_agent_dispatcher.py +0 -125
  374. package/skills/cm-content-factory/tests/test_memory.py +0 -128
  375. package/skills/cm-content-factory/tests/test_pipeline.py +0 -107
  376. package/skills/cm-content-factory/tests/test_research.py +0 -56
  377. package/skills/cm-content-factory/tests/test_state_manager.py +0 -131
  378. package/skills/cm-content-factory/tests/test_token_manager.py +0 -110
  379. package/skills/cm-content-factory/tests/test_wizard.py +0 -121
  380. package/skills/cm-cro-methodology/SKILL.md +0 -290
  381. package/skills/cm-cro-methodology/references/COPYWRITING.md +0 -178
  382. package/skills/cm-cro-methodology/references/OBJECTIONS.md +0 -135
  383. package/skills/cm-cro-methodology/references/PERSUASION.md +0 -158
  384. package/skills/cm-cro-methodology/references/RESEARCH.md +0 -220
  385. package/skills/cm-cro-methodology/references/funnel-analysis.md +0 -365
  386. package/skills/cm-cro-methodology/references/testing-methodology.md +0 -330
  387. package/skills/cm-google-form/SKILL.md +0 -266
  388. package/skills/cm-google-form/templates/apps-script.js +0 -55
  389. package/skills/cm-google-form/templates/form-markup.html +0 -110
  390. package/skills/cm-google-form/templates/form-submit.js +0 -201
  391. package/skills/cm-google-form/templates/toast.css +0 -152
  392. package/skills/cm-growth-hacking/SKILL.md +0 -282
  393. package/skills/cm-growth-hacking/bottom-sheet-engine.md +0 -261
  394. package/skills/cm-growth-hacking/calendar-integration.md +0 -264
  395. package/skills/cm-growth-hacking/references/engagement-patterns.md +0 -346
  396. package/skills/cm-growth-hacking/templates/bottom-sheet.css +0 -528
  397. package/skills/cm-growth-hacking/templates/bottom-sheet.js +0 -269
  398. package/skills/cm-growth-hacking/templates/calendar-cta.js +0 -213
  399. package/skills/cm-growth-hacking/templates/tracking-events.js +0 -211
  400. package/skills/cm-growth-hacking/templates/trigger-manager.js +0 -254
  401. package/skills/cm-growth-hacking/tracking-events.md +0 -246
  402. package/skills/cm-growth-hacking/trigger-system.md +0 -342
  403. package/skills/cm-jtbd/SKILL.md +0 -98
  404. package/skills/cm-notebooklm/SKILL.md +0 -156
  405. package/skills/cm-notebooklm/references/command_reference.md +0 -94
  406. package/skills/cm-notebooklm/references/workflows.md +0 -60
  407. package/skills/cm-notebooklm/resources/knowledge_sources.md +0 -106
  408. package/skills/cm-notebooklm/scripts/brain-sync.sh +0 -453
  409. package/skills/cm-notebooklm/scripts/graduate_wisdom.py +0 -101
  410. package/skills/cm-readit/SKILL.md +0 -289
  411. package/skills/cm-readit/audio-player.md +0 -206
  412. package/skills/cm-readit/examples/blog-reader.js +0 -352
  413. package/skills/cm-readit/examples/voice-cro.js +0 -390
  414. package/skills/cm-readit/tts-engine.md +0 -262
  415. package/skills/cm-readit/ui-patterns.md +0 -362
  416. package/skills/cm-readit/voice-cro.md +0 -223
@@ -1,254 +0,0 @@
1
- /**
2
- * CM Growth Hacking — TriggerManager
3
- *
4
- * When to show the bottom sheet? This module decides.
5
- * Supports: scroll, time, exit-intent, click, return-visitor, interaction, dual.
6
- *
7
- * Usage:
8
- * const trigger = new TriggerManager({
9
- * trigger: { type: 'scroll', value: 0.3 },
10
- * session: { dismissKey: 'eng_booking_dismissed', storage: 'sessionStorage' },
11
- * onTrigger: () => bookingSheet.show(),
12
- * });
13
- * trigger.init();
14
- */
15
-
16
- (function () {
17
- 'use strict';
18
-
19
- class TriggerManager {
20
- constructor(config) {
21
- this.config = config;
22
- this.triggered = false;
23
- this._listeners = [];
24
- this._timers = [];
25
- }
26
-
27
- // ─── Public API ─────────────────────────────────────
28
- init() {
29
- if (this._isDismissed()) return;
30
- if (this._respectsReducedMotion()) return;
31
-
32
- var type = this.config.trigger.type;
33
-
34
- switch (type) {
35
- case 'scroll': this._initScroll(); break;
36
- case 'time': this._initTime(); break;
37
- case 'exit': this._initExitIntent(); break;
38
- case 'click': this._initClick(); break;
39
- case 'return': this._initReturnVisitor(); break;
40
- case 'interaction': this._initInteraction(); break;
41
- case 'dual': this._initDual(); break;
42
- default:
43
- console.warn('[TriggerManager] Unknown trigger type:', type);
44
- }
45
- }
46
-
47
- fire() {
48
- if (this.triggered) return;
49
- this.triggered = true;
50
- this._cleanup();
51
-
52
- if (typeof this.config.onTrigger === 'function') {
53
- this.config.onTrigger();
54
- }
55
- }
56
-
57
- destroy() {
58
- this._cleanup();
59
- this.triggered = true;
60
- }
61
-
62
- // ─── Scroll Trigger ─────────────────────────────────
63
- _initScroll() {
64
- var self = this;
65
- var threshold = this.config.trigger.value || 0.3;
66
- var delay = this.config.trigger.delay || 0;
67
-
68
- var onScroll = function () {
69
- var scrollHeight = document.documentElement.scrollHeight - window.innerHeight;
70
- if (scrollHeight <= 0) return;
71
- var pct = window.scrollY / scrollHeight;
72
-
73
- if (pct >= threshold) {
74
- if (delay > 0) {
75
- var t = setTimeout(function () { self.fire(); }, delay);
76
- self._timers.push(t);
77
- } else {
78
- self.fire();
79
- }
80
- }
81
- };
82
-
83
- window.addEventListener('scroll', onScroll, { passive: true });
84
- this._listeners.push({ el: window, event: 'scroll', fn: onScroll });
85
-
86
- // Check immediately
87
- onScroll();
88
- }
89
-
90
- // ─── Time Trigger ───────────────────────────────────
91
- _initTime() {
92
- var self = this;
93
- var delay = this.config.trigger.value || 15000;
94
-
95
- var t = setTimeout(function () { self.fire(); }, delay);
96
- this._timers.push(t);
97
- }
98
-
99
- // ─── Exit Intent (Desktop Only) ─────────────────────
100
- _initExitIntent() {
101
- // Touch devices don't have exit intent
102
- if ('ontouchstart' in window) {
103
- // Fallback: use time trigger
104
- this.config.trigger.value = this.config.trigger.fallbackDelay || 20000;
105
- this._initTime();
106
- return;
107
- }
108
-
109
- var self = this;
110
- var debounceTimer;
111
-
112
- var onMouseLeave = function (e) {
113
- if (e.clientY <= 0) {
114
- clearTimeout(debounceTimer);
115
- debounceTimer = setTimeout(function () { self.fire(); }, 300);
116
- }
117
- };
118
-
119
- document.addEventListener('mouseleave', onMouseLeave);
120
- this._listeners.push({ el: document, event: 'mouseleave', fn: onMouseLeave });
121
- }
122
-
123
- // ─── Click Trigger ──────────────────────────────────
124
- _initClick() {
125
- var self = this;
126
- var selector = this.config.trigger.value;
127
-
128
- var elements = document.querySelectorAll(selector);
129
- elements.forEach(function (el) {
130
- var onClick = function (e) {
131
- e.preventDefault();
132
- self.fire();
133
- };
134
- el.addEventListener('click', onClick);
135
- self._listeners.push({ el: el, event: 'click', fn: onClick });
136
- });
137
- }
138
-
139
- // ─── Return Visitor ─────────────────────────────────
140
- _initReturnVisitor() {
141
- var self = this;
142
- var VISIT_KEY = 'eng_visit_count';
143
- var minVisits = this.config.trigger.value || 2;
144
-
145
- try {
146
- var visits = parseInt(localStorage.getItem(VISIT_KEY) || '0');
147
- visits++;
148
- localStorage.setItem(VISIT_KEY, visits.toString());
149
-
150
- if (visits >= minVisits) {
151
- var delay = this.config.trigger.delay || 3000;
152
- var t = setTimeout(function () { self.fire(); }, delay);
153
- self._timers.push(t);
154
- }
155
- } catch (e) { /* localStorage blocked */ }
156
- }
157
-
158
- // ─── Interaction Trigger ────────────────────────────
159
- _initInteraction() {
160
- var self = this;
161
- var opts = this.config.trigger.value; // { selector, minCount }
162
-
163
- if (!opts || !opts.selector || !opts.minCount) {
164
- console.warn('[TriggerManager] Interaction trigger requires { selector, minCount }');
165
- return;
166
- }
167
-
168
- var elements = document.querySelectorAll(opts.selector);
169
-
170
- var checkCount = function () {
171
- var interacted = document.querySelectorAll(opts.selector + ':checked').length;
172
- if (interacted >= opts.minCount) {
173
- self.fire();
174
- }
175
- };
176
-
177
- elements.forEach(function (el) {
178
- el.addEventListener('change', checkCount);
179
- self._listeners.push({ el: el, event: 'change', fn: checkCount });
180
- });
181
- }
182
-
183
- // ─── Dual Trigger (Time + Scroll) ───────────────────
184
- _initDual() {
185
- var self = this;
186
- var timeReady = false;
187
- var scrollReady = false;
188
-
189
- var tryFire = function () {
190
- if (timeReady && scrollReady) self.fire();
191
- };
192
-
193
- // Time leg
194
- var delay = (this.config.trigger.value && this.config.trigger.value.time) || 15000;
195
- var t = setTimeout(function () { timeReady = true; tryFire(); }, delay);
196
- this._timers.push(t);
197
-
198
- // Scroll leg
199
- var threshold = (this.config.trigger.value && this.config.trigger.value.scroll) || 0.25;
200
- var onScroll = function () {
201
- var scrollHeight = document.documentElement.scrollHeight - window.innerHeight;
202
- if (scrollHeight <= 0) return;
203
- var pct = window.scrollY / scrollHeight;
204
- if (pct >= threshold) {
205
- scrollReady = true;
206
- window.removeEventListener('scroll', onScroll);
207
- tryFire();
208
- }
209
- };
210
-
211
- window.addEventListener('scroll', onScroll, { passive: true });
212
- this._listeners.push({ el: window, event: 'scroll', fn: onScroll });
213
- onScroll();
214
- }
215
-
216
- // ─── Session Management ─────────────────────────────
217
- _isDismissed() {
218
- var key = (this.config.session && this.config.session.dismissKey) || 'eng_dismissed';
219
- var storageType = (this.config.session && this.config.session.storage) || 'sessionStorage';
220
- var storage = storageType === 'localStorage' ? localStorage : sessionStorage;
221
-
222
- try { return storage.getItem(key) === '1'; }
223
- catch (e) { return false; }
224
- }
225
-
226
- setDismissed() {
227
- var key = (this.config.session && this.config.session.dismissKey) || 'eng_dismissed';
228
- var storageType = (this.config.session && this.config.session.storage) || 'sessionStorage';
229
- var storage = storageType === 'localStorage' ? localStorage : sessionStorage;
230
-
231
- try { storage.setItem(key, '1'); }
232
- catch (e) { /* noop */ }
233
- }
234
-
235
- _respectsReducedMotion() {
236
- return window.matchMedia('(prefers-reduced-motion: reduce)').matches;
237
- }
238
-
239
- // ─── Cleanup ────────────────────────────────────────
240
- _cleanup() {
241
- this._listeners.forEach(function (l) {
242
- l.el.removeEventListener(l.event, l.fn);
243
- });
244
- this._listeners = [];
245
-
246
- this._timers.forEach(function (t) { clearTimeout(t); });
247
- this._timers = [];
248
- }
249
- }
250
-
251
- // ─── Export ─────────────────────────────────────────
252
- window.TriggerManager = TriggerManager;
253
-
254
- })();
@@ -1,246 +0,0 @@
1
- # Tracking Events
2
-
3
- > Engagement-specific dataLayer events cho GTM.
4
- > Kế thừa `cm-ads-tracker` convention, thêm engagement-specific events.
5
-
6
- ---
7
-
8
- ## 🎯 Event Naming Convention
9
-
10
- Prefix: **`cro_`** — consistent with `cm-ads-tracker` skill.
11
-
12
- | Event | dataLayer event name | When to fire |
13
- |-------|---------------------|--------------|
14
- | Sheet shown | `cro_sheet_shown` | Bottom sheet becomes visible |
15
- | Sheet dismissed | `cro_sheet_dismissed` | User closes/swipes sheet |
16
- | Sheet interaction | `cro_sheet_interact` | User interacts with sheet content |
17
- | Booking submitted | `cro_booking_submit` | Booking form success |
18
- | Calendar added | `cro_calendar_add` | User adds to GCal or downloads ICS |
19
- | Lead captured | `cro_lead_capture` | Lead form success |
20
- | Promo engaged | `cro_promo_engage` | User clicks promo CTA |
21
- | Survey completed | `cro_survey_complete` | User submits survey/rating |
22
- | Chat initiated | `cro_chat_initiate` | User clicks Zalo/Messenger |
23
- | Re-engaged | `cro_reengagement` | Return visitor interacts |
24
-
25
- ---
26
-
27
- ## 📦 DataLayer Push Schemas
28
-
29
- ### Sheet Shown
30
-
31
- ```javascript
32
- dataLayer.push({
33
- event: 'cro_sheet_shown',
34
- event_id: generateUUID(),
35
- sheet_type: 'booking', // booking | lead | promo | survey | chat | reengagement
36
- trigger_type: 'scroll', // scroll | time | exit | click | return | interaction | dual
37
- page_path: window.location.pathname,
38
- industry: 'healthcare' // from config
39
- });
40
- ```
41
-
42
- ### Sheet Dismissed
43
-
44
- ```javascript
45
- dataLayer.push({
46
- event: 'cro_sheet_dismissed',
47
- event_id: generateUUID(),
48
- sheet_type: 'booking',
49
- dismiss_method: 'swipe', // swipe | close_button | backdrop | escape
50
- time_visible: 5200, // ms sheet was visible
51
- interacted: false // did user interact before dismissing?
52
- });
53
- ```
54
-
55
- ### Booking Submitted
56
-
57
- ```javascript
58
- dataLayer.push({
59
- event: 'cro_booking_submit',
60
- event_id: generateUUID(),
61
- content_name: 'Khám thai', // service name
62
- value: 500000, // conversion value
63
- currency: 'VND',
64
- booking_date: '2025-02-15',
65
- booking_time: '09:00',
66
- industry: 'healthcare',
67
- source_sheet: true // submitted from bottom sheet (vs inline)
68
- });
69
- ```
70
-
71
- ### Calendar Added
72
-
73
- ```javascript
74
- dataLayer.push({
75
- event: 'cro_calendar_add',
76
- event_id: generateUUID(),
77
- content_name: 'Khám thai',
78
- calendar_type: 'gcal', // gcal | ics
79
- device_type: 'android', // ios | android | desktop
80
- appointments_count: 1,
81
- industry: 'healthcare'
82
- });
83
- ```
84
-
85
- ### Lead Captured
86
-
87
- ```javascript
88
- dataLayer.push({
89
- event: 'cro_lead_capture',
90
- event_id: generateUUID(),
91
- content_name: 'Tài liệu thai kỳ',
92
- trigger_type: 'exit',
93
- value: 50000, // estimated lead value
94
- currency: 'VND',
95
- email_hashed: '[SHA256]', // optional
96
- phone_hashed: '[SHA256]' // optional
97
- });
98
- ```
99
-
100
- ### Survey Completed
101
-
102
- ```javascript
103
- dataLayer.push({
104
- event: 'cro_survey_complete',
105
- event_id: generateUUID(),
106
- rating: 5, // 1-5 star rating
107
- has_feedback: true, // user wrote additional text
108
- survey_type: 'post_service', // post_service | post_booking | nps
109
- industry: 'healthcare'
110
- });
111
- ```
112
-
113
- ### Chat Initiated
114
-
115
- ```javascript
116
- dataLayer.push({
117
- event: 'cro_chat_initiate',
118
- event_id: generateUUID(),
119
- channel: 'zalo', // zalo | messenger | phone | whatsapp
120
- trigger_type: 'scroll',
121
- page_path: window.location.pathname
122
- });
123
- ```
124
-
125
- ---
126
-
127
- ## 🔧 Helper Functions
128
-
129
- ### UUID Generator
130
-
131
- ```javascript
132
- function generateUUID() {
133
- if (crypto?.randomUUID) return crypto.randomUUID();
134
- return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
135
- const r = Math.random() * 16 | 0;
136
- const v = c === 'x' ? r : (r & 0x3 | 0x8);
137
- return v.toString(16);
138
- });
139
- }
140
- ```
141
-
142
- ### SHA256 Hash (for Enhanced Matching)
143
-
144
- ```javascript
145
- async function sha256Hash(value) {
146
- const encoder = new TextEncoder();
147
- const data = encoder.encode(value.toLowerCase().trim());
148
- const hash = await crypto.subtle.digest('SHA-256', data);
149
- return Array.from(new Uint8Array(hash))
150
- .map(b => b.toString(16).padStart(2, '0'))
151
- .join('');
152
- }
153
-
154
- // Usage for phone: strip non-digits first
155
- async function hashPhone(phone) {
156
- const digits = phone.replace(/\D/g, '');
157
- return sha256Hash(digits);
158
- }
159
- ```
160
-
161
- ### Track Engagement (Unified Helper)
162
-
163
- ```javascript
164
- function trackEngagement(eventName, data = {}) {
165
- const payload = {
166
- event: eventName,
167
- event_id: generateUUID(),
168
- page_path: window.location.pathname,
169
- timestamp: Date.now(),
170
- ...data
171
- };
172
-
173
- // Push to GTM dataLayer
174
- window.dataLayer = window.dataLayer || [];
175
- window.dataLayer.push(payload);
176
-
177
- // Also store locally for analytics dashboard
178
- try {
179
- const key = 'eng_analytics';
180
- const stored = JSON.parse(localStorage.getItem(key) || '[]');
181
- stored.push(payload);
182
- // Keep last 100 events
183
- if (stored.length > 100) stored.splice(0, stored.length - 100);
184
- localStorage.setItem(key, JSON.stringify(stored));
185
- } catch { /* noop */ }
186
- }
187
- ```
188
-
189
- ---
190
-
191
- ## 🏷️ GTM Tag Mapping
192
-
193
- For each engagement event, create corresponding GTM tags:
194
-
195
- | Event | Facebook Pixel | TikTok Pixel | Google Ads | GA4 |
196
- |-------|---------------|-------------|------------|-----|
197
- | `cro_booking_submit` | Lead | SubmitForm | Lead Conversion | booking_submit |
198
- | `cro_calendar_add` | — | — | — | calendar_add (custom) |
199
- | `cro_lead_capture` | Lead | SubmitForm | Lead Conversion | lead_capture |
200
- | `cro_promo_engage` | ViewContent | ClickButton | — | promo_engage (custom) |
201
- | `cro_survey_complete` | — | — | — | survey_complete (custom) |
202
- | `cro_chat_initiate` | Contact | Contact | — | chat_initiate (custom) |
203
- | `cro_sheet_shown` | — | — | — | sheet_shown (custom) |
204
-
205
- > 📌 Only fire ad platform events for **conversion events** (booking, lead). Sheet shown/dismissed are GA4 only for internal analytics.
206
-
207
- ---
208
-
209
- ## 📊 Analytics Dashboard (Local)
210
-
211
- Simple localStorage-based tracking for non-GTM sites:
212
-
213
- ```javascript
214
- function getEngagementStats() {
215
- try {
216
- const events = JSON.parse(localStorage.getItem('eng_analytics') || '[]');
217
-
218
- const stats = {};
219
- events.forEach(e => {
220
- const key = e.event;
221
- if (!stats[key]) stats[key] = { count: 0, last: null };
222
- stats[key].count++;
223
- stats[key].last = new Date(e.timestamp).toLocaleString();
224
- });
225
-
226
- console.table(stats);
227
- return stats;
228
- } catch { return {}; }
229
- }
230
-
231
- // Call: getEngagementStats() in console
232
- ```
233
-
234
- ---
235
-
236
- ## 🔗 Skill Inheritance
237
-
238
- | Feature | Source |
239
- |---------|-------|
240
- | Event naming (`cro_` prefix) | `cm-ads-tracker` |
241
- | GTM architecture (dataLayer-first) | `cm-ads-tracker` |
242
- | SHA256 hashing for Enhanced Matching | `cm-ads-tracker` |
243
- | UTM conventions | `cm-ads-tracker` |
244
- | UUID deduplication pattern | `cm-ads-tracker` |
245
-
246
- > 📌 **Rule:** For full GTM container setup (tags, triggers, variables), delegate to `cm-ads-tracker` skill. This module provides the **engagement-specific event schemas** that plug into that architecture.