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
@@ -1,298 +1,65 @@
1
1
  #!/usr/bin/env node
2
+ /**
3
+ * CodyMaster postinstall — minimal, friendly, no surprise actions.
4
+ * The actual platform install runs through `cm` (the onboarding wizard) so
5
+ * users always opt in interactively.
6
+ */
7
+
8
+ const fs = require('fs');
9
+ const path = require('path');
2
10
 
3
- const G = '\x1b[32m';
4
11
  const C = '\x1b[36m';
5
- const W = '\x1b[37m';
12
+ const G = '\x1b[32m';
6
13
  const O = '\x1b[33m';
7
- const Y = '\x1b[1;33m';
8
- const BOLD = '\x1b[1m';
14
+ const W = '\x1b[1;37m';
9
15
  const DIM = '\x1b[2m';
10
16
  const NC = '\x1b[0m';
11
17
 
12
- const fs = require('fs');
13
- const path = require('path');
14
- const { execSync, execFileSync } = require('child_process');
15
-
16
- let skillCount = 68;
18
+ let skillCount = 60;
17
19
  try {
18
20
  const skillsDir = path.join(__dirname, '..', 'skills');
19
21
  if (fs.existsSync(skillsDir)) {
20
- skillCount = fs.readdirSync(skillsDir)
21
- .filter(f => {
22
- const fullPath = path.join(skillsDir, f);
23
- return f.startsWith('cm-') && fs.statSync(fullPath).isDirectory() && fs.existsSync(path.join(fullPath, 'SKILL.md'));
24
- })
25
- .length;
26
- }
27
- } catch (e) {}
28
-
29
-
30
- // Simple check for Vietnamese environment for the CORE UI
31
- const isVi = Intl.DateTimeFormat().resolvedOptions().locale.startsWith('vi');
32
-
33
- const sentiments = {
34
- start: [
35
- "🐹: Whiskers twitching... CodyMaster incoming!",
36
- `🐹: Let's fill these cheeks with ${skillCount} skills! ✨`,
37
- "🐹: Waking up from a power nap! Let's build! 🐭"
38
- ],
39
- progress: [
40
- "🐹: Sniffing out your AI agents...",
41
- "🐹: Running on the wheel to speed this up! 🏃💨",
42
- "🐹: Found a skill! Stashing it in my pocket... 💎"
43
- ],
44
- finish: [
45
- "🐹: Mission accomplished! Can I have a walnut now? 🥜",
46
- `🐹: My cheeks are stuffed with ${skillCount} skills for you! ✨`,
47
- "🐹: Terminal is Hamster-approved! Better than a wheel! 🎡",
48
- `🐹: ${skillCount} skills stored. I'm ready for vibe coding! ⚡`
49
- ]
50
- };
51
-
52
- const getSentiment = (state) => {
53
- const list = sentiments[state];
54
- return ` ${C}${list[Math.floor(Math.random() * list.length)]}${NC}`;
55
- };
56
-
57
- const showSkillGuide = (choice) => {
58
- console.clear();
59
- console.log(` ${G}\\${NC} ${O}( \\_/ )${NC} ${G}/${NC}`);
60
- console.log(` ${G}\\${NC} ${O}(${NC} ${G}^ u ^${NC} ${O})${NC} ${G}/${NC}`);
61
- console.log(` ${G}--${NC} ${O}( ___ )${NC} ${G}--${NC}`);
62
- console.log('');
63
-
64
- if (isVi) {
65
- switch(choice) {
66
- case '1':
67
- console.log(`${Y}${BOLD}1. Hướng dẫn toàn tập${NC} (${C}cm-how-it-work${NC})`);
68
- console.log(`${BOLD}🎯 Tình huống:${NC} Bạn mới cài CodyMaster và chưa biết bắt đầu từ đâu.`);
69
- console.log(`${BOLD}🚀 Câu lệnh:${NC} \`cm @/cm-how-it-work\``);
70
- console.log(`${BOLD}💡 Thử copy prompt này:${NC} "Giải thích quy trình từ ý tưởng đến lúc deploy một ứng dụng web bằng bộ skill này."`);
71
- break;
72
- case '2':
73
- console.log(`${Y}${BOLD}2. Vibe Coding (Zero Code)${NC} (${C}cm-start${NC})`);
74
- console.log(`${BOLD}🎯 Tình huống:${NC} Bạn có ý tưởng nhưng lười gõ từng dòng code.`);
75
- console.log(`${BOLD}🚀 Câu lệnh:${NC} \`cm @/cm-start\``);
76
- console.log(`${BOLD}💡 Thử copy prompt này:${NC} "Tôi muốn làm một trang web bán cà phê có giỏ hàng, dùng Tailwind CSS."`);
77
- break;
78
- case '3':
79
- console.log(`${Y}${BOLD}3. Tham gia dự án có sẵn${NC} (${C}cm-brainstorm-idea${NC})`);
80
- console.log(`${BOLD}🎯 Tình huống:${NC} Bạn nhảy vào một dự án có sẵn và thấy code quá rắc rối.`);
81
- console.log(`${BOLD}🚀 Câu lệnh:${NC} \`cm @/cm-brainstorm-idea\``);
82
- console.log(`${BOLD}💡 Thử copy prompt này:${NC} "Đọc toàn bộ project này và chỉ cho tôi 3 điểm yếu lớn nhất cần cải thiện ngay."`);
83
- break;
84
- case '4':
85
- console.log(`${Y}${BOLD}4. Thiết kế giao diện (UX/UI)${NC} (${C}cm-ux-master / cm-ui-preview${NC})`);
86
- console.log(`${BOLD}🎯 Tình huống:${NC} Bạn muốn web của mình đẹp như Apple hay Linear.`);
87
- console.log(`${BOLD}🚀 Câu lệnh:${NC} \`cm @/cm-ux-master\``);
88
- console.log(`${BOLD}💡 Thử copy prompt này:${NC} "Lấy style từ trang stripe.com và thiết kế cho tôi một trang thanh toán cực sang."`);
89
- break;
90
- case '5':
91
- console.log(`${Y}${BOLD}5. Lập trình TDD & Pair code${NC} (${C}cm-tdd${NC})`);
92
- console.log(`${BOLD}🎯 Tình huống:${NC} Bạn muốn code chắc chắn, không có lỗi khi chạy production.`);
93
- console.log(`${BOLD}🚀 Câu lệnh:${NC} \`cm @/cm-tdd\``);
94
- console.log(`${BOLD}💡 Thử copy prompt này:${NC} "Viết test case trước, sau đó code chức năng đăng ký người dùng cho tôi."`);
95
- break;
96
- case '6':
97
- console.log(`${Y}${BOLD}6. Dọn dẹp & Tái cấu trúc${NC} (${C}cm-clean-code${NC})`);
98
- console.log(`${BOLD}🎯 Tình huống:${NC} Code chạy được nhưng nhìn như "bãi rác".`);
99
- console.log(`${BOLD}🚀 Câu lệnh:${NC} \`cm @/cm-clean-code\``);
100
- console.log(`${BOLD}💡 Thử copy prompt này:${NC} "Tối ưu lại file này: xóa code thừa, đặt lại tên biến cho chuẩn và dễ hiểu hơn."`);
101
- break;
102
- case '7':
103
- console.log(`${Y}${BOLD}7. Quét & Sửa lỗi bảo mật${NC} (${C}cm-security-gate${NC})`);
104
- console.log(`${BOLD}🎯 Tình huống:${NC} Sợ lộ API key hoặc web bị hack XSS.`);
105
- console.log(`${BOLD}🚀 Câu lệnh:${NC} \`cm @/cm-security-gate\``);
106
- console.log(`${BOLD}💡 Thử copy prompt này:${NC} "Kiểm tra xem project có lỗ hổng bảo mật nào không trước khi tôi push lên GitHub."`);
107
- break;
108
- case '8':
109
- console.log(`${Y}${BOLD}8. Viết tài liệu Docs & API${NC} (${C}cm-dockit${NC})`);
110
- console.log(`${BOLD}🎯 Tình huống:${NC} Lười viết tài liệu hướng dẫn cho đồng nghiệp hoặc khách hàng.`);
111
- console.log(`${BOLD}🚀 Câu lệnh:${NC} \`cm @/cm-dockit\``);
112
- console.log(`${BOLD}💡 Thử copy prompt này:${NC} "Tự động tạo file hướng dẫn sử dụng (README) cho toàn bộ project này."`);
113
- break;
114
- case '9':
115
- console.log(`${Y}${BOLD}9. Tạo WOW Landing Page${NC} (${C}cm-cro-methodology${NC})`);
116
- console.log(`${BOLD}🎯 Tình huống:${NC} Web có người vào nhưng không ai mua hàng/đăng ký.`);
117
- console.log(`${BOLD}🚀 Câu lệnh:${NC} \`cm @/cm-cro-methodology\``);
118
- console.log(`${BOLD}💡 Thử copy prompt này:${NC} "Phân tích trang web này và chỉ cách tăng gấp đôi tỷ lệ khách hàng đăng ký."`);
119
- break;
120
- case '10':
121
- console.log(`${Y}${BOLD}10. Bảng theo dõi tiến độ${NC} (${C}cm dashboard${NC})`);
122
- console.log(`${BOLD}🎯 Tình huống:${NC} Muốn biết mình đã làm được bao nhiêu % công việc rồi.`);
123
- console.log(`${BOLD}🚀 Câu lệnh:${NC} \`cm dashboard\``);
124
- console.log(`${BOLD}💡 Thử copy prompt này:${NC} "Hiện bảng dashboard để tôi xem tiến độ các task hiện tại."`);
125
- break;
126
- case '11':
127
- console.log(`${Y}${BOLD}11. Xem Demo (Claude Code)${NC} (${C}/cm:demo${NC})`);
128
- console.log(`${BOLD}🎯 Tình huống:${NC} Muốn xem CodyMaster tự "múa" code như thế nào.`);
129
- console.log(`${BOLD}🚀 Câu lệnh:${NC} \`/cm:demo\``);
130
- console.log(`${BOLD}💡 Thử copy prompt này:${NC} "Bắt đầu demo: tự tạo một ứng dụng TodoList từ A-Z trong 1 phút."`);
131
- break;
132
- case '12':
133
- console.log(`${Y}${BOLD}12. Trợ giúp & Cú pháp lệnh${NC} (${C}cm help${NC})`);
134
- console.log(`${BOLD}🎯 Tình huống:${NC} Quên lệnh hoặc muốn tìm thêm skill xịn khác.`);
135
- console.log(`${BOLD}🚀 Câu lệnh:${NC} \`cm help\``);
136
- console.log(`${BOLD}💡 Thử copy prompt này:${NC} "Liệt kê các skill liên quan đến Growth Hacking và Marketing."`);
137
- break;
138
- }
139
- } else {
140
- switch(choice) {
141
- case '1':
142
- console.log(`${Y}${BOLD}1. The Ultimate Guide${NC} (${C}cm-how-it-work${NC})`);
143
- console.log(`${BOLD}🎯 Situation:${NC} You just installed CodyMaster and don't know where to start.`);
144
- console.log(`${BOLD}🚀 Command:${NC} \`cm @/cm-how-it-work\``);
145
- console.log(`${BOLD}💡 Try this prompt:${NC} "Explain the process from idea to deployment using this skill kit."`);
146
- break;
147
- case '2':
148
- console.log(`${Y}${BOLD}2. Vibe Coding (Zero Code)${NC} (${C}cm-start${NC})`);
149
- console.log(`${BOLD}🎯 Situation:${NC} You have an idea but are too lazy to write code manually.`);
150
- console.log(`${BOLD}🚀 Command:${NC} \`cm @/cm-start\``);
151
- console.log(`${BOLD}💡 Try this prompt:${NC} "Build a coffee shop website with a cart using Tailwind CSS."`);
152
- break;
153
- case '3':
154
- console.log(`${Y}${BOLD}3. Code an Existing Project${NC} (${C}cm-brainstorm-idea${NC})`);
155
- console.log(`${BOLD}🎯 Situation:${NC} You're joining an existing project and the code is a mess.`);
156
- console.log(`${BOLD}🚀 Command:${NC} \`cm @/cm-brainstorm-idea\``);
157
- console.log(`${BOLD}💡 Try this prompt:${NC} "Read this entire project and tell me the 3 biggest weaknesses."`);
158
- break;
159
- case '4':
160
- console.log(`${Y}${BOLD}4. Generate UX/UI Designs${NC} (${C}cm-ux-master / cm-ui-preview${NC})`);
161
- console.log(`${BOLD}🎯 Situation:${NC} You want your web app to look as premium as Apple or Linear.`);
162
- console.log(`${BOLD}🚀 Command:${NC} \`cm @/cm-ux-master\``);
163
- console.log(`${BOLD}💡 Try this prompt:${NC} "Copy the style from stripe.com and design a high-end checkout page."`);
164
- break;
165
- case '5':
166
- console.log(`${Y}${BOLD}5. Code TDD & Pair Coding${NC} (${C}cm-tdd${NC})`);
167
- console.log(`${BOLD}🎯 Situation:${NC} You want reliable code that doesn't break in production.`);
168
- console.log(`${BOLD}🚀 Command:${NC} \`cm @/cm-tdd\``);
169
- console.log(`${BOLD}💡 Try this prompt:${NC} "Write test cases first, then implement user registration for me."`);
170
- break;
171
- case '6':
172
- console.log(`${Y}${BOLD}6. Clean & Refactor Codebase${NC} (${C}cm-clean-code${NC})`);
173
- console.log(`${BOLD}🎯 Situation:${NC} The code works but it looks like a "garbage dump".`);
174
- console.log(`${BOLD}🚀 Command:${NC} \`cm @/cm-clean-code\``);
175
- console.log(`${BOLD}💡 Try this prompt:${NC} "Optimize this file: remove dead code and rename variables for clarity."`);
176
- break;
177
- case '7':
178
- console.log(`${Y}${BOLD}7. Scan for Vulnerabilities${NC} (${C}cm-security-gate${NC})`);
179
- console.log(`${BOLD}🎯 Situation:${NC} Worried about leaking API keys or XSS hacks.`);
180
- console.log(`${BOLD}🚀 Command:${NC} \`cm @/cm-security-gate\``);
181
- console.log(`${BOLD}💡 Try this prompt:${NC} "Check if there are any security vulnerabilities before I push to GitHub."`);
182
- break;
183
- case '8':
184
- console.log(`${Y}${BOLD}8. Write Docs & Generate APIs${NC} (${C}cm-dockit${NC})`);
185
- console.log(`${BOLD}🎯 Situation:${NC} Lazy to write documentation for teammates or clients.`);
186
- console.log(`${BOLD}🚀 Command:${NC} \`cm @/cm-dockit\``);
187
- console.log(`${BOLD}💡 Try this prompt:${NC} "Automatically generate a README guide for this entire project."`);
188
- break;
189
- case '9':
190
- console.log(`${Y}${BOLD}9. Release WOW Landing Page${NC} (${C}cm-cro-methodology${NC})`);
191
- console.log(`${BOLD}🎯 Situation:${NC} Visitors come to your site but don't buy or sign up.`);
192
- console.log(`${BOLD}🚀 Command:${NC} \`cm @/cm-cro-methodology\``);
193
- console.log(`${BOLD}💡 Try this prompt:${NC} "Analyze this website and show me how to double my sign-up rate."`);
194
- break;
195
- case '10':
196
- console.log(`${Y}${BOLD}10. Open Progress Dashboard${NC} (${C}cm dashboard${NC})`);
197
- console.log(`${BOLD}🎯 Situation:${NC} Want to know how much work is actually completed.`);
198
- console.log(`${BOLD}🚀 Command:${NC} \`cm dashboard\``);
199
- console.log(`${BOLD}💡 Try this prompt:${NC} "Show the dashboard so I can see the progress of current tasks."`);
200
- break;
201
- case '11':
202
- console.log(`${Y}${BOLD}11. See an Interactive Demo${NC} (${C}/cm:demo${NC})`);
203
- console.log(`${BOLD}🎯 Situation:${NC} Want to see CodyMaster perform its magic automatically.`);
204
- console.log(`${BOLD}🚀 Command:${NC} \`/cm:demo\``);
205
- console.log(`${BOLD}💡 Try this prompt:${NC} "Start demo: build a TodoList app from scratch in 1 minute."`);
206
- break;
207
- case '12':
208
- console.log(`${Y}${BOLD}12. Help & Command List${NC} (${C}cm help${NC})`);
209
- console.log(`${BOLD}🎯 Situation:${NC} Forgot a command or looking for more cool skills.`);
210
- console.log(`${BOLD}🚀 Command:${NC} \`cm help\``);
211
- console.log(`${BOLD}💡 Try this prompt:${NC} "List all skills related to Growth Hacking and Marketing."`);
212
- break;
213
- }
22
+ skillCount = fs
23
+ .readdirSync(skillsDir)
24
+ .filter((f) => {
25
+ const full = path.join(skillsDir, f);
26
+ return (
27
+ f.startsWith('cm-') &&
28
+ fs.statSync(full).isDirectory() &&
29
+ fs.existsSync(path.join(full, 'SKILL.md'))
30
+ );
31
+ }).length;
214
32
  }
215
-
216
- console.log('');
217
- };
218
-
219
- const printMenu = () => {
220
- console.clear();
221
- console.log(` ${G}\\${NC} ${O}( \\_/ )${NC} ${G}/${NC}`);
222
- console.log(` ${G}\\${NC} ${O}(${NC} ${G}^ u ^${NC} ${O})${NC} ${G}/${NC}`);
223
- console.log(` ${G}--${NC} ${O}( ___ )${NC} ${G}--${NC} ${G}${BOLD}${isVi ? '✅ Hoàn tất!' : '✅ Done!'}${NC}`);
224
- console.log(` ${O}| [ ] |${NC}`);
225
- console.log(` ${O}'--w-w--'${NC}`);
226
- console.log('');
227
-
228
- if (isVi) {
229
- console.log(` ${W}${BOLD}🎉 Thành công! Bạn đã mở khóa ${skillCount} kỹ năng AI toàn năng:${NC}`);
230
- } else {
231
- console.log(` ${W}${BOLD}🎉 Success! You just unlocked ${skillCount} omnipotent AI skills:${NC}`);
232
- }
233
-
234
- console.log('');
235
- console.log(getSentiment('finish'));
236
- console.log('');
237
-
238
- if (isVi) {
239
- console.log(` ${C}🎯 Orchestration${NC} : Lên kế hoạch & Điều phối Agent`);
240
- console.log(` ${C}🎨 Product${NC} : Thiết kế UX/UI & Tâm hành vi`);
241
- console.log(` ${C}🔧 Engineering${NC} : Code Full-stack & Tái cấu trúc`);
242
- console.log(` ${C}🔒 Security${NC} : Bảo mật tự động & Chống rò rỉ`);
243
- console.log(` ${C}⚙️ Operations${NC} : Triển khai an toàn & Quản lý CI/CD`);
244
- console.log(` ${C}📈 Growth${NC} : Tối ưu chuyển đổi (CRO) & Tracking`);
245
- console.log('');
246
- console.log(` ${W}${BOLD}🌟 Lệnh phổ biến:${NC}`);
247
- console.log('');
248
- console.log(` 🔸 ${Y}Bảng tiến độ (Dashboard) ${NC} → cm dashboard`);
249
- console.log(` 🔸 ${Y}Cần trợ giúp / Tìm kỹ năng ${NC} → cm help`);
250
- console.log(` 🔸 ${Y}Cách CodyMaster hoạt động ${NC} → cm-how-it-work`);
251
- } else {
252
- console.log(` ${C}🎯 Orchestration${NC} : Task Planning & Agent Synergy`);
253
- console.log(` ${C}🎨 Product${NC} : UX/UI Mastery & User Psychology`);
254
- console.log(` ${C}🔧 Engineering${NC} : Full-stack TDD & Refactoring`);
255
- console.log(` ${C}🔒 Security${NC} : Automated Gates & Secret Shields`);
256
- console.log(` ${C}⚙️ Operations${NC} : Safe Deployments & CI/CD Excellence`);
257
- console.log(` ${C}📈 Growth${NC} : Conversion Tracking & Hacks`);
258
- console.log('');
259
- console.log(` ${W}${BOLD}🌟 Popular Commands:${NC}`);
260
- console.log('');
261
- console.log(` 🔸 ${Y}Open progress dashboard ${NC} → cm dashboard`);
262
- console.log(` 🔸 ${Y}Help & Command list ${NC} → cm help`);
263
- console.log(` 🔸 ${Y}The ultimate guide ${NC} → cm-how-it-work`);
264
- }
265
-
266
- console.log('');
267
- console.log(` ${W}${BOLD}${isVi ? '📚 Tài liệu:' : '📚 Documentation:'}${NC} ${C}https://cody.todyle.com/docs${NC}`);
268
- console.log('');
269
- };
270
-
271
- const isInstalledAsNpmDependency = () => {
272
- const root = path.resolve(__dirname, '..').replace(/\\/g, '/');
273
- return /[/\\]node_modules[/\\]codymaster$/i.test(root);
274
- };
275
-
276
- const npmCmd = () => (process.platform === 'win32' ? 'npm.cmd' : 'npm');
277
-
278
- const activateCli = () => {
279
- const pkgRoot = path.join(__dirname, '..');
280
-
281
- if (isInstalledAsNpmDependency()) {
282
- console.log(` ${C}CodyMaster CLI (per-project install — official path):${NC}`);
283
- console.log(` ${W}npx cm${NC} or ${W}npx codymaster${NC}`);
284
- console.log(
285
- ` ${DIM}Optional — bare ${W}cm${DIM} in any terminal: ${W}npm install -g codymaster${NC}`,
286
- );
287
- return;
288
- }
289
-
290
-
291
- };
292
-
293
- const main = () => {
294
- activateCli();
295
- printMenu();
296
- };
297
-
298
- main();
33
+ } catch {}
34
+
35
+ const sentiments = [
36
+ `🐹: ${skillCount} skills stuffed in my cheeks. Ready when you are! ✨`,
37
+ `🐹: Whiskers twitching type ${W}cm${NC}${C} to start the wizard.`,
38
+ '🐹: Power-nap over. Let\'s build! 🐭',
39
+ ];
40
+ const pick = (arr) => arr[Math.floor(Math.random() * arr.length)];
41
+
42
+ const isGlobal =
43
+ process.env.npm_config_global === 'true' ||
44
+ /[/\\]npm[/\\]node_modules[/\\]codymaster$/i.test(path.resolve(__dirname, '..').replace(/\\/g, '/'));
45
+
46
+ console.log('');
47
+ console.log(` ${G}\\${NC} ${O}( \\_/ )${NC} ${G}/${NC}`);
48
+ console.log(` ${G}\\${NC} ${O}(${NC} ${G}^ u ^${NC} ${O})${NC} ${G}/${NC}`);
49
+ console.log(` ${G}--${NC} ${O}( ___ )${NC} ${G}--${NC} ${G}${W}CodyMaster ready${NC}`);
50
+ console.log(` ${O}| [ ] |${NC}`);
51
+ console.log(` ${O}'--w-w--'${NC}`);
52
+ console.log('');
53
+ console.log(` ${C}${pick(sentiments)}${NC}`);
54
+ console.log('');
55
+
56
+ if (isGlobal) {
57
+ console.log(` Next: run ${W}cm${NC} to start the onboarding wizard.`);
58
+ console.log(` ${DIM}It will detect your AI coding tools and install skills where you choose.${NC}`);
59
+ } else {
60
+ console.log(` Next: run ${W}npx cm${NC} inside this project to start the wizard.`);
61
+ console.log(` ${DIM}For a global \`cm\` command: ${W}npm install -g codymaster${NC}${DIM}.${NC}`);
62
+ }
63
+ console.log('');
64
+ console.log(` ${DIM}Docs: https://cody.todyle.com/docs${NC}`);
65
+ console.log('');
@@ -0,0 +1,88 @@
1
+ #!/bin/bash
2
+ # update-changelog.sh — Auto-update CHANGELOG.md from git commits
3
+ #
4
+ # Usage:
5
+ # bash scripts/update-changelog.sh # Update CHANGELOG.md
6
+ # bash scripts/update-changelog.sh --dry-run # Preview without writing
7
+ #
8
+ # Follows conventional commits format:
9
+ # feat: → 🚀 Features
10
+ # fix: → 🐛 Bug Fixes
11
+ # security: → 🔒 Security
12
+ # improve/refactor/perf: → 🚀 Improvements
13
+
14
+ set -e
15
+
16
+ REPO_ROOT="$(cd "$(dirname "$0")/.." && pwd)"
17
+ CHANGELOG="$REPO_ROOT/CHANGELOG.md"
18
+ DRY_RUN=false
19
+
20
+ if [[ "$1" == "--dry-run" ]]; then
21
+ DRY_RUN=true
22
+ fi
23
+
24
+ # Get last tag
25
+ LAST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "")
26
+
27
+ # Get commits since last tag
28
+ if [ -z "$LAST_TAG" ]; then
29
+ COMMITS=$(git log --oneline -20 --no-merges)
30
+ else
31
+ COMMITS=$(git log --oneline "$LAST_TAG"..HEAD --no-merges)
32
+ fi
33
+
34
+ if [ -z "$COMMITS" ]; then
35
+ echo "No commits found since last tag."
36
+ exit 0
37
+ fi
38
+
39
+ # Categorize commits
40
+ FEATURES=$(echo "$COMMITS" | grep -iE "^[a-f0-9]+ feat:" | sed 's/^[a-f0-9]* /- /' || true)
41
+ FIXES=$(echo "$COMMITS" | grep -iE "^[a-f0-9]+ fix:" | sed 's/^[a-f0-9]* /- /' || true)
42
+ SECURITY=$(echo "$COMMITS" | grep -iE "^[a-f0-9]+ (security|sec):" | sed 's/^[a-f0-9]* /- /' || true)
43
+ IMPROVEMENTS=$(echo "$COMMITS" | grep -iE "^[a-f0-9]+ (improve|refactor|perf):" | sed 's/^[a-f0-9]* /- /' || true)
44
+ OTHER=$(echo "$COMMITS" | grep -ivE "^[a-f0-9]+ (feat|fix|security|sec|improve|refactor|perf):" | sed 's/^[a-f0-9]* /- /' || true)
45
+
46
+ # Generate changelog entry
47
+ DATE=$(date +%Y-%m-%d)
48
+ VERSION=$(node -p "require('$REPO_ROOT/package.json').version" 2>/dev/null || echo "unreleased")
49
+
50
+ ENTRY="## [$VERSION] - $DATE\n\n"
51
+
52
+ if [ -n "$FEATURES" ]; then
53
+ ENTRY+="### 🚀 Features\n$FEATURES\n\n"
54
+ fi
55
+
56
+ if [ -n "$FIXES" ]; then
57
+ ENTRY+="### 🐛 Bug Fixes\n$FIXES\n\n"
58
+ fi
59
+
60
+ if [ -n "$SECURITY" ]; then
61
+ ENTRY+="### 🔒 Security\n$SECURITY\n\n"
62
+ fi
63
+
64
+ if [ -n "$IMPROVEMENTS" ]; then
65
+ ENTRY+="### 🚀 Improvements\n$IMPROVEMENTS\n\n"
66
+ fi
67
+
68
+ if [ -n "$OTHER" ]; then
69
+ ENTRY+="### 📦 Other\n$OTHER\n\n"
70
+ fi
71
+
72
+ if [ "$DRY_RUN" = true ]; then
73
+ echo "=== DRY RUN — would add to CHANGELOG.md ==="
74
+ echo -e "$ENTRY"
75
+ exit 0
76
+ fi
77
+
78
+ # Prepend to CHANGELOG.md
79
+ if [ -f "$CHANGELOG" ]; then
80
+ TEMP=$(mktemp)
81
+ echo -e "$ENTRY" > "$TEMP"
82
+ cat "$CHANGELOG" >> "$TEMP"
83
+ mv "$TEMP" "$CHANGELOG"
84
+ else
85
+ echo -e "# Changelog\n\nAll notable changes to this project will be documented in this file.\n\nCategories: 🚀 **Improvements** | 🐛 **Bug Fixes** | 🔒 **Security**\n\n---\n\n$ENTRY" > "$CHANGELOG"
86
+ fi
87
+
88
+ echo "✅ CHANGELOG.md updated (version: $VERSION)"
@@ -1,6 +1,20 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
- * Ensures each skill folder under skills/ has SKILL.md with a title line.
3
+ * Validates skills under skills/.
4
+ *
5
+ * Always-required (errors, fail build):
6
+ * - SKILL.md exists with H1 title and YAML frontmatter (`name`, `description`)
7
+ *
8
+ * Opt-in v2 rules (errors only when frontmatter `compressed: true`):
9
+ * - `token_budget` integer in [100, 6000]
10
+ * - `## TL;DR` section present, ≤8 non-empty lines (≤5 recommended)
11
+ * - SKILL.md ≤200 lines (warning only)
12
+ *
13
+ * Skills with `deprecated: true` are exempt from v2 rules.
14
+ *
15
+ * Migration: as skills are refactored to the new template
16
+ * (skills/_shared/SKILL_TEMPLATE.md), set `compressed: true` to enforce
17
+ * v2 quality. Once all core skills are migrated, the opt-in becomes default.
4
18
  */
