codymaster 5.2.0 → 7.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (380) hide show
  1. package/CHANGELOG.md +276 -0
  2. package/README.md +216 -333
  3. package/dist/agent/antigravity.js +152 -0
  4. package/dist/agent/backend.js +2 -0
  5. package/dist/agent/claude.js +196 -0
  6. package/dist/agent/codex.js +204 -0
  7. package/dist/agent/copilot.js +284 -0
  8. package/dist/agent/cursor.js +211 -0
  9. package/dist/agent/factory.js +30 -0
  10. package/dist/agent/gemini.js +142 -0
  11. package/dist/agent/opencode.js +205 -0
  12. package/dist/agent/spawn-helper.js +237 -0
  13. package/dist/agent/version.js +25 -0
  14. package/dist/browse/adapter-factory.js +69 -0
  15. package/dist/browse/adapters/agent-browser-adapter.js +305 -0
  16. package/dist/browse/adapters/playwright-adapter.js +309 -0
  17. package/dist/browse/adapters/types.js +6 -0
  18. package/dist/browse/error-collector.js +132 -0
  19. package/dist/browse/event-log.js +109 -0
  20. package/dist/browse/index.js +17 -0
  21. package/dist/browse-server.js +204 -120
  22. package/dist/cli/command-registry.js +12 -0
  23. package/dist/cli/commands/dashboard.js +76 -2
  24. package/dist/cli/commands/engineering.js +218 -4
  25. package/dist/cli/commands/install.js +160 -0
  26. package/dist/cli/commands/learn.js +181 -0
  27. package/dist/cli/commands/parallel.js +138 -0
  28. package/dist/cli/commands/quality.js +105 -0
  29. package/dist/cli/commands/stack.js +49 -0
  30. package/dist/cli/commands/update.js +159 -0
  31. package/dist/cli/update-check.js +94 -10
  32. package/dist/continuity.js +3 -1
  33. package/dist/dashboard.js +47 -6
  34. package/dist/data.js +35 -0
  35. package/dist/execution/tdd-gate.js +113 -0
  36. package/dist/executor/cancel.js +34 -0
  37. package/dist/executor/gc.js +74 -0
  38. package/dist/executor/index.js +14 -0
  39. package/dist/executor/runner.js +70 -0
  40. package/dist/executor/workdir.js +31 -0
  41. package/dist/handoff/contracts.js +22 -0
  42. package/dist/handoff/index.js +18 -0
  43. package/dist/handoff/io.js +121 -0
  44. package/dist/index.js +7 -3
  45. package/dist/indexer/stack-detect.js +219 -0
  46. package/dist/install/copy.js +98 -0
  47. package/dist/install/engine.js +42 -0
  48. package/dist/install/paths.js +70 -0
  49. package/dist/install/platforms/_simple.js +85 -0
  50. package/dist/install/platforms/antigravity.js +91 -0
  51. package/dist/install/platforms/claude-code.js +107 -0
  52. package/dist/install/platforms/cursor.js +77 -0
  53. package/dist/install/platforms/index.js +27 -0
  54. package/dist/install/platforms/simple.js +163 -0
  55. package/dist/install/profiles.js +75 -0
  56. package/dist/install/types.js +2 -0
  57. package/dist/learnings.js +208 -0
  58. package/dist/mcp-context-server.js +1 -1
  59. package/dist/middleware/metrics.js +30 -0
  60. package/dist/middleware/security-headers.js +14 -0
  61. package/dist/realtime/event-bus.js +29 -0
  62. package/dist/realtime/ws-hub.js +91 -0
  63. package/dist/schemas/task-schema.js +48 -0
  64. package/dist/schemas/validate.js +18 -0
  65. package/dist/skills-lock.js +96 -0
  66. package/dist/sprint-pipeline.js +26 -0
  67. package/dist/storage/index.js +21 -0
  68. package/dist/storage/repos/activity-repo.js +46 -0
  69. package/dist/storage/repos/message-repo.js +39 -0
  70. package/dist/storage/repos/project-repo.js +56 -0
  71. package/dist/storage/repos/task-repo.js +142 -0
  72. package/dist/storage/services/project-service.js +49 -0
  73. package/dist/storage/services/task-service.js +97 -0
  74. package/dist/storage/sqlite.js +113 -0
  75. package/dist/tier-classify.js +131 -0
  76. package/dist/ui/onboarding.js +51 -15
  77. package/dist/utils/cli-utils.js +7 -2
  78. package/dist/utils/design-taste.js +108 -0
  79. package/dist/utils/output-compress.js +143 -0
  80. package/dist/vibecoding-index.js +126 -0
  81. package/package.json +27 -4
  82. package/public/dashboard/app.js +52 -1
  83. package/scripts/build-skills-lock.mjs +88 -0
  84. package/scripts/build-skills.mjs +187 -28
  85. package/scripts/compress-skill.mjs +73 -0
  86. package/scripts/deprecate-skill.mjs +72 -0
  87. package/scripts/install.sh +170 -0
  88. package/scripts/mcp-bridge.js +2 -2
  89. package/scripts/postinstall.js +54 -287
  90. package/scripts/release.sh +126 -0
  91. package/scripts/update-changelog.sh +88 -0
  92. package/scripts/validate-skills.mjs +101 -4
  93. package/skills/_shared/SKILL_TEMPLATE.md +62 -0
  94. package/skills/cm-autopilot/scripts/autopilot.py +19 -2
  95. package/skills/cm-brainstorm-idea/SKILL.md +9 -0
  96. package/skills/cm-clean-code/SKILL.md +20 -0
  97. package/skills/cm-code-review/SKILL.md +21 -0
  98. package/skills/cm-codeintell/SKILL.md +9 -0
  99. package/skills/cm-conductor-worktrees/SKILL.archive.md +28 -0
  100. package/skills/cm-conductor-worktrees/SKILL.md +17 -19
  101. package/skills/cm-continuity/SKILL.md +9 -0
  102. package/skills/cm-dashboard/SKILL.archive.md +15 -0
  103. package/skills/cm-dashboard/SKILL.md +20 -9
  104. package/skills/cm-dashboard/ui/app.js +9 -1
  105. package/skills/cm-debugging/SKILL.md +9 -0
  106. package/skills/cm-design-studio/SKILL.archive.md +34 -0
  107. package/skills/cm-design-studio/SKILL.md +17 -25
  108. package/skills/cm-design-system/SKILL.md +1 -0
  109. package/skills/cm-engineering-meta/SKILL.archive.md +73 -0
  110. package/skills/cm-engineering-meta/SKILL.md +16 -63
  111. package/skills/cm-execution/SKILL.md +98 -0
  112. package/skills/cm-git-worktrees/SKILL.archive.md +157 -0
  113. package/skills/cm-git-worktrees/SKILL.md +15 -146
  114. package/skills/cm-identity-guard/SKILL.md +8 -0
  115. package/skills/cm-planning/SKILL.md +63 -92
  116. package/skills/cm-post-deploy-canary/SKILL.archive.md +22 -0
  117. package/skills/cm-post-deploy-canary/SKILL.md +17 -13
  118. package/skills/cm-qa-visual-cli/SKILL.archive.md +22 -0
  119. package/skills/cm-qa-visual-cli/SKILL.md +16 -12
  120. package/skills/cm-quality-gate/SKILL.md +38 -0
  121. package/skills/cm-safe-deploy/SKILL.md +9 -0
  122. package/skills/cm-second-opinion-cli/SKILL.archive.md +23 -0
  123. package/skills/cm-second-opinion-cli/SKILL.md +17 -14
  124. package/skills/cm-secret-shield/SKILL.archive.md +580 -0
  125. package/skills/cm-secret-shield/SKILL.md +15 -569
  126. package/skills/cm-security-gate/SKILL.archive.md +239 -0
  127. package/skills/cm-security-gate/SKILL.md +15 -228
  128. package/skills/cm-skill-health/SKILL.archive.md +83 -0
  129. package/skills/cm-skill-health/SKILL.md +16 -73
  130. package/skills/cm-skill-index/SKILL.md +8 -0
  131. package/skills/cm-skill-mastery/SKILL.archive.md +156 -0
  132. package/skills/cm-skill-mastery/SKILL.md +16 -146
  133. package/skills/cm-skill-search/SKILL.archive.md +49 -0
  134. package/skills/cm-skill-search/SKILL.md +17 -40
  135. package/skills/cm-skill-share/SKILL.archive.md +58 -0
  136. package/skills/cm-skill-share/SKILL.md +17 -49
  137. package/skills/cm-sprint-bus/SKILL.md +9 -0
  138. package/skills/cm-start/SKILL.md +17 -0
  139. package/skills/cm-tdd/SKILL.md +19 -0
  140. package/skills/cm-terminal/SKILL.md +15 -0
  141. package/skills/cm-test-gate/SKILL.archive.md +245 -0
  142. package/skills/cm-test-gate/SKILL.md +15 -234
  143. package/skills/cm-ui-preview/SKILL.archive.md +153 -0
  144. package/skills/cm-ui-preview/SKILL.md +16 -143
  145. package/skills/cm-ux-master/cli/uxmaster/commands/mcp.py +1 -1
  146. package/skills/cm-ux-master/mcp/mcp-config.json +1 -1
  147. package/skills/cm-ux-master/mcp/server.py +2 -2
  148. package/skills/profiles/design.txt +1 -1
  149. package/skills/profiles/full.txt +0 -10
  150. package/skills/profiles/growth.txt +8 -8
  151. package/skills/profiles/knowledge.txt +1 -1
  152. package/skills/profiles/top35.json +41 -0
  153. package/adapters/antigravity.js +0 -15
  154. package/adapters/claude-code.js +0 -17
  155. package/adapters/cursor.js +0 -16
  156. package/skills/cm-ads-tracker/SKILL.md +0 -401
  157. package/skills/cm-ads-tracker/evals/evals.json +0 -55
  158. package/skills/cm-ads-tracker/references/gtm-architecture.md +0 -321
  159. package/skills/cm-ads-tracker/references/industry-events.md +0 -294
  160. package/skills/cm-ads-tracker/references/platforms-api.md +0 -238
  161. package/skills/cm-ads-tracker/templates/capi-payload.md +0 -79
  162. package/skills/cm-ads-tracker/templates/datalayer-push.js +0 -104
  163. package/skills/cm-ads-tracker/templates/gtm-variables.js +0 -56
  164. package/skills/cm-auto-publisher/SKILL.md +0 -81
  165. package/skills/cm-booking-calendar/SKILL.md +0 -521
  166. package/skills/cm-booking-calendar/references/industry-patterns.md +0 -527
  167. package/skills/cm-booking-calendar/templates/booking-form.css +0 -626
  168. package/skills/cm-booking-calendar/templates/booking-form.html +0 -477
  169. package/skills/cm-booking-calendar/templates/calendar-engine.js +0 -419
  170. package/skills/cm-booking-calendar/templates/calendar-export.js +0 -395
  171. package/skills/cm-booking-calendar/templates/reminder-config.js +0 -629
  172. package/skills/cm-content-factory/.content-factory-state.json +0 -132
  173. package/skills/cm-content-factory/.git 2/logs/refs/heads/main +0 -1
  174. package/skills/cm-content-factory/.git 2/logs/refs/remotes/origin/main +0 -1
  175. package/skills/cm-content-factory/.git 2/objects/02/fb0956734b5f8ba3f918b7defd04a89cfe0076 +0 -0
  176. package/skills/cm-content-factory/.git 2/objects/08/1e129d75dc6feac6c02037272e6bd1a04e3324 +0 -0
  177. package/skills/cm-content-factory/.git 2/objects/0c/5393416f3c5e01c9a655a802bff0dd52f76f0a +0 -0
  178. package/skills/cm-content-factory/.git 2/objects/10/0b9be46978a946a77188f68be725098a122001 +0 -0
  179. package/skills/cm-content-factory/.git 2/objects/10/cf041167fc9843610eb3d90259ef3396315fdc +0 -0
  180. package/skills/cm-content-factory/.git 2/objects/12/5e19538dd6e1338ffe74f6c4c165b00435bf48 +0 -0
  181. package/skills/cm-content-factory/.git 2/objects/16/a9b9d0088d5c1347628b45a2620b479d8ad57c +0 -0
  182. package/skills/cm-content-factory/.git 2/objects/17/8c2a9ef93c33ae4eec9d58e82321f9229843a1 +0 -0
  183. package/skills/cm-content-factory/.git 2/objects/25/397ae41d09104d763bdcac2695209d85cdea89 +0 -0
  184. package/skills/cm-content-factory/.git 2/objects/2f/a836b7947f2d458e1f639788bf4bb0983a3305 +0 -0
  185. package/skills/cm-content-factory/.git 2/objects/3a/baaaf0a1c0909c0828335791557125fba911e0 +0 -0
  186. package/skills/cm-content-factory/.git 2/objects/42/2924221b81f5ce3c4e4daac9a64a24f9b01f9a +0 -0
  187. package/skills/cm-content-factory/.git 2/objects/42/ec0ce707447dc11446a34c9995fb8533801731 +0 -0
  188. package/skills/cm-content-factory/.git 2/objects/46/e43ce92866d56ce74b1d750db307cfe6154a15 +0 -0
  189. package/skills/cm-content-factory/.git 2/objects/48/5e41b633c63f55b8277bcc59f44f67681f671a +0 -0
  190. package/skills/cm-content-factory/.git 2/objects/49/49c596a3a89fa240642acd95dd3258e261eb09 +0 -0
  191. package/skills/cm-content-factory/.git 2/objects/50/9d42d8412ef8eaf7f7e138476bac2e4d10ce60 +0 -0
  192. package/skills/cm-content-factory/.git 2/objects/55/0c8c389d981b463ef849aeb792d8be3ccb6ec8 +0 -0
  193. package/skills/cm-content-factory/.git 2/objects/5d/82d3b18410cdda3ace3677436f0cb599dbe2d2 +0 -0
  194. package/skills/cm-content-factory/.git 2/objects/60/0617c58e871a38b33bf29e282d132bb3c381ad +0 -0
  195. package/skills/cm-content-factory/.git 2/objects/6a/8369a99c687b7245c92ffaf0e0f0dab9014504 +0 -0
  196. package/skills/cm-content-factory/.git 2/objects/79/bea435d40ab531c1aaf6be0432c6a5b7aaed21 +0 -0
  197. package/skills/cm-content-factory/.git 2/objects/7e/5ebd79251c2f14e4aceb86c74b6b6daae6b500 +0 -0
  198. package/skills/cm-content-factory/.git 2/objects/81/98a822a60178d6d5023ddb3e222cddf048742e +0 -0
  199. package/skills/cm-content-factory/.git 2/objects/86/0a0e1943dfe53411d2e499a1f16f46a96ef758 +0 -0
  200. package/skills/cm-content-factory/.git 2/objects/86/971fb55fdc081fdbae52376f0f13e57a4e9b04 +0 -0
  201. package/skills/cm-content-factory/.git 2/objects/88/b89dd609a0a03f8d4fe8bfde20d5b8fc1d326d +0 -0
  202. package/skills/cm-content-factory/.git 2/objects/90/8737edb6b7809e32cc01590b4e08ba42a9d40d +0 -0
  203. package/skills/cm-content-factory/.git 2/objects/93/d5a8a9a7d4fb7f11491cb596a6880528725118 +0 -0
  204. package/skills/cm-content-factory/.git 2/objects/98/46a2ab81d0c3b3eb00ef88fc56989aa7e9f316 +0 -0
  205. package/skills/cm-content-factory/.git 2/objects/9b/d8dd1e49cf274eaf9c555f3ab39dce7af5715e +0 -0
  206. package/skills/cm-content-factory/.git 2/objects/a1/13329fb0cec96ae78b222d33a24c3b5bc7fa1f +0 -0
  207. package/skills/cm-content-factory/.git 2/objects/a9/e6effe626e8a3aea3a8fc3364b492191c6e7d0 +0 -0
  208. package/skills/cm-content-factory/.git 2/objects/ad/6de7e48d9782cca9353d1ff0aa1aab7fe1df85 +0 -0
  209. package/skills/cm-content-factory/.git 2/objects/af/54ae316f771ff692e299ffcd8bf2f06b413b59 +0 -0
  210. package/skills/cm-content-factory/.git 2/objects/b0/4cb8b0b00dad633e731c1472161419e738d674 +0 -0
  211. package/skills/cm-content-factory/.git 2/objects/b3/094abb0b9ed46419b269e4a4e36a459690e3b0 +0 -0
  212. package/skills/cm-content-factory/.git 2/objects/b9/435c5d4baac2cfc5c83009ddd27b46b60db5f1 +0 -0
  213. package/skills/cm-content-factory/.git 2/objects/ba/5da17dbaec5ec2dcfdfd126aead518d1171d5c +0 -0
  214. package/skills/cm-content-factory/.git 2/objects/c0/bf58703aa258ba5dd63083bebaec8f223d844c +0 -0
  215. package/skills/cm-content-factory/.git 2/objects/c4/701a34edf1fc1bad58ccc57bd03f9426acb59a +0 -0
  216. package/skills/cm-content-factory/.git 2/objects/c7/5ccce9a4e5cc74d9b3174550cf6d993ca43638 +0 -0
  217. package/skills/cm-content-factory/.git 2/objects/c7/710d59b5a35b0f1f0a0399386643a0bd94c929 +0 -0
  218. package/skills/cm-content-factory/.git 2/objects/d1/fe58237112e953e5fec52da22cf38e08be3df9 +0 -5
  219. package/skills/cm-content-factory/.git 2/objects/d2/2bbe9fd2f74c95bc5583e803f5e435f1e2cd86 +0 -0
  220. package/skills/cm-content-factory/.git 2/objects/d7/e72852ea2bff74581dbf247d400120086229f4 +0 -0
  221. package/skills/cm-content-factory/.git 2/objects/d8/d4c3b5553e4fd72807e1d4b49ef07d9ef3ac35 +0 -0
  222. package/skills/cm-content-factory/.git 2/objects/dc/75050c2876f6a02ae2a53a3c886f395b622977 +0 -0
  223. package/skills/cm-content-factory/.git 2/objects/ee/e8546f95acec500187c08a28a8b9ee02db0dec +0 -0
  224. package/skills/cm-content-factory/.git 2/objects/ef/263c059208b416c2146434f10cb2b9fabcba16 +0 -0
  225. package/skills/cm-content-factory/.git 2/objects/f3/ae597e84d9a59b88acd21c99bde2eaf686d785 +0 -0
  226. package/skills/cm-content-factory/.git 2/objects/f3/f6f5673c821d3d8e76fa267a9e882e7a5387ea +0 -0
  227. package/skills/cm-content-factory/.git 2/objects/f9/6e6d0ad02624dd11d5848594d056caef7a5e8b +0 -0
  228. package/skills/cm-content-factory/.git 2/objects/ff/278988fc1edf0db3abcf18de795f4cc0b4f3e1 +0 -0
  229. package/skills/cm-content-factory/.git 2/refs/heads/main +0 -1
  230. package/skills/cm-content-factory/.git 2/refs/remotes/origin/main +0 -1
  231. package/skills/cm-content-factory/.pytest_cache 2/v/cache/nodeids +0 -76
  232. package/skills/cm-content-factory/.pytest_cache 2/v/cache/stepwise +0 -1
  233. package/skills/cm-content-factory/AGENTS.md +0 -61
  234. package/skills/cm-content-factory/CLAUDE.md +0 -63
  235. package/skills/cm-content-factory/CURSOR.md +0 -43
  236. package/skills/cm-content-factory/Content Factory.zip +0 -0
  237. package/skills/cm-content-factory/SKILL.md +0 -416
  238. package/skills/cm-content-factory/cf +0 -313
  239. package/skills/cm-content-factory/config.schema.json +0 -397
  240. package/skills/cm-content-factory/dashboard/app.js +0 -556
  241. package/skills/cm-content-factory/dashboard/index.html +0 -397
  242. package/skills/cm-content-factory/dashboard/style.css +0 -1211
  243. package/skills/cm-content-factory/examples/01-real-estate.config.json +0 -146
  244. package/skills/cm-content-factory/examples/02-personal-finance.config.json +0 -146
  245. package/skills/cm-content-factory/examples/03-health-wellness.config.json +0 -147
  246. package/skills/cm-content-factory/examples/04-saas-software.config.json +0 -147
  247. package/skills/cm-content-factory/examples/05-legal-services.config.json +0 -147
  248. package/skills/cm-content-factory/examples/06-insurance.config.json +0 -146
  249. package/skills/cm-content-factory/examples/07-ecommerce-dropship.config.json +0 -146
  250. package/skills/cm-content-factory/examples/08-online-education.config.json +0 -147
  251. package/skills/cm-content-factory/examples/09-crypto-defi.config.json +0 -147
  252. package/skills/cm-content-factory/examples/10-beauty-skincare.config.json +0 -147
  253. package/skills/cm-content-factory/examples/11-home-services.config.json +0 -146
  254. package/skills/cm-content-factory/examples/12-dental-clinic.config.json +0 -147
  255. package/skills/cm-content-factory/examples/13-pet-care.config.json +0 -147
  256. package/skills/cm-content-factory/examples/14-travel-hospitality.config.json +0 -147
  257. package/skills/cm-content-factory/examples/15-ai-automation.config.json +0 -147
  258. package/skills/cm-content-factory/examples/16-wedding-events.config.json +0 -147
  259. package/skills/cm-content-factory/examples/17-fitness-coaching.config.json +0 -148
  260. package/skills/cm-content-factory/examples/18-cybersecurity.config.json +0 -147
  261. package/skills/cm-content-factory/examples/19-food-restaurant.config.json +0 -148
  262. package/skills/cm-content-factory/examples/20-solar-energy.config.json +0 -147
  263. package/skills/cm-content-factory/examples/fitness-blog.config.json +0 -116
  264. package/skills/cm-content-factory/examples/tech-blog.config.json +0 -107
  265. package/skills/cm-content-factory/extensions/EXTENSION_GUIDE.md +0 -72
  266. package/skills/cm-content-factory/extensions/hooks.py +0 -126
  267. package/skills/cm-content-factory/extensions/openclaw_adapter.py +0 -132
  268. package/skills/cm-content-factory/landing/docs/content/changelog.md +0 -36
  269. package/skills/cm-content-factory/landing/docs/content/deployment.md +0 -46
  270. package/skills/cm-content-factory/landing/docs/content/execution-flow.md +0 -67
  271. package/skills/cm-content-factory/landing/docs/content/memory-system.md +0 -38
  272. package/skills/cm-content-factory/landing/docs/content/openspace.md +0 -27
  273. package/skills/cm-content-factory/landing/docs/content/use-cases.md +0 -26
  274. package/skills/cm-content-factory/landing/docs/content/v5-intro.md +0 -28
  275. package/skills/cm-content-factory/landing/docs/index.html +0 -240
  276. package/skills/cm-content-factory/landing/index.html +0 -680
  277. package/skills/cm-content-factory/landing/script.js +0 -143
  278. package/skills/cm-content-factory/landing/style.css +0 -1216
  279. package/skills/cm-content-factory/landing/translations.js +0 -508
  280. package/skills/cm-content-factory/logs/events.jsonl +0 -11
  281. package/skills/cm-content-factory/profiles/_template.profile.json +0 -231
  282. package/skills/cm-content-factory/profiles/finance.profile.json +0 -278
  283. package/skills/cm-content-factory/profiles/legal.profile.json +0 -263
  284. package/skills/cm-content-factory/profiles/medical-research.profile.json +0 -321
  285. package/skills/cm-content-factory/profiles/technology.profile.json +0 -275
  286. package/skills/cm-content-factory/scripts/agent_dispatcher.py +0 -266
  287. package/skills/cm-content-factory/scripts/audit.py +0 -106
  288. package/skills/cm-content-factory/scripts/dashboard_server.py +0 -225
  289. package/skills/cm-content-factory/scripts/deploy.py +0 -146
  290. package/skills/cm-content-factory/scripts/extract.py +0 -132
  291. package/skills/cm-content-factory/scripts/landing_generator.py +0 -459
  292. package/skills/cm-content-factory/scripts/memory.py +0 -521
  293. package/skills/cm-content-factory/scripts/monetize.py +0 -239
  294. package/skills/cm-content-factory/scripts/pipeline.py +0 -357
  295. package/skills/cm-content-factory/scripts/plan.py +0 -163
  296. package/skills/cm-content-factory/scripts/publish.py +0 -145
  297. package/skills/cm-content-factory/scripts/research.py +0 -337
  298. package/skills/cm-content-factory/scripts/scaffold.py +0 -464
  299. package/skills/cm-content-factory/scripts/scoreboard.py +0 -336
  300. package/skills/cm-content-factory/scripts/seo.py +0 -90
  301. package/skills/cm-content-factory/scripts/state_manager.py +0 -320
  302. package/skills/cm-content-factory/scripts/token_manager.py +0 -268
  303. package/skills/cm-content-factory/scripts/validate.py +0 -221
  304. package/skills/cm-content-factory/scripts/wizard.py +0 -329
  305. package/skills/cm-content-factory/scripts/write.py +0 -93
  306. package/skills/cm-content-factory/sites/docs-site/src/assets/houston.webp +0 -0
  307. package/skills/cm-content-factory/sites/docs-site/src/content/docs/architecture.md +0 -90
  308. package/skills/cm-content-factory/sites/docs-site/src/content/docs/data-flow.md +0 -54
  309. package/skills/cm-content-factory/sites/docs-site/src/content/docs/deployment.md +0 -38
  310. package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/index.md +0 -65
  311. package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/lc-content-lifecycle.md +0 -48
  312. package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/seq-write-mode.md +0 -39
  313. package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/uj-first-batch.md +0 -42
  314. package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/wf-content-pipeline.md +0 -51
  315. package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/wf-learning-cycle.md +0 -52
  316. package/skills/cm-content-factory/sites/docs-site/src/content/docs/getting-started/configuration.md +0 -86
  317. package/skills/cm-content-factory/sites/docs-site/src/content/docs/getting-started/installation.md +0 -80
  318. package/skills/cm-content-factory/sites/docs-site/src/content/docs/getting-started/intro.md +0 -58
  319. package/skills/cm-content-factory/sites/docs-site/src/content/docs/index.md +0 -102
  320. package/skills/cm-content-factory/sites/docs-site/src/content/docs/jtbd/index.md +0 -45
  321. package/skills/cm-content-factory/sites/docs-site/src/content/docs/jtbd/optimize-seo.md +0 -29
  322. package/skills/cm-content-factory/sites/docs-site/src/content/docs/jtbd/scale-content-production.md +0 -55
  323. package/skills/cm-content-factory/sites/docs-site/src/content/docs/jtbd/standardize-quality.md +0 -29
  324. package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/buyer-cmo-huong.md +0 -41
  325. package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/buyer-content-lead-khoa.md +0 -40
  326. package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/index.md +0 -56
  327. package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/user-content-manager-lan.md +0 -46
  328. package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/user-seo-minh.md +0 -45
  329. package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/user-writer-tu.md +0 -45
  330. package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/content-pipeline.md +0 -108
  331. package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/index.md +0 -22
  332. package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/memory-system.md +0 -52
  333. package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/seo-optimization.md +0 -58
  334. package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/troubleshooting-guide.md +0 -92
  335. package/skills/cm-content-factory/sites/docs-site/src/styles/custom.css +0 -575
  336. package/skills/cm-content-factory/tests/conftest.py +0 -66
  337. package/skills/cm-content-factory/tests/test_agent_dispatcher.py +0 -125
  338. package/skills/cm-content-factory/tests/test_memory.py +0 -128
  339. package/skills/cm-content-factory/tests/test_pipeline.py +0 -107
  340. package/skills/cm-content-factory/tests/test_research.py +0 -56
  341. package/skills/cm-content-factory/tests/test_state_manager.py +0 -131
  342. package/skills/cm-content-factory/tests/test_token_manager.py +0 -110
  343. package/skills/cm-content-factory/tests/test_wizard.py +0 -121
  344. package/skills/cm-cro-methodology/SKILL.md +0 -290
  345. package/skills/cm-cro-methodology/references/COPYWRITING.md +0 -178
  346. package/skills/cm-cro-methodology/references/OBJECTIONS.md +0 -135
  347. package/skills/cm-cro-methodology/references/PERSUASION.md +0 -158
  348. package/skills/cm-cro-methodology/references/RESEARCH.md +0 -220
  349. package/skills/cm-cro-methodology/references/funnel-analysis.md +0 -365
  350. package/skills/cm-cro-methodology/references/testing-methodology.md +0 -330
  351. package/skills/cm-google-form/SKILL.md +0 -266
  352. package/skills/cm-google-form/templates/apps-script.js +0 -55
  353. package/skills/cm-google-form/templates/form-markup.html +0 -110
  354. package/skills/cm-google-form/templates/form-submit.js +0 -201
  355. package/skills/cm-google-form/templates/toast.css +0 -152
  356. package/skills/cm-growth-hacking/SKILL.md +0 -282
  357. package/skills/cm-growth-hacking/bottom-sheet-engine.md +0 -261
  358. package/skills/cm-growth-hacking/calendar-integration.md +0 -264
  359. package/skills/cm-growth-hacking/references/engagement-patterns.md +0 -346
  360. package/skills/cm-growth-hacking/templates/bottom-sheet.css +0 -528
  361. package/skills/cm-growth-hacking/templates/bottom-sheet.js +0 -269
  362. package/skills/cm-growth-hacking/templates/calendar-cta.js +0 -213
  363. package/skills/cm-growth-hacking/templates/tracking-events.js +0 -211
  364. package/skills/cm-growth-hacking/templates/trigger-manager.js +0 -254
  365. package/skills/cm-growth-hacking/tracking-events.md +0 -246
  366. package/skills/cm-growth-hacking/trigger-system.md +0 -342
  367. package/skills/cm-jtbd/SKILL.md +0 -98
  368. package/skills/cm-notebooklm/SKILL.md +0 -156
  369. package/skills/cm-notebooklm/references/command_reference.md +0 -94
  370. package/skills/cm-notebooklm/references/workflows.md +0 -60
  371. package/skills/cm-notebooklm/resources/knowledge_sources.md +0 -106
  372. package/skills/cm-notebooklm/scripts/brain-sync.sh +0 -453
  373. package/skills/cm-notebooklm/scripts/graduate_wisdom.py +0 -101
  374. package/skills/cm-readit/SKILL.md +0 -289
  375. package/skills/cm-readit/audio-player.md +0 -206
  376. package/skills/cm-readit/examples/blog-reader.js +0 -352
  377. package/skills/cm-readit/examples/voice-cro.js +0 -390
  378. package/skills/cm-readit/tts-engine.md +0 -262
  379. package/skills/cm-readit/ui-patterns.md +0 -362
  380. package/skills/cm-readit/voice-cro.md +0 -223
@@ -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`).*