codymaster 5.2.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 (378) 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/middleware/metrics.js +30 -0
  59. package/dist/middleware/security-headers.js +14 -0
  60. package/dist/realtime/event-bus.js +29 -0
  61. package/dist/realtime/ws-hub.js +91 -0
  62. package/dist/schemas/task-schema.js +48 -0
  63. package/dist/schemas/validate.js +18 -0
  64. package/dist/skills-lock.js +96 -0
  65. package/dist/sprint-pipeline.js +26 -0
  66. package/dist/storage/index.js +21 -0
  67. package/dist/storage/repos/activity-repo.js +46 -0
  68. package/dist/storage/repos/message-repo.js +39 -0
  69. package/dist/storage/repos/project-repo.js +56 -0
  70. package/dist/storage/repos/task-repo.js +142 -0
  71. package/dist/storage/services/project-service.js +49 -0
  72. package/dist/storage/services/task-service.js +97 -0
  73. package/dist/storage/sqlite.js +113 -0
  74. package/dist/tier-classify.js +131 -0
  75. package/dist/ui/onboarding.js +51 -15
  76. package/dist/utils/cli-utils.js +7 -2
  77. package/dist/utils/design-taste.js +108 -0
  78. package/dist/utils/output-compress.js +143 -0
  79. package/dist/vibecoding-index.js +126 -0
  80. package/package.json +19 -4
  81. package/public/dashboard/app.js +52 -1
  82. package/scripts/build-skills-lock.mjs +88 -0
  83. package/scripts/build-skills.mjs +187 -28
  84. package/scripts/compress-skill.mjs +73 -0
  85. package/scripts/deprecate-skill.mjs +72 -0
  86. package/scripts/install.sh +170 -0
  87. package/scripts/mcp-bridge.js +2 -2
  88. package/scripts/postinstall.js +54 -287
  89. package/scripts/update-changelog.sh +88 -0
  90. package/scripts/validate-skills.mjs +101 -4
  91. package/skills/_shared/SKILL_TEMPLATE.md +62 -0
  92. package/skills/cm-autopilot/scripts/autopilot.py +19 -2
  93. package/skills/cm-brainstorm-idea/SKILL.md +9 -0
  94. package/skills/cm-clean-code/SKILL.md +20 -0
  95. package/skills/cm-code-review/SKILL.md +21 -0
  96. package/skills/cm-codeintell/SKILL.md +9 -0
  97. package/skills/cm-conductor-worktrees/SKILL.archive.md +28 -0
  98. package/skills/cm-conductor-worktrees/SKILL.md +17 -19
  99. package/skills/cm-continuity/SKILL.md +9 -0
  100. package/skills/cm-dashboard/SKILL.archive.md +15 -0
  101. package/skills/cm-dashboard/SKILL.md +20 -9
  102. package/skills/cm-dashboard/ui/app.js +9 -1
  103. package/skills/cm-debugging/SKILL.md +9 -0
  104. package/skills/cm-design-studio/SKILL.archive.md +34 -0
  105. package/skills/cm-design-studio/SKILL.md +17 -25
  106. package/skills/cm-design-system/SKILL.md +1 -0
  107. package/skills/cm-engineering-meta/SKILL.archive.md +73 -0
  108. package/skills/cm-engineering-meta/SKILL.md +16 -63
  109. package/skills/cm-execution/SKILL.md +98 -0
  110. package/skills/cm-git-worktrees/SKILL.archive.md +157 -0
  111. package/skills/cm-git-worktrees/SKILL.md +15 -146
  112. package/skills/cm-identity-guard/SKILL.md +8 -0
  113. package/skills/cm-planning/SKILL.md +63 -92
  114. package/skills/cm-post-deploy-canary/SKILL.archive.md +22 -0
  115. package/skills/cm-post-deploy-canary/SKILL.md +17 -13
  116. package/skills/cm-qa-visual-cli/SKILL.archive.md +22 -0
  117. package/skills/cm-qa-visual-cli/SKILL.md +16 -12
  118. package/skills/cm-quality-gate/SKILL.md +38 -0
  119. package/skills/cm-safe-deploy/SKILL.md +9 -0
  120. package/skills/cm-second-opinion-cli/SKILL.archive.md +23 -0
  121. package/skills/cm-second-opinion-cli/SKILL.md +17 -14
  122. package/skills/cm-secret-shield/SKILL.archive.md +580 -0
  123. package/skills/cm-secret-shield/SKILL.md +15 -569
  124. package/skills/cm-security-gate/SKILL.archive.md +239 -0
  125. package/skills/cm-security-gate/SKILL.md +15 -228
  126. package/skills/cm-skill-health/SKILL.archive.md +83 -0
  127. package/skills/cm-skill-health/SKILL.md +16 -73
  128. package/skills/cm-skill-index/SKILL.md +8 -0
  129. package/skills/cm-skill-mastery/SKILL.archive.md +156 -0
  130. package/skills/cm-skill-mastery/SKILL.md +16 -146
  131. package/skills/cm-skill-search/SKILL.archive.md +49 -0
  132. package/skills/cm-skill-search/SKILL.md +17 -40
  133. package/skills/cm-skill-share/SKILL.archive.md +58 -0
  134. package/skills/cm-skill-share/SKILL.md +17 -49
  135. package/skills/cm-sprint-bus/SKILL.md +9 -0
  136. package/skills/cm-start/SKILL.md +17 -0
  137. package/skills/cm-tdd/SKILL.md +19 -0
  138. package/skills/cm-terminal/SKILL.md +15 -0
  139. package/skills/cm-test-gate/SKILL.archive.md +245 -0
  140. package/skills/cm-test-gate/SKILL.md +15 -234
  141. package/skills/cm-ui-preview/SKILL.archive.md +153 -0
  142. package/skills/cm-ui-preview/SKILL.md +16 -143
  143. package/skills/cm-ux-master/cli/uxmaster/commands/mcp.py +1 -1
  144. package/skills/cm-ux-master/mcp/mcp-config.json +1 -1
  145. package/skills/cm-ux-master/mcp/server.py +2 -2
  146. package/skills/profiles/design.txt +1 -1
  147. package/skills/profiles/full.txt +0 -10
  148. package/skills/profiles/growth.txt +8 -8
  149. package/skills/profiles/knowledge.txt +1 -1
  150. package/skills/profiles/top35.json +41 -0
  151. package/adapters/antigravity.js +0 -15
  152. package/adapters/claude-code.js +0 -17
  153. package/adapters/cursor.js +0 -16
  154. package/skills/cm-ads-tracker/SKILL.md +0 -401
  155. package/skills/cm-ads-tracker/evals/evals.json +0 -55
  156. package/skills/cm-ads-tracker/references/gtm-architecture.md +0 -321
  157. package/skills/cm-ads-tracker/references/industry-events.md +0 -294
  158. package/skills/cm-ads-tracker/references/platforms-api.md +0 -238
  159. package/skills/cm-ads-tracker/templates/capi-payload.md +0 -79
  160. package/skills/cm-ads-tracker/templates/datalayer-push.js +0 -104
  161. package/skills/cm-ads-tracker/templates/gtm-variables.js +0 -56
  162. package/skills/cm-auto-publisher/SKILL.md +0 -81
  163. package/skills/cm-booking-calendar/SKILL.md +0 -521
  164. package/skills/cm-booking-calendar/references/industry-patterns.md +0 -527
  165. package/skills/cm-booking-calendar/templates/booking-form.css +0 -626
  166. package/skills/cm-booking-calendar/templates/booking-form.html +0 -477
  167. package/skills/cm-booking-calendar/templates/calendar-engine.js +0 -419
  168. package/skills/cm-booking-calendar/templates/calendar-export.js +0 -395
  169. package/skills/cm-booking-calendar/templates/reminder-config.js +0 -629
  170. package/skills/cm-content-factory/.content-factory-state.json +0 -132
  171. package/skills/cm-content-factory/.git 2/logs/refs/heads/main +0 -1
  172. package/skills/cm-content-factory/.git 2/logs/refs/remotes/origin/main +0 -1
  173. package/skills/cm-content-factory/.git 2/objects/02/fb0956734b5f8ba3f918b7defd04a89cfe0076 +0 -0
  174. package/skills/cm-content-factory/.git 2/objects/08/1e129d75dc6feac6c02037272e6bd1a04e3324 +0 -0
  175. package/skills/cm-content-factory/.git 2/objects/0c/5393416f3c5e01c9a655a802bff0dd52f76f0a +0 -0
  176. package/skills/cm-content-factory/.git 2/objects/10/0b9be46978a946a77188f68be725098a122001 +0 -0
  177. package/skills/cm-content-factory/.git 2/objects/10/cf041167fc9843610eb3d90259ef3396315fdc +0 -0
  178. package/skills/cm-content-factory/.git 2/objects/12/5e19538dd6e1338ffe74f6c4c165b00435bf48 +0 -0
  179. package/skills/cm-content-factory/.git 2/objects/16/a9b9d0088d5c1347628b45a2620b479d8ad57c +0 -0
  180. package/skills/cm-content-factory/.git 2/objects/17/8c2a9ef93c33ae4eec9d58e82321f9229843a1 +0 -0
  181. package/skills/cm-content-factory/.git 2/objects/25/397ae41d09104d763bdcac2695209d85cdea89 +0 -0
  182. package/skills/cm-content-factory/.git 2/objects/2f/a836b7947f2d458e1f639788bf4bb0983a3305 +0 -0
  183. package/skills/cm-content-factory/.git 2/objects/3a/baaaf0a1c0909c0828335791557125fba911e0 +0 -0
  184. package/skills/cm-content-factory/.git 2/objects/42/2924221b81f5ce3c4e4daac9a64a24f9b01f9a +0 -0
  185. package/skills/cm-content-factory/.git 2/objects/42/ec0ce707447dc11446a34c9995fb8533801731 +0 -0
  186. package/skills/cm-content-factory/.git 2/objects/46/e43ce92866d56ce74b1d750db307cfe6154a15 +0 -0
  187. package/skills/cm-content-factory/.git 2/objects/48/5e41b633c63f55b8277bcc59f44f67681f671a +0 -0
  188. package/skills/cm-content-factory/.git 2/objects/49/49c596a3a89fa240642acd95dd3258e261eb09 +0 -0
  189. package/skills/cm-content-factory/.git 2/objects/50/9d42d8412ef8eaf7f7e138476bac2e4d10ce60 +0 -0
  190. package/skills/cm-content-factory/.git 2/objects/55/0c8c389d981b463ef849aeb792d8be3ccb6ec8 +0 -0
  191. package/skills/cm-content-factory/.git 2/objects/5d/82d3b18410cdda3ace3677436f0cb599dbe2d2 +0 -0
  192. package/skills/cm-content-factory/.git 2/objects/60/0617c58e871a38b33bf29e282d132bb3c381ad +0 -0
  193. package/skills/cm-content-factory/.git 2/objects/6a/8369a99c687b7245c92ffaf0e0f0dab9014504 +0 -0
  194. package/skills/cm-content-factory/.git 2/objects/79/bea435d40ab531c1aaf6be0432c6a5b7aaed21 +0 -0
  195. package/skills/cm-content-factory/.git 2/objects/7e/5ebd79251c2f14e4aceb86c74b6b6daae6b500 +0 -0
  196. package/skills/cm-content-factory/.git 2/objects/81/98a822a60178d6d5023ddb3e222cddf048742e +0 -0
  197. package/skills/cm-content-factory/.git 2/objects/86/0a0e1943dfe53411d2e499a1f16f46a96ef758 +0 -0
  198. package/skills/cm-content-factory/.git 2/objects/86/971fb55fdc081fdbae52376f0f13e57a4e9b04 +0 -0
  199. package/skills/cm-content-factory/.git 2/objects/88/b89dd609a0a03f8d4fe8bfde20d5b8fc1d326d +0 -0
  200. package/skills/cm-content-factory/.git 2/objects/90/8737edb6b7809e32cc01590b4e08ba42a9d40d +0 -0
  201. package/skills/cm-content-factory/.git 2/objects/93/d5a8a9a7d4fb7f11491cb596a6880528725118 +0 -0
  202. package/skills/cm-content-factory/.git 2/objects/98/46a2ab81d0c3b3eb00ef88fc56989aa7e9f316 +0 -0
  203. package/skills/cm-content-factory/.git 2/objects/9b/d8dd1e49cf274eaf9c555f3ab39dce7af5715e +0 -0
  204. package/skills/cm-content-factory/.git 2/objects/a1/13329fb0cec96ae78b222d33a24c3b5bc7fa1f +0 -0
  205. package/skills/cm-content-factory/.git 2/objects/a9/e6effe626e8a3aea3a8fc3364b492191c6e7d0 +0 -0
  206. package/skills/cm-content-factory/.git 2/objects/ad/6de7e48d9782cca9353d1ff0aa1aab7fe1df85 +0 -0
  207. package/skills/cm-content-factory/.git 2/objects/af/54ae316f771ff692e299ffcd8bf2f06b413b59 +0 -0
  208. package/skills/cm-content-factory/.git 2/objects/b0/4cb8b0b00dad633e731c1472161419e738d674 +0 -0
  209. package/skills/cm-content-factory/.git 2/objects/b3/094abb0b9ed46419b269e4a4e36a459690e3b0 +0 -0
  210. package/skills/cm-content-factory/.git 2/objects/b9/435c5d4baac2cfc5c83009ddd27b46b60db5f1 +0 -0
  211. package/skills/cm-content-factory/.git 2/objects/ba/5da17dbaec5ec2dcfdfd126aead518d1171d5c +0 -0
  212. package/skills/cm-content-factory/.git 2/objects/c0/bf58703aa258ba5dd63083bebaec8f223d844c +0 -0
  213. package/skills/cm-content-factory/.git 2/objects/c4/701a34edf1fc1bad58ccc57bd03f9426acb59a +0 -0
  214. package/skills/cm-content-factory/.git 2/objects/c7/5ccce9a4e5cc74d9b3174550cf6d993ca43638 +0 -0
  215. package/skills/cm-content-factory/.git 2/objects/c7/710d59b5a35b0f1f0a0399386643a0bd94c929 +0 -0
  216. package/skills/cm-content-factory/.git 2/objects/d1/fe58237112e953e5fec52da22cf38e08be3df9 +0 -5
  217. package/skills/cm-content-factory/.git 2/objects/d2/2bbe9fd2f74c95bc5583e803f5e435f1e2cd86 +0 -0
  218. package/skills/cm-content-factory/.git 2/objects/d7/e72852ea2bff74581dbf247d400120086229f4 +0 -0
  219. package/skills/cm-content-factory/.git 2/objects/d8/d4c3b5553e4fd72807e1d4b49ef07d9ef3ac35 +0 -0
  220. package/skills/cm-content-factory/.git 2/objects/dc/75050c2876f6a02ae2a53a3c886f395b622977 +0 -0
  221. package/skills/cm-content-factory/.git 2/objects/ee/e8546f95acec500187c08a28a8b9ee02db0dec +0 -0
  222. package/skills/cm-content-factory/.git 2/objects/ef/263c059208b416c2146434f10cb2b9fabcba16 +0 -0
  223. package/skills/cm-content-factory/.git 2/objects/f3/ae597e84d9a59b88acd21c99bde2eaf686d785 +0 -0
  224. package/skills/cm-content-factory/.git 2/objects/f3/f6f5673c821d3d8e76fa267a9e882e7a5387ea +0 -0
  225. package/skills/cm-content-factory/.git 2/objects/f9/6e6d0ad02624dd11d5848594d056caef7a5e8b +0 -0
  226. package/skills/cm-content-factory/.git 2/objects/ff/278988fc1edf0db3abcf18de795f4cc0b4f3e1 +0 -0
  227. package/skills/cm-content-factory/.git 2/refs/heads/main +0 -1
  228. package/skills/cm-content-factory/.git 2/refs/remotes/origin/main +0 -1
  229. package/skills/cm-content-factory/.pytest_cache 2/v/cache/nodeids +0 -76
  230. package/skills/cm-content-factory/.pytest_cache 2/v/cache/stepwise +0 -1
  231. package/skills/cm-content-factory/AGENTS.md +0 -61
  232. package/skills/cm-content-factory/CLAUDE.md +0 -63
  233. package/skills/cm-content-factory/CURSOR.md +0 -43
  234. package/skills/cm-content-factory/Content Factory.zip +0 -0
  235. package/skills/cm-content-factory/SKILL.md +0 -416
  236. package/skills/cm-content-factory/cf +0 -313
  237. package/skills/cm-content-factory/config.schema.json +0 -397
  238. package/skills/cm-content-factory/dashboard/app.js +0 -556
  239. package/skills/cm-content-factory/dashboard/index.html +0 -397
  240. package/skills/cm-content-factory/dashboard/style.css +0 -1211
  241. package/skills/cm-content-factory/examples/01-real-estate.config.json +0 -146
  242. package/skills/cm-content-factory/examples/02-personal-finance.config.json +0 -146
  243. package/skills/cm-content-factory/examples/03-health-wellness.config.json +0 -147
  244. package/skills/cm-content-factory/examples/04-saas-software.config.json +0 -147
  245. package/skills/cm-content-factory/examples/05-legal-services.config.json +0 -147
  246. package/skills/cm-content-factory/examples/06-insurance.config.json +0 -146
  247. package/skills/cm-content-factory/examples/07-ecommerce-dropship.config.json +0 -146
  248. package/skills/cm-content-factory/examples/08-online-education.config.json +0 -147
  249. package/skills/cm-content-factory/examples/09-crypto-defi.config.json +0 -147
  250. package/skills/cm-content-factory/examples/10-beauty-skincare.config.json +0 -147
  251. package/skills/cm-content-factory/examples/11-home-services.config.json +0 -146
  252. package/skills/cm-content-factory/examples/12-dental-clinic.config.json +0 -147
  253. package/skills/cm-content-factory/examples/13-pet-care.config.json +0 -147
  254. package/skills/cm-content-factory/examples/14-travel-hospitality.config.json +0 -147
  255. package/skills/cm-content-factory/examples/15-ai-automation.config.json +0 -147
  256. package/skills/cm-content-factory/examples/16-wedding-events.config.json +0 -147
  257. package/skills/cm-content-factory/examples/17-fitness-coaching.config.json +0 -148
  258. package/skills/cm-content-factory/examples/18-cybersecurity.config.json +0 -147
  259. package/skills/cm-content-factory/examples/19-food-restaurant.config.json +0 -148
  260. package/skills/cm-content-factory/examples/20-solar-energy.config.json +0 -147
  261. package/skills/cm-content-factory/examples/fitness-blog.config.json +0 -116
  262. package/skills/cm-content-factory/examples/tech-blog.config.json +0 -107
  263. package/skills/cm-content-factory/extensions/EXTENSION_GUIDE.md +0 -72
  264. package/skills/cm-content-factory/extensions/hooks.py +0 -126
  265. package/skills/cm-content-factory/extensions/openclaw_adapter.py +0 -132
  266. package/skills/cm-content-factory/landing/docs/content/changelog.md +0 -36
  267. package/skills/cm-content-factory/landing/docs/content/deployment.md +0 -46
  268. package/skills/cm-content-factory/landing/docs/content/execution-flow.md +0 -67
  269. package/skills/cm-content-factory/landing/docs/content/memory-system.md +0 -38
  270. package/skills/cm-content-factory/landing/docs/content/openspace.md +0 -27
  271. package/skills/cm-content-factory/landing/docs/content/use-cases.md +0 -26
  272. package/skills/cm-content-factory/landing/docs/content/v5-intro.md +0 -28
  273. package/skills/cm-content-factory/landing/docs/index.html +0 -240
  274. package/skills/cm-content-factory/landing/index.html +0 -680
  275. package/skills/cm-content-factory/landing/script.js +0 -143
  276. package/skills/cm-content-factory/landing/style.css +0 -1216
  277. package/skills/cm-content-factory/landing/translations.js +0 -508
  278. package/skills/cm-content-factory/logs/events.jsonl +0 -11
  279. package/skills/cm-content-factory/profiles/_template.profile.json +0 -231
  280. package/skills/cm-content-factory/profiles/finance.profile.json +0 -278
  281. package/skills/cm-content-factory/profiles/legal.profile.json +0 -263
  282. package/skills/cm-content-factory/profiles/medical-research.profile.json +0 -321
  283. package/skills/cm-content-factory/profiles/technology.profile.json +0 -275
  284. package/skills/cm-content-factory/scripts/agent_dispatcher.py +0 -266
  285. package/skills/cm-content-factory/scripts/audit.py +0 -106
  286. package/skills/cm-content-factory/scripts/dashboard_server.py +0 -225
  287. package/skills/cm-content-factory/scripts/deploy.py +0 -146
  288. package/skills/cm-content-factory/scripts/extract.py +0 -132
  289. package/skills/cm-content-factory/scripts/landing_generator.py +0 -459
  290. package/skills/cm-content-factory/scripts/memory.py +0 -521
  291. package/skills/cm-content-factory/scripts/monetize.py +0 -239
  292. package/skills/cm-content-factory/scripts/pipeline.py +0 -357
  293. package/skills/cm-content-factory/scripts/plan.py +0 -163
  294. package/skills/cm-content-factory/scripts/publish.py +0 -145
  295. package/skills/cm-content-factory/scripts/research.py +0 -337
  296. package/skills/cm-content-factory/scripts/scaffold.py +0 -464
  297. package/skills/cm-content-factory/scripts/scoreboard.py +0 -336
  298. package/skills/cm-content-factory/scripts/seo.py +0 -90
  299. package/skills/cm-content-factory/scripts/state_manager.py +0 -320
  300. package/skills/cm-content-factory/scripts/token_manager.py +0 -268
  301. package/skills/cm-content-factory/scripts/validate.py +0 -221
  302. package/skills/cm-content-factory/scripts/wizard.py +0 -329
  303. package/skills/cm-content-factory/scripts/write.py +0 -93
  304. package/skills/cm-content-factory/sites/docs-site/src/assets/houston.webp +0 -0
  305. package/skills/cm-content-factory/sites/docs-site/src/content/docs/architecture.md +0 -90
  306. package/skills/cm-content-factory/sites/docs-site/src/content/docs/data-flow.md +0 -54
  307. package/skills/cm-content-factory/sites/docs-site/src/content/docs/deployment.md +0 -38
  308. package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/index.md +0 -65
  309. package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/lc-content-lifecycle.md +0 -48
  310. package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/seq-write-mode.md +0 -39
  311. package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/uj-first-batch.md +0 -42
  312. package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/wf-content-pipeline.md +0 -51
  313. package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/wf-learning-cycle.md +0 -52
  314. package/skills/cm-content-factory/sites/docs-site/src/content/docs/getting-started/configuration.md +0 -86
  315. package/skills/cm-content-factory/sites/docs-site/src/content/docs/getting-started/installation.md +0 -80
  316. package/skills/cm-content-factory/sites/docs-site/src/content/docs/getting-started/intro.md +0 -58
  317. package/skills/cm-content-factory/sites/docs-site/src/content/docs/index.md +0 -102
  318. package/skills/cm-content-factory/sites/docs-site/src/content/docs/jtbd/index.md +0 -45
  319. package/skills/cm-content-factory/sites/docs-site/src/content/docs/jtbd/optimize-seo.md +0 -29
  320. package/skills/cm-content-factory/sites/docs-site/src/content/docs/jtbd/scale-content-production.md +0 -55
  321. package/skills/cm-content-factory/sites/docs-site/src/content/docs/jtbd/standardize-quality.md +0 -29
  322. package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/buyer-cmo-huong.md +0 -41
  323. package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/buyer-content-lead-khoa.md +0 -40
  324. package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/index.md +0 -56
  325. package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/user-content-manager-lan.md +0 -46
  326. package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/user-seo-minh.md +0 -45
  327. package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/user-writer-tu.md +0 -45
  328. package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/content-pipeline.md +0 -108
  329. package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/index.md +0 -22
  330. package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/memory-system.md +0 -52
  331. package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/seo-optimization.md +0 -58
  332. package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/troubleshooting-guide.md +0 -92
  333. package/skills/cm-content-factory/sites/docs-site/src/styles/custom.css +0 -575
  334. package/skills/cm-content-factory/tests/conftest.py +0 -66
  335. package/skills/cm-content-factory/tests/test_agent_dispatcher.py +0 -125
  336. package/skills/cm-content-factory/tests/test_memory.py +0 -128
  337. package/skills/cm-content-factory/tests/test_pipeline.py +0 -107
  338. package/skills/cm-content-factory/tests/test_research.py +0 -56
  339. package/skills/cm-content-factory/tests/test_state_manager.py +0 -131
  340. package/skills/cm-content-factory/tests/test_token_manager.py +0 -110
  341. package/skills/cm-content-factory/tests/test_wizard.py +0 -121
  342. package/skills/cm-cro-methodology/SKILL.md +0 -290
  343. package/skills/cm-cro-methodology/references/COPYWRITING.md +0 -178
  344. package/skills/cm-cro-methodology/references/OBJECTIONS.md +0 -135
  345. package/skills/cm-cro-methodology/references/PERSUASION.md +0 -158
  346. package/skills/cm-cro-methodology/references/RESEARCH.md +0 -220
  347. package/skills/cm-cro-methodology/references/funnel-analysis.md +0 -365
  348. package/skills/cm-cro-methodology/references/testing-methodology.md +0 -330
  349. package/skills/cm-google-form/SKILL.md +0 -266
  350. package/skills/cm-google-form/templates/apps-script.js +0 -55
  351. package/skills/cm-google-form/templates/form-markup.html +0 -110
  352. package/skills/cm-google-form/templates/form-submit.js +0 -201
  353. package/skills/cm-google-form/templates/toast.css +0 -152
  354. package/skills/cm-growth-hacking/SKILL.md +0 -282
  355. package/skills/cm-growth-hacking/bottom-sheet-engine.md +0 -261
  356. package/skills/cm-growth-hacking/calendar-integration.md +0 -264
  357. package/skills/cm-growth-hacking/references/engagement-patterns.md +0 -346
  358. package/skills/cm-growth-hacking/templates/bottom-sheet.css +0 -528
  359. package/skills/cm-growth-hacking/templates/bottom-sheet.js +0 -269
  360. package/skills/cm-growth-hacking/templates/calendar-cta.js +0 -213
  361. package/skills/cm-growth-hacking/templates/tracking-events.js +0 -211
  362. package/skills/cm-growth-hacking/templates/trigger-manager.js +0 -254
  363. package/skills/cm-growth-hacking/tracking-events.md +0 -246
  364. package/skills/cm-growth-hacking/trigger-system.md +0 -342
  365. package/skills/cm-jtbd/SKILL.md +0 -98
  366. package/skills/cm-notebooklm/SKILL.md +0 -156
  367. package/skills/cm-notebooklm/references/command_reference.md +0 -94
  368. package/skills/cm-notebooklm/references/workflows.md +0 -60
  369. package/skills/cm-notebooklm/resources/knowledge_sources.md +0 -106
  370. package/skills/cm-notebooklm/scripts/brain-sync.sh +0 -453
  371. package/skills/cm-notebooklm/scripts/graduate_wisdom.py +0 -101
  372. package/skills/cm-readit/SKILL.md +0 -289
  373. package/skills/cm-readit/audio-player.md +0 -206
  374. package/skills/cm-readit/examples/blog-reader.js +0 -352
  375. package/skills/cm-readit/examples/voice-cro.js +0 -390
  376. package/skills/cm-readit/tts-engine.md +0 -262
  377. package/skills/cm-readit/ui-patterns.md +0 -362
  378. package/skills/cm-readit/voice-cro.md +0 -223