5
19
  import fs from 'fs';
6
20
  import path from 'path';
@@ -9,32 +23,115 @@ import { fileURLToPath } from 'url';
9
23
  const __dirname = path.dirname(fileURLToPath(import.meta.url));
10
24
  const root = path.join(__dirname, '..', 'skills');
11
25
 
12
- /** Directories under skills/ that are not standalone skills (assets, packs). */
13
26
  const SKIP_DIRS = new Set(['profiles', 'extensions', 'scripts']);
14
27
 
15
28
  let errors = 0;
29
+ let warnings = 0;
30
+
31
+ function parseFrontmatter(text) {
32
+ const m = text.match(/^---\n([\s\S]*?)\n---\n/);
33
+ if (!m) return null;
34
+ const out = {};
35
+ for (const line of m[1].split('\n')) {
36
+ const mm = line.match(/^([A-Za-z_][A-Za-z0-9_-]*)\s*:\s*(.*)$/);
37
+ if (!mm) continue;
38
+ let v = mm[2].trim();
39
+ if (v.startsWith('"') && v.endsWith('"')) v = v.slice(1, -1);
40
+ if (v === 'true') v = true;
41
+ else if (v === 'false') v = false;
42
+ else if (/^-?\d+$/.test(v)) v = parseInt(v, 10);
43
+ out[mm[1]] = v;
44
+ }
45
+ return out;
46
+ }
47
+
48
+ function extractTldr(text) {
49
+ const m = text.match(/^##\s+TL;DR\s*\n([\s\S]*?)(?=\n##\s|$)/m);
50
+ if (!m) return null;
51
+ return m[1].split('\n').filter((l) => l.trim().length > 0);
52
+ }
53
+
16
54
  if (!fs.existsSync(root)) {
17
55
  console.error('No skills/ directory');
18
56
  process.exit(1);
19
57
  }
20
58
 
59
+ let migratedCount = 0;
60
+ let totalCount = 0;
61
+
21
62
  for (const name of fs.readdirSync(root, { withFileTypes: true })) {
22
63
  if (!name.isDirectory()) continue;
23
64
  if (name.name.startsWith('_') || name.name.startsWith('.')) continue;
24
65
  if (SKIP_DIRS.has(name.name)) continue;
66
+
25
67
  const md = path.join(root, name.name, 'SKILL.md');
26
68
  if (!fs.existsSync(md)) {
27
- console.error(`Missing SKILL.md: ${name.name}`);
69
+ console.error(`✗ ${name.name}: missing SKILL.md`);
28
70
  errors++;
29
71
  continue;
30
72
  }
73
+ totalCount++;
74
+
31
75
  const text = fs.readFileSync(md, 'utf8');
76
+ const fm = parseFrontmatter(text);
77
+
32
78
  if (!/^#\s+\S/m.test(text)) {
33
- console.error(`SKILL.md missing H1 title: ${name.name}`);
79
+ console.error(`✗ ${name.name}: missing H1 title`);
80
+ errors++;
81
+ }
82
+
83
+ if (!fm) {
84
+ console.error(`✗ ${name.name}: missing YAML frontmatter`);
85
+ errors++;
86
+ continue;
87
+ }
88
+ if (!fm.name) {
89
+ console.error(`✗ ${name.name}: frontmatter missing 'name'`);
90
+ errors++;
91
+ }
92
+ if (!fm.description) {
93
+ console.error(`✗ ${name.name}: frontmatter missing 'description'`);
34
94
  errors++;
35
95
  }
96
+
97
+ const isDeprecated = fm.deprecated === true;
98
+ const isCompressed = fm.compressed === true;
99
+
100
+ if (isCompressed && !isDeprecated) {
101
+ migratedCount++;
102
+
103
+ if (typeof fm.token_budget !== 'number') {
104
+ console.error(`✗ ${name.name}: compressed skill missing 'token_budget' (number)`);
105
+ errors++;
106
+ } else if (fm.token_budget < 100 || fm.token_budget > 6000) {
107
+ console.error(`✗ ${name.name}: token_budget ${fm.token_budget} out of range [100, 6000]`);
108
+ errors++;
109
+ }
110
+
111
+ const tldr = extractTldr(text);
112
+ if (!tldr) {
113
+ console.error(`✗ ${name.name}: compressed skill missing '## TL;DR' section`);
114
+ errors++;
115
+ } else {
116
+ if (tldr.length > 8) {
117
+ console.error(`✗ ${name.name}: TL;DR has ${tldr.length} non-empty lines (max 8)`);
118
+ errors++;
119
+ } else if (tldr.length > 5) {
120
+ console.warn(`⚠ ${name.name}: TL;DR has ${tldr.length} non-empty lines (recommend ≤5)`);
121
+ warnings++;
122
+ }
123
+ }
124
+
125
+ const totalLines = text.split('\n').length;
126
+ if (totalLines > 200) {
127
+ console.warn(`⚠ ${name.name}: SKILL.md is ${totalLines} lines (recommend ≤200)`);
128
+ warnings++;
129
+ }
130
+ }
36
131
  }
37
132
 
133
+ console.log(`validate-skills: ${migratedCount}/${totalCount} skills migrated to v2 (compressed:true)`);
134
+ if (warnings) console.warn(`validate-skills: ${warnings} warning(s)`);
38
135
  if (errors) {
39
136
  console.error(`validate-skills: ${errors} error(s)`);
40
137
  process.exit(1);
@@ -0,0 +1,62 @@
1
+ ---
2
+ name: cm-<name>
3
+ description: "<one-line trigger sentence: when to use this skill>"
4
+ token_budget: 1500
5
+ compressed: true
6
+ deprecated: false
7
+ ---
8
+
9
+ # cm-<name> — <short title>
10
+
11
+ ## TL;DR
12
+ - **Use when**: <trigger condition, 1 line>
13
+ - **Output**: <what artifact/state changes>
14
+ - **Handoff**: reads `.cm/handoff/<prev>.json` (if any), writes `.cm/handoff/<this>.json` (if any)
15
+ - **Chain**: typically follows `cm-<prev>`, precedes `cm-<next>`
16
+ - **Budget**: 1500 tokens (loaded full only when needed)
17
+
18
+ ## When to Use
19
+ <2-4 bullets describing concrete situations. Skip if TL;DR is sufficient.>
20
+
21
+ ## Adaptive Depth
22
+
23
+ Read `.cm/project-tier.md` (written by `cm tier classify`) and pick a rendering depth:
24
+
25
+ - **LITE / STANDARD** → stop after TL;DR. Skip "Full Protocol" unless the task explicitly requires deep instructions.
26
+ - **PROFESSIONAL / ENTERPRISE** → load the full protocol below.
27
+
28
+ If the tier file is absent, default to STANDARD.
29
+
30
+ ## Full Protocol
31
+ <Detailed instructions, examples, rules. Agent loads this only when TL;DR is insufficient or tier ≥ PROFESSIONAL.>
32
+
33
+ ### Step 1: <name>
34
+ <...>
35
+
36
+ ### Step 2: <name>
37
+ <...>
38
+
39
+ ## Integration
40
+
41
+ | After this skill... | Use skill |
42
+ |---|---|
43
+ | <situation> | `cm-<next>` |
44
+
45
+ ## Persona Dispatch (optional)
46
+
47
+ For complex tasks, dispatch via persona subagents in `agents/`:
48
+
49
+ | Need | Persona |
50
+ |------|---------|
51
+ | Clarify scope/intent | `pm` |
52
+ | Design / trade-offs | `architect` |
53
+ | Write code | `engineer` |
54
+ | Independent review | `reviewer` |
55
+ | Threat model / scan | `security` |
56
+
57
+ ## Anti-Patterns
58
+ - ❌ <thing not to do>
59
+ - ❌ <thing not to do>
60
+
61
+ ## The Bottom Line
62
+ **<one-sentence rule>**