@@ -85,6 +85,21 @@ ERROR PATTERNS TO DETECT:
85
85
  - Warning patterns that indicate real problems
86
86
  ```
87
87
 
88
+ ### Step 4b: Compress Before Quoting
89
+
90
+ **Before pasting stdout into TaskSummary or model context:**
91
+
92
+ | Command pattern | Rule |
93
+ |-----------------|------|
94
+ | `git status` | Keep only changed entries + branch line + `(N changed)` count. Drop "use git add…" boilerplate. |
95
+ | `npm test` / `vitest` / `jest` | Keep failing tests + summary line. Drop `PASS` lines. |
96
+ | `npm run build` / `tsc` | Keep `error` / `warning` / final status. Drop incremental progress. |
97
+ | Any output | Collapse runs of ≥ 3 identical lines into `<line> … (× N)`. |
98
+
99
+ **Helper:** `src/utils/output-compress.ts` — `compressGitStatus`, `compressNpmTest`, `summarizeBuildLog`, `collapseRepeatedLines`, `compressFor(command, stdout)`.
100
+
101
+ **Anti-pattern:** Pasting full stdout (> 50 lines) into TaskSummary when only the failing portion matters. Compress first, then quote.
102
+
88
103
  ### Step 5: Stop on Error
89
104
 
90
105
  **If ANY error is detected:**
@@ -0,0 +1,245 @@
1
+ ---
2
+ name: cm-test-gate
3
+ description: Complete guide to setting up a reliable test gate for any project — covers stack detection, 4 core test files, script wiring, secret hygiene, and Cloudflare Workers/Pages patterns. Use when starting a new project, adding CI to an existing one, or when "tests pass but production breaks." Companion to cm-safe-deploy and cm-project-bootstrap.
4
+ ---
5
+
6
+ # cm-test-gate: Multi-Layer Test Gate Setup
7
+
8
+ ## Overview
9
+
10
+ A deployment process without a test gate is just shipping code and praying. The `test:gate` script is your first line of defense before deployment. A test gate MUST verify four things: frontend component safety, backend API behavior, core business logic, and i18n synchronization.
11
+
12
+ **Core assumption:** The most dangerous errors are syntax flaws, variable shadowing, or import failures that tests often skip if they only check logic.
13
+
14
+ **Violating the letter of this process is violating the spirit of quality engineering.**
15
+
16
+ ## The Protocol
17
+
18
+ When setting up a test gate for a project, follow these 5 phases in order.
19
+
20
+ ### Phase 1: Stack Detection and Environment Setup
21
+
22
+ **Goal:** Identify the framework and install the correct testing dependencies.
23
+
24
+ 1. **Detect Stack:**
25
+ - Check `package.json` for framework (React, Vue, Svelte, static HTML) and build tool (Vite, Next.js).
26
+ - Check for `wrangler.json(c)` (Cloudflare Workers/Pages).
27
+ - Check for Tailwind, PostCSS, or specific UI libraries.
28
+
29
+ 2. **Install Dependencies (Example: Vite/Vitest):**
30
+ ```bash
31
+ # Install vitest and related tools
32
+ npm install -D vitest jsdom @testing-library/react @testing-library/jest-dom
33
+ # (Adjust based on framework: e.g., @testing-library/svelte)
34
+ ```
35
+
36
+ 3. **Configure File:**
37
+ - Create `vitest.config.ts` (or `.js`):
38
+ ```typescript
39
+ import { defineConfig } from 'vitest/config'
40
+ // Import framework plugin (e.g., react(), svelte())
41
+
42
+ export default defineConfig({
43
+ test: {
44
+ environment: 'jsdom',
45
+ globals: true,
46
+ setupFiles: ['./test/setup.ts'], // Optional
47
+ },
48
+ })
49
+ ```
50
+
51
+ ### Phase 2: The 4 Core Test Files
52
+
53
+ A complete `test:gate` must cover four distinct layers. Do not combine these files.
54
+
55
+ #### Layer 1: Frontend Safety (`frontend-safety.test.ts`)
56
+ This layer prevents white screens and catastrophic syntax errors in the browser. Emphasize parsing and template rendering over logical assertions.
57
+
58
+ *Use the exact implementation from `cm-quality-gate` regarding the 4 corruption checks.*
59
+
60
+ ```typescript
61
+ import { test, expect } from 'vitest';
62
+ import fs from 'fs';
63
+ import path from 'path';
64
+
65
+ test('app.js does not contain catastrophic syntax corruption', () => {
66
+ // 1. Read the raw file
67
+ const content = fs.readFileSync(path.resolve(__dirname, '../public/static/app.js'), 'utf-8');
68
+
69
+ // 2. Syntax Validation (Check for broken template literals)
70
+ // ❌ Bug #1: Single-quote wrapping template string
71
+ expect(content).not.toMatch(/=\s*'[^']*\$\{t\(/);
72
+
73
+ // 3. Delimiter consistency
74
+ // ❌ Bug #4: Mismatched delimiters
75
+ expect(content).not.toMatch(/t\('[^']*\`/);
76
+ expect(content).not.toMatch(/t\(\`[^']*'\)/);
77
+
78
+ // 4. HTML structure integrity
79
+ // ❌ Bug #2: Spaces inside tags or broken closers
80
+ expect(content).not.toMatch(/<\s+[a-zA-Z]/); // e.g., "< div"
81
+ expect(content).not.toMatch(/<\/\s+[a-zA-Z]/); // e.g., "</ div"
82
+ expect(content).not.toMatch(/--\s+>/); // e.g., "text-- >"
83
+ });
84
+ ```
85
+
86
+ #### Layer 2: API Routes (`api-routes.test.ts`)
87
+ This layer ensures backend endpoints respond correctly and handle JSON properly.
88
+
89
+ *Example for a generic fetch wrapper or specific Next.js/Worker handler:*
90
+
91
+ ```typescript
92
+ import { test, expect } from 'vitest';
93
+
94
+ test('API mock test', async () => {
95
+ // Test your server handlers directly
96
+ // Ensure 200 OK for valid inputs and 400 for errors
97
+ expect(true).toBe(true);
98
+ });
99
+ ```
100
+
101
+ #### Layer 3: Business Logic (`business-logic.test.ts`)
102
+ This layer tests pure functions: calculations, validations, and data transformations.
103
+
104
+ ```typescript
105
+ import { test, expect } from 'vitest';
106
+
107
+ test('Calculates score correctly', () => {
108
+ // const result = calculateScore(input);
109
+ // expect(result).toBe(expected);
110
+ expect(true).toBe(true);
111
+ });
112
+ ```
113
+
114
+ #### Layer 4: i18n Synchronization (`i18n-sync.test.ts`)
115
+ This layer guarantees that language files are complete and identical in structure.
116
+
117
+ ```typescript
118
+ import { test, expect } from 'vitest';
119
+ import fs from 'fs';
120
+ import path from 'path';
121
+
122
+ test('i18n files have identical key counts', () => {
123
+ const langDir = path.resolve(__dirname, '../public/static/i18n');
124
+ const langs = ['vi.json', 'en.json', 'th.json', 'ph.json'];
125
+
126
+ const countKeys = (obj: any): number => {
127
+ let count = 0;
128
+ for (const k in obj) {
129
+ if (typeof obj[k] === 'object' && obj[k] !== null) {
130
+ count += countKeys(obj[k]);
131
+ } else {
132
+ count++;
133
+ }
134
+ }
135
+ return count;
136
+ };
137
+
138
+ let baseCount = -1;
139
+ for (const file of langs) {
140
+ if (!fs.existsSync(path.join(langDir, file))) continue;
141
+
142
+ const data = JSON.parse(fs.readFileSync(path.join(langDir, file), 'utf-8'));
143
+ const count = countKeys(data);
144
+
145
+ if (baseCount === -1) {
146
+ baseCount = count;
147
+ } else {
148
+ expect(count, `File ${file} has a different key count`).toBe(baseCount);
149
+ }
150
+ }
151
+ });
152
+ ```
153
+
154
+ #### Layer 5: Security Scan (`security-scan.test.ts`)
155
+ This layer prevents secrets from being committed to the repository. Powered by `cm-secret-shield` patterns.
156
+
157
+ ```typescript
158
+ import { test, expect } from 'vitest';
159
+ import fs from 'fs';
160
+ import { execSync } from 'child_process';
161
+
162
+ test('no secret files tracked by git', () => {
163
+ const tracked = execSync('git ls-files', { encoding: 'utf-8' });
164
+ const badFiles = ['.env', '.dev.vars', '.env.local', '.env.production'];
165
+ const found = badFiles.filter(f => tracked.split('\n').includes(f));
166
+ expect(found, `Secret files tracked: ${found.join(', ')}`).toEqual([]);
167
+ });
168
+
169
+ test('.gitignore contains required security patterns', () => {
170
+ const gitignore = fs.readFileSync('.gitignore', 'utf-8');
171
+ expect(gitignore).toContain('.env');
172
+ expect(gitignore).toContain('.dev.vars');
173
+ });
174
+
175
+ test('no hardcoded secrets in source files', () => {
176
+ const dangerousPatterns = [
177
+ /SERVICE_KEY\s*[=:]\s*['"][a-zA-Z0-9/+=]{20,}/g,
178
+ /PRIVATE_KEY\s*[=:]\s*['"][a-zA-Z0-9/+=]{20,}/g,
179
+ /-----BEGIN.*PRIVATE KEY-----/g,
180
+ ];
181
+ const srcDir = 'src';
182
+ if (!fs.existsSync(srcDir)) return;
183
+ const files = fs.readdirSync(srcDir).filter(f => f.endsWith('.ts') || f.endsWith('.js'));
184
+ for (const file of files) {
185
+ const content = fs.readFileSync(`${srcDir}/${file}`, 'utf-8');
186
+ for (const pattern of dangerousPatterns) {
187
+ expect(content, `${file} contains potential secret`).not.toMatch(pattern);
188
+ }
189
+ }
190
+ });
191
+ ```
192
+
193
+ ### Phase 3: Script Wiring
194
+
195
+ Wire these tests into `package.json` to make them easily executable by CI or other skills.
196
+
197
+ ```json
198
+ {
199
+ "scripts": {
200
+ "test": "vitest",
201
+ "test:gate": "vitest run --reporter=verbose",
202
+ "test:security": "snyk test && aikido-api-client scan-release $npm_package_name $(git rev-parse HEAD) --minimum-severity-level=HIGH",
203
+ "test:watch": "vitest watch"
204
+ }
205
+ }
206
+ ```
207
+
208
+ > **Security Gate Check:** The `test:security` script runs the Snyk dependency check and the Aikido release scan in parallel. See `cm-security-gate` for advanced SAST/IaC flags.
209
+
210
+ ### Phase 4: Secret Hygiene and Ignore Configuration
211
+
212
+ **NEVER commit `.env` or `.dev.vars`.** Ensure tests do not expose actual production secrets.
213
+
214
+ 1. **Check `.gitignore`:**
215
+ ```bash
216
+ grep -E "node_modules|\.env|\.dev\.vars" .gitignore
217
+ # Must exist, if not, add them.
218
+ ```
219
+ 2. **Define Mock Env:**
220
+ Create a `.env.test` file (this CAN be committed) with safe, mock values if needed by the test environment.
221
+
222
+ ### Phase 5: Verification
223
+
224
+ Run the test gate to prove it works before declaring the task complete.
225
+
226
+ ```bash
227
+ npm run test:gate
228
+ ```
229
+
230
+ ## Integration with Other Skills
231
+
232
+ | Skill | Relationship |
233
+ |---|---|
234
+ | `cm-safe-deploy` | `test:gate` is Gate 2 in the safe deploy pipeline. |
235
+ | `cm-project-bootstrap` | Should invoke `cm-test-gate` during Phase 7 (Infrastructure Setup). |
236
+ | `cm-safe-i18n` | Relies on the i18n tests set up in Phase 2, Layer 4. |
237
+ | `cm-secret-shield` | Layer 5 security scan uses Secret Shield patterns. |
238
+
239
+ ## Red Flags - STOP and Fix
240
+
241
+ - Setting up tests but not creating the `test:gate` run script.
242
+ - Combining all tests into one massive `app.test.js` file.
243
+ - Skipping the `frontend-safety.test.ts` layer for SPA/monolith projects.
244
+ - Using real production database credentials in the test setup.
245
+ - Ignoring test failures and proceeding anyway.
@@ -1,245 +1,26 @@
1
1
  ---
2
2
  name: cm-test-gate
3
- description: Complete guide to setting up a reliable test gate for any project — covers stack detection, 4 core test files, script wiring, secret hygiene, and Cloudflare Workers/Pages patterns. Use when starting a new project, adding CI to an existing one, or when "tests pass but production breaks." Companion to cm-safe-deploy and cm-project-bootstrap.
3
+ description: "[Deprecated] quality gate now covers tests + canary. Use `cm-quality-gate` instead."
4
+ deprecated: true
5
+ merged_into: cm-quality-gate
4
6
  ---
5
7
 
6
- # cm-test-gate: Multi-Layer Test Gate Setup
8
+ # cm-test-gate Deprecated
7
9
 
8
- ## Overview
10
+ > ⚠️ This skill is deprecated as of CodyMaster v6.0.0 and will be removed in v6.1.0.
11
+ >
12
+ > **Use `cm-quality-gate` instead.** quality gate now covers tests + canary.
13
+ >
14
+ > See [docs/migration-v2.md](../../docs/migration-v2.md) for the full mapping.
9
15
 
10
- A deployment process without a test gate is just shipping code and praying. The `test:gate` script is your first line of defense before deployment. A test gate MUST verify four things: frontend component safety, backend API behavior, core business logic, and i18n synchronization.
16
+ The original content is preserved at [SKILL.archive.md](SKILL.archive.md) for reference.
11
17
 
12
- **Core assumption:** The most dangerous errors are syntax flaws, variable shadowing, or import failures that tests often skip if they only check logic.
13
-
14
- **Violating the letter of this process is violating the spirit of quality engineering.**
15
-
16
- ## The Protocol
17
-
18
- When setting up a test gate for a project, follow these 5 phases in order.
19
-
20
- ### Phase 1: Stack Detection and Environment Setup
21
-
22
- **Goal:** Identify the framework and install the correct testing dependencies.
23
-
24
- 1. **Detect Stack:**
25
- - Check `package.json` for framework (React, Vue, Svelte, static HTML) and build tool (Vite, Next.js).
26
- - Check for `wrangler.json(c)` (Cloudflare Workers/Pages).
27
- - Check for Tailwind, PostCSS, or specific UI libraries.
28
-
29
- 2. **Install Dependencies (Example: Vite/Vitest):**
30
- ```bash
31
- # Install vitest and related tools
32
- npm install -D vitest jsdom @testing-library/react @testing-library/jest-dom
33
- # (Adjust based on framework: e.g., @testing-library/svelte)
34
- ```
35
-
36
- 3. **Configure File:**
37
- - Create `vitest.config.ts` (or `.js`):
38
- ```typescript
39
- import { defineConfig } from 'vitest/config'
40
- // Import framework plugin (e.g., react(), svelte())
41
-
42
- export default defineConfig({
43
- test: {
44
- environment: 'jsdom',
45
- globals: true,
46
- setupFiles: ['./test/setup.ts'], // Optional
47
- },
48
- })
49
- ```
50
-
51
- ### Phase 2: The 4 Core Test Files
52
-
53
- A complete `test:gate` must cover four distinct layers. Do not combine these files.
54
-
55
- #### Layer 1: Frontend Safety (`frontend-safety.test.ts`)
56
- This layer prevents white screens and catastrophic syntax errors in the browser. Emphasize parsing and template rendering over logical assertions.
57
-
58
- *Use the exact implementation from `cm-quality-gate` regarding the 4 corruption checks.*
59
-
60
- ```typescript
61
- import { test, expect } from 'vitest';
62
- import fs from 'fs';
63
- import path from 'path';
64
-
65
- test('app.js does not contain catastrophic syntax corruption', () => {
66
- // 1. Read the raw file
67
- const content = fs.readFileSync(path.resolve(__dirname, '../public/static/app.js'), 'utf-8');
68
-
69
- // 2. Syntax Validation (Check for broken template literals)
70
- // ❌ Bug #1: Single-quote wrapping template string
71
- expect(content).not.toMatch(/=\s*'[^']*\$\{t\(/);
72
-
73
- // 3. Delimiter consistency
74
- // ❌ Bug #4: Mismatched delimiters
75
- expect(content).not.toMatch(/t\('[^']*\`/);
76
- expect(content).not.toMatch(/t\(\`[^']*'\)/);
77
-
78
- // 4. HTML structure integrity
79
- // ❌ Bug #2: Spaces inside tags or broken closers
80
- expect(content).not.toMatch(/<\s+[a-zA-Z]/); // e.g., "< div"
81
- expect(content).not.toMatch(/<\/\s+[a-zA-Z]/); // e.g., "</ div"
82
- expect(content).not.toMatch(/--\s+>/); // e.g., "text-- >"
83
- });
84
- ```
85
-
86
- #### Layer 2: API Routes (`api-routes.test.ts`)
87
- This layer ensures backend endpoints respond correctly and handle JSON properly.
88
-
89
- *Example for a generic fetch wrapper or specific Next.js/Worker handler:*
90
-
91
- ```typescript
92
- import { test, expect } from 'vitest';
93
-
94
- test('API mock test', async () => {
95
- // Test your server handlers directly
96
- // Ensure 200 OK for valid inputs and 400 for errors
97
- expect(true).toBe(true);
98
- });
99
- ```
100
-
101
- #### Layer 3: Business Logic (`business-logic.test.ts`)
102
- This layer tests pure functions: calculations, validations, and data transformations.
103
-
104
- ```typescript
105
- import { test, expect } from 'vitest';
106
-
107
- test('Calculates score correctly', () => {
108
- // const result = calculateScore(input);
109
- // expect(result).toBe(expected);
110
- expect(true).toBe(true);
111
- });
112
- ```
113
-
114
- #### Layer 4: i18n Synchronization (`i18n-sync.test.ts`)
115
- This layer guarantees that language files are complete and identical in structure.
116
-
117
- ```typescript
118
- import { test, expect } from 'vitest';
119
- import fs from 'fs';
120
- import path from 'path';
121
-
122
- test('i18n files have identical key counts', () => {
123
- const langDir = path.resolve(__dirname, '../public/static/i18n');
124
- const langs = ['vi.json', 'en.json', 'th.json', 'ph.json'];
125
-
126
- const countKeys = (obj: any): number => {
127
- let count = 0;
128
- for (const k in obj) {
129
- if (typeof obj[k] === 'object' && obj[k] !== null) {
130
- count += countKeys(obj[k]);
131
- } else {
132
- count++;
133
- }
134
- }
135
- return count;
136
- };
137
-
138
- let baseCount = -1;
139
- for (const file of langs) {
140
- if (!fs.existsSync(path.join(langDir, file))) continue;
141
-
142
- const data = JSON.parse(fs.readFileSync(path.join(langDir, file), 'utf-8'));
143
- const count = countKeys(data);
144
-
145
- if (baseCount === -1) {
146
- baseCount = count;
147
- } else {
148
- expect(count, `File ${file} has a different key count`).toBe(baseCount);
149
- }
150
- }
151
- });
152
- ```
153
-
154
- #### Layer 5: Security Scan (`security-scan.test.ts`)
155
- This layer prevents secrets from being committed to the repository. Powered by `cm-secret-shield` patterns.
156
-
157
- ```typescript
158
- import { test, expect } from 'vitest';
159
- import fs from 'fs';
160
- import { execSync } from 'child_process';
161
-
162
- test('no secret files tracked by git', () => {
163
- const tracked = execSync('git ls-files', { encoding: 'utf-8' });
164
- const badFiles = ['.env', '.dev.vars', '.env.local', '.env.production'];
165
- const found = badFiles.filter(f => tracked.split('\n').includes(f));
166
- expect(found, `Secret files tracked: ${found.join(', ')}`).toEqual([]);
167
- });
168
-
169
- test('.gitignore contains required security patterns', () => {
170
- const gitignore = fs.readFileSync('.gitignore', 'utf-8');
171
- expect(gitignore).toContain('.env');
172
- expect(gitignore).toContain('.dev.vars');
173
- });
174
-
175
- test('no hardcoded secrets in source files', () => {
176
- const dangerousPatterns = [
177
- /SERVICE_KEY\s*[=:]\s*['"][a-zA-Z0-9/+=]{20,}/g,
178
- /PRIVATE_KEY\s*[=:]\s*['"][a-zA-Z0-9/+=]{20,}/g,
179
- /-----BEGIN.*PRIVATE KEY-----/g,
180
- ];
181
- const srcDir = 'src';
182
- if (!fs.existsSync(srcDir)) return;
183
- const files = fs.readdirSync(srcDir).filter(f => f.endsWith('.ts') || f.endsWith('.js'));
184
- for (const file of files) {
185
- const content = fs.readFileSync(`${srcDir}/${file}`, 'utf-8');
186
- for (const pattern of dangerousPatterns) {
187
- expect(content, `${file} contains potential secret`).not.toMatch(pattern);
188
- }
189
- }
190
- });
191
- ```
192
-
193
- ### Phase 3: Script Wiring
194
-
195
- Wire these tests into `package.json` to make them easily executable by CI or other skills.
196
-
197
- ```json
198
- {
199
- "scripts": {
200
- "test": "vitest",
201
- "test:gate": "vitest run --reporter=verbose",
202
- "test:security": "snyk test && aikido-api-client scan-release $npm_package_name $(git rev-parse HEAD) --minimum-severity-level=HIGH",
203
- "test:watch": "vitest watch"
204
- }
205
- }
206
- ```
207
-
208
- > **Security Gate Check:** The `test:security` script runs the Snyk dependency check and the Aikido release scan in parallel. See `cm-security-gate` for advanced SAST/IaC flags.
209
-
210
- ### Phase 4: Secret Hygiene and Ignore Configuration
211
-
212
- **NEVER commit `.env` or `.dev.vars`.** Ensure tests do not expose actual production secrets.
213
-
214
- 1. **Check `.gitignore`:**
215
- ```bash
216
- grep -E "node_modules|\.env|\.dev\.vars" .gitignore
217
- # Must exist, if not, add them.
218
- ```
219
- 2. **Define Mock Env:**
220
- Create a `.env.test` file (this CAN be committed) with safe, mock values if needed by the test environment.
221
-
222
- ### Phase 5: Verification
223
-
224
- Run the test gate to prove it works before declaring the task complete.
18
+ ## Migration
225
19
 
226
20
  ```bash
227
- npm run test:gate
21
+ # Old: cm <use this skill>
22
+ # New (v6.0+): cm quality-gate <equivalent action>
228
23
  ```
229
24
 
230
- ## Integration with Other Skills
231
-
232
- | Skill | Relationship |
233
- |---|---|
234
- | `cm-safe-deploy` | `test:gate` is Gate 2 in the safe deploy pipeline. |
235
- | `cm-project-bootstrap` | Should invoke `cm-test-gate` during Phase 7 (Infrastructure Setup). |
236
- | `cm-safe-i18n` | Relies on the i18n tests set up in Phase 2, Layer 4. |
237
- | `cm-secret-shield` | Layer 5 security scan uses Secret Shield patterns. |
238
-
239
- ## Red Flags - STOP and Fix
240
-
241
- - Setting up tests but not creating the `test:gate` run script.
242
- - Combining all tests into one massive `app.test.js` file.
243
- - Skipping the `frontend-safety.test.ts` layer for SPA/monolith projects.
244
- - Using real production database credentials in the test setup.
245
- - Ignoring test failures and proceeding anyway.
25
+ If you depend on a capability that didn't carry over, please file an issue:
26
+ https://github.com/tody-agent/codymaster/issues
@@ -0,0 +1,153 @@
1
+ ---
2
+ name: cm-ui-preview
3
+ description: "Master Design Skill. Orchestrates AI-powered UI generation using Google Stitch MCP, guided by cm-ux-master intelligence and professional prompt enhancement pipelines. Implements the 'Stitch Build Loop', 'Prompt Optimization Structure', and strict design system adherence to generate production-ready UI previews before coding."
4
+ ---
5
+
6
+ # UI Preview — The Master Design Orchestrator
7
+
8
+ > **See it before you build it.**
9
+ > This skill transforms vague user requests into precise, structured 'Construction Blueprints' for the Google Stitch AI generator, ensuring UI outputs are professional, consistent with project branding, and ergonomically sound.
10
+
11
+ ## When to Use
12
+
13
+ **ALWAYS trigger when the task involves building, redesigning, or modifying UI:**
14
+ - Creating new pages, screens, or layouts
15
+ - Building components (forms, cards, dashboards)
16
+ - Restyling or beautifying existing UIs
17
+ - Translating a wireframe or concept into high-fidelity UI
18
+
19
+ **Trigger keywords:** build UI, design page, create screen, landing page, dashboard layout, UI designer, use stitch, stitch me a ui, redesign, restyle
20
+
21
+ ## Architecture & Workflow (End-to-End)
22
+
23
+ This skill operates as a pipeline. **Do not skip steps.**
24
+
25
+ ```
26
+ ┌─────────────────────────────────────────────────────────┐
27
+ │ cm-ui-preview Master Workflow │
28
+ ├─────────────────────────────────────────────────────────┤
29
+ │ │
30
+ │ Step 1: PREFLIGHT & INTENT │
31
+ │ ├── Detect task: New UI vs. Refine/Beautify │
32
+ │ └── Verify Stitch MCP tools availability │
33
+ │ │
34
+ │ Step 2: DESIGN SYSTEM EXTRACTION (The Source of Truth) │
35
+ │ ├── Check: .stitch/DESIGN.md, css tokens, etc. │
36
+ │ └── Fallback: Trigger `cm-ux-master` to generate one │
37
+ │ │
38
+ │ Step 3: PROMPT ENHANCEMENT (The Build Blueprint) │
39
+ │ ├── Project Overview (What, who, style vibe) │
40
+ │ ├── Design System Specs (Colors, Typography, Layout) │
41
+ │ └── Page Structure (Core function + Specific areas) │
42
+ │ │
43
+ │ Step 4: STITCH EXECUTION (The Build Loop) │
44
+ │ ├── create_project() │
45
+ │ ├── generate_screen_from_text() │
46
+ │ ├── Present link + AI insights to user │
47
+ │ └── User Decision: Confirm / Edit / Skip │
48
+ │ │
49
+ │ Step 5: FINALIZATION & BATON PASS │
50
+ │ ├── Save state to .stitch/next-prompt.md │
51
+ │ └── Hand off to cm-execution for actual coding │
52
+ │ │
53
+ └─────────────────────────────────────────────────────────┘
54
+ ```
55
+
56
+ ## Step 1: Preflight & Intent Classification
57
+
58
+ 1. **Verify Stitch MCP:** Check if `create_project` and `generate_screen_from_text` are available. If not, inform the user they are missing the Stitch tools but proceed with Prompt-Only generation (output the blueprint for them to use manually).
59
+ 2. **Classify Intent:**
60
+ - **New Screen:** Proceed with full generation.
61
+ - **Refine/Beautify (edit):** Use `edit_screens()` on existing IDs instead of `generate_screen_from_text()`.
62
+
63
+ ## Step 2: Design System Extraction (Source of Truth)
64
+
65
+ Before assembly, you MUST establish the design constraints.
66
+
67
+ **Look for:**
68
+ - `.stitch/DESIGN.md` (Primary source for Stitch)
69
+ - `design-system/MASTER.md` (From `cm-ux-master`)
70
+ - `.cm/design-tokens.css` or Tailwind configs
71
+
72
+ **If no design system exists:**
73
+ *Suggest running `cm-ux-master` or create a `.stitch/DESIGN.md` baseline.*
74
+ A baseline MUST contain:
75
+ - Platform (Web/Mobile)
76
+ - Primary/Secondary Colors (with hex codes)
77
+ - Typography (Font families)
78
+ - Component constraints (Rounded vs Sharp, Shadow levels)
79
+
80
+ ## Step 3: Prompt Enhancement Pipeline (CRITICAL)
81
+
82
+ **DO NOT send vague prompts to Stitch (e.g., "Make a login page").**
83
+ You must assemble an "Optimized Prompt Structure" — a detailed construction blueprint.
84
+
85
+ Structure your prompt exactly like this:
86
+
87
+ ```markdown
88
+ [Overall vibe, mood, and purpose of the page: e.g., "A modern fintech dashboard for B2B users. Professional, trustworthy, high data density, light mode."]
89
+
90
+ **DESIGN SYSTEM (REQUIRED):**
91
+ - Platform: Web Desktop-first
92
+ - Palette: Primary Blue (#0F62FE), Secondary Gray (#F4F4F4), Danger Red (#DA1E28)
93
+ - Typography: Inter for UI, Roboto Mono for numbers
94
+ - Styles: 4px border radius, subtle drop shadows on cards
95
+
96
+ **PAGE STRUCTURE & FUNCTION:**
97
+ ### 1. Dashboard Home
98
+ **Core function**: Overview of recent transactions and account health.
99
+ - **Top Nav**: Brand logo, Global Search input, User Avatar dropdown.
100
+ - **Hero/Header**: Greeting "Welcome back, {User}", Total Balance callout (Large bold text).
101
+ - **Main Function Area**:
102
+ - Left col: Line chart showing 30-day revenue.
103
+ - Right col: Vertical list of "Recent Transactions" (Icon, Title, Date, Amount (Green/Red)).
104
+ - **Action Area**: Primary CTA "Send Money" (Blue fill, large), Secondary "Download Statement" (Outline).
105
+ ```
106
+
107
+ *Refine UI terminology:* Replace "nice buttons" with "Primary CTA", replace "boxes" with "Cards". Apply relevant constraints from `cm-ux-master` (e.g., Miller's Law for chunking lists).
108
+
109
+ ## Step 4: Stitch Execution (The Build Loop)
110
+
111
+ 1. **Project Creation:**
112
+ ```javascript
113
+ mcp_StitchMCP_create_project({ title: "UI Preview — {Feature}" })
114
+ ```
115
+ 2. **Screen Generation:**
116
+ ```javascript
117
+ mcp_StitchMCP_generate_screen_from_text({
118
+ projectId: "<id>",
119
+ prompt: "<Your Optimized Prompt Blueprint>",
120
+ deviceType: "DESKTOP" // or MOBILE
121
+ })
122
+ ```
123
+ 3. **User Presentation:**
124
+ Show the output, provide the URL, and present the **AI Insights** (from the tool's `outputComponents` response).
125
+
126
+ ```markdown
127
+ 🎨 **UI Preview Generated!**
128
+
129
+ - **Stitch Project ID:** `<id>`
130
+ - **View & Edit:** [Open in Google Stitch](https://stitch.withgoogle.com/projects/<id>)
131
+ - **AI Insights:** [Any suggestions or notes returned by Stitch]
132
+
133
+ What's next?
134
+ 1. ✅ **Confirm** — I will write the code matching this design exactly.
135
+ 2. ✏️ **Edit** — Tell me what to change, I'll update the preview.
136
+ 3. ⏭️ **Skip** — Proceed straight to coding.
137
+ ```
138
+
139
+ ## Step 5: Finalization & Baton Pass
140
+
141
+ - **If Confirm:** Proceed to code implementation. You MUST follow the visual layout, spacing, and colors shown in the Stitch preview.
142
+ - **If Edit:** Call `mcp_StitchMCP_edit_screens()` with the specific element changes.
143
+ - **Baton Update (Optional but Recommended):** Maintain a `.stitch/next-prompt.md` to feed into the next agent task or session for continuity.
144
+
145
+ ## Anti-Patterns (Strict Prohibitions)
146
+
147
+ - ⛔ **NO VAGUE PROMPTS:** Never pass user input straight to Stitch without the Step 3 Enhancement Pipeline.
148
+ - ⛔ **NO FAKE SUCCESS:** If the MCP tool fails or isn't connected, do not hallucinate a success message or URL.
149
+ - ⛔ **NO CODING (Yet):** This phase is purely for DESIGN PREVIEW. Do not write React/Vue code until the user clicks "Confirm" or "Skip".
150
+ - ⛔ **NO APP SCAFFOLDING:** Do not initialize project codebases in this workflow.
151
+
152
+ ## Future: Pencil.dev Support
153
+ *Pencil MCP tools are available and will be integrated as an alternative execution engine in future updates (`batch_design`, `get_editor_state`).*