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
@@ -0,0 +1,138 @@
1
+ "use strict";
2
+ /**
3
+ * cm parallel — Execute tasks in parallel using Gemini CLI
4
+ *
5
+ * TRIZ Principle #1 (Segmentation):
6
+ * Split task into independent subtasks, run in parallel.
7
+ *
8
+ * TRIZ Principle #15 (Dynamicity):
9
+ * Adapt batch size based on task complexity.
10
+ */
11
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
12
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
13
+ return new (P || (P = Promise))(function (resolve, reject) {
14
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
15
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
16
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
17
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
18
+ });
19
+ };
20
+ var __importDefault = (this && this.__importDefault) || function (mod) {
21
+ return (mod && mod.__esModule) ? mod : { "default": mod };
22
+ };
23
+ Object.defineProperty(exports, "__esModule", { value: true });
24
+ exports.registerParallelCommands = registerParallelCommands;
25
+ const child_process_1 = require("child_process");
26
+ const chalk_1 = __importDefault(require("chalk"));
27
+ const box_1 = require("../../ui/box");
28
+ function registerParallelCommands(program) {
29
+ program
30
+ .command('parallel <task>')
31
+ .description('Execute task in parallel using Gemini CLI')
32
+ .option('-n, --count <n>', 'Number of parallel instances', '3')
33
+ .option('-c, --context <files>', 'Context files to include (comma-separated)')
34
+ .option('-m, --model <model>', 'Gemini model to use', 'gemini-2.0-flash')
35
+ .option('--timeout <ms>', 'Timeout per instance in milliseconds', '120000')
36
+ .action((task, opts) => __awaiter(this, void 0, void 0, function* () {
37
+ const count = parseInt(opts.count, 10);
38
+ const timeout = parseInt(opts.timeout, 10);
39
+ console.log((0, box_1.renderCommandHeader)('Parallel Execution', '⚡'));
40
+ console.log(chalk_1.default.dim(` Task: ${task}`));
41
+ console.log(chalk_1.default.dim(` Instances: ${count}`));
42
+ console.log(chalk_1.default.dim(` Model: ${opts.model}`));
43
+ console.log('');
44
+ // Check if gemini CLI is available
45
+ const geminiAvailable = yield checkGeminiCli();
46
+ if (!geminiAvailable) {
47
+ console.log(chalk_1.default.yellow('⚠ Gemini CLI not found. Falling back to single-agent execution.'));
48
+ console.log(chalk_1.default.dim('Install: npm install -g @anthropic-ai/gemini-cli'));
49
+ console.log('');
50
+ yield executeSingleAgent(task, opts);
51
+ return;
52
+ }
53
+ // Execute in parallel
54
+ const results = yield executeParallel(task, count, opts);
55
+ // Display results
56
+ console.log(chalk_1.default.bold('\n📊 Results:\n'));
57
+ for (const result of results) {
58
+ const status = result.exitCode === 0 ? chalk_1.default.green('✅') : chalk_1.default.red('❌');
59
+ console.log(` ${status} Instance ${result.instance}: exit=${result.exitCode}`);
60
+ if (result.output) {
61
+ console.log(chalk_1.default.dim(` ${result.output.slice(0, 100)}...`));
62
+ }
63
+ }
64
+ // Summary
65
+ const passed = results.filter(r => r.exitCode === 0).length;
66
+ const failed = results.filter(r => r.exitCode !== 0).length;
67
+ console.log('');
68
+ console.log(chalk_1.default.bold(` Summary: ${chalk_1.default.green(`${passed} passed`)} / ${chalk_1.default.red(`${failed} failed`)}`));
69
+ }));
70
+ }
71
+ function checkGeminiCli() {
72
+ return __awaiter(this, void 0, void 0, function* () {
73
+ return new Promise((resolve) => {
74
+ const proc = (0, child_process_1.spawn)('which', ['gemini'], { stdio: 'pipe' });
75
+ proc.on('close', (code) => resolve(code === 0));
76
+ proc.on('error', () => resolve(false));
77
+ });
78
+ });
79
+ }
80
+ function executeParallel(task, count, opts) {
81
+ return __awaiter(this, void 0, void 0, function* () {
82
+ const results = [];
83
+ const promises = [];
84
+ for (let i = 1; i <= count; i++) {
85
+ promises.push(executeInstance(task, i, opts));
86
+ }
87
+ return Promise.all(promises);
88
+ });
89
+ }
90
+ function executeInstance(task, instance, opts) {
91
+ return __awaiter(this, void 0, void 0, function* () {
92
+ return new Promise((resolve) => {
93
+ const args = [
94
+ '-p', `Instance ${instance}: ${task}`,
95
+ '--model', opts.model,
96
+ ];
97
+ if (opts.context) {
98
+ args.push('--context', opts.context);
99
+ }
100
+ const proc = (0, child_process_1.spawn)('gemini', args, {
101
+ stdio: ['pipe', 'pipe', 'pipe'],
102
+ timeout: parseInt(opts.timeout, 10),
103
+ });
104
+ let output = '';
105
+ let error = '';
106
+ proc.stdout.on('data', (data) => {
107
+ output += data.toString();
108
+ });
109
+ proc.stderr.on('data', (data) => {
110
+ error += data.toString();
111
+ });
112
+ proc.on('close', (code) => {
113
+ resolve({
114
+ instance,
115
+ exitCode: code,
116
+ output: output.trim(),
117
+ error: error.trim(),
118
+ });
119
+ });
120
+ proc.on('error', (err) => {
121
+ resolve({
122
+ instance,
123
+ exitCode: 1,
124
+ output: '',
125
+ error: err.message,
126
+ });
127
+ });
128
+ });
129
+ });
130
+ }
131
+ function executeSingleAgent(task, opts) {
132
+ return __awaiter(this, void 0, void 0, function* () {
133
+ console.log(chalk_1.default.dim(' Executing with single agent...'));
134
+ // Fallback: just print the task for the AI agent to handle
135
+ console.log(chalk_1.default.bold(` Task: ${task}`));
136
+ console.log(chalk_1.default.dim(' (Single-agent mode — use Gemini CLI for parallel execution)'));
137
+ });
138
+ }
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+ /**
3
+ * `cm quality` — Vibecoding Index CLI.
4
+ *
5
+ * Reads .cm/handoff/{plan,exec,review,quality}.json (when present) plus
6
+ * git-derived signals to estimate the five Vibecoding components, then
7
+ * prints a score 0–100 with advice.
8
+ */
9
+ var __importDefault = (this && this.__importDefault) || function (mod) {
10
+ return (mod && mod.__esModule) ? mod : { "default": mod };
11
+ };
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.registerQualityCommands = registerQualityCommands;
14
+ const fs_1 = __importDefault(require("fs"));
15
+ const path_1 = __importDefault(require("path"));
16
+ const vibecoding_index_1 = require("../../vibecoding-index");
17
+ function isMode(s) {
18
+ return s === 'OFF' || s === 'WARNING' || s === 'SOFT' || s === 'FULL';
19
+ }
20
+ function parseFraction(v, fallback) {
21
+ if (!v)
22
+ return fallback;
23
+ const n = Number(v);
24
+ if (Number.isNaN(n))
25
+ return fallback;
26
+ if (n > 1)
27
+ return Math.min(1, n / 100);
28
+ return Math.max(0, Math.min(1, n));
29
+ }
30
+ function deriveFromHandoff(projectPath) {
31
+ var _a, _b, _c;
32
+ const dir = path_1.default.join(projectPath, '.cm', 'handoff');
33
+ if (!fs_1.default.existsSync(dir))
34
+ return {};
35
+ const out = {};
36
+ // intent — from intent.json or plan.json presence
37
+ if (fs_1.default.existsSync(path_1.default.join(dir, 'plan.json')))
38
+ out.intent = 0.85;
39
+ else if (fs_1.default.existsSync(path_1.default.join(dir, 'intent.json')))
40
+ out.intent = 0.65;
41
+ // context — handoff chain length proxy
42
+ const present = ['intent.json', 'plan.json', 'exec.json', 'review.json']
43
+ .filter((f) => fs_1.default.existsSync(path_1.default.join(dir, f))).length;
44
+ if (present > 0)
45
+ out.context = Math.min(1, present / 4);
46
+ // tests — from quality.json
47
+ try {
48
+ const q = JSON.parse(fs_1.default.readFileSync(path_1.default.join(dir, 'quality.json'), 'utf8'));
49
+ if (typeof ((_a = q === null || q === void 0 ? void 0 : q.data) === null || _a === void 0 ? void 0 : _a.coverage_pct) === 'number') {
50
+ out.tests = Math.max(0, Math.min(1, q.data.coverage_pct / 100));
51
+ }
52
+ else if (((_b = q === null || q === void 0 ? void 0 : q.data) === null || _b === void 0 ? void 0 : _b.tests_passed) === true) {
53
+ out.tests = 0.7;
54
+ }
55
+ }
56
+ catch ( /* missing or malformed */_d) { /* missing or malformed */ }
57
+ // review — from review.json
58
+ try {
59
+ const r = JSON.parse(fs_1.default.readFileSync(path_1.default.join(dir, 'review.json'), 'utf8'));
60
+ if (Array.isArray((_c = r === null || r === void 0 ? void 0 : r.data) === null || _c === void 0 ? void 0 : _c.findings))
61
+ out.review = 0.8;
62
+ }
63
+ catch ( /* none */_e) { /* none */ }
64
+ return out;
65
+ }
66
+ function registerQualityCommands(program) {
67
+ const quality = program.command('quality').description('Vibecoding Index — score 0..100 for the current change');
68
+ quality
69
+ .command('score')
70
+ .description('compute and print the Vibecoding Index')
71
+ .option('--mode <mode>', 'OFF|WARNING|SOFT|FULL', 'WARNING')
72
+ .option('--intent <n>', 'override intent score (0..1 or 0..100)')
73
+ .option('--ownership <n>', 'override ownership score (0..1 or 0..100)')
74
+ .option('--context <n>', 'override context score (0..1 or 0..100)')
75
+ .option('--tests <n>', 'override tests score (0..1 or 0..100)')
76
+ .option('--review <n>', 'override review score (0..1 or 0..100)')
77
+ .option('--json', 'print raw JSON')
78
+ .action((opts) => {
79
+ var _a, _b, _c, _d, _e, _f;
80
+ const cwd = process.cwd();
81
+ const derived = deriveFromHandoff(cwd);
82
+ const inputs = {
83
+ intent: parseFraction(opts.intent, (_a = derived.intent) !== null && _a !== void 0 ? _a : 0.5),
84
+ ownership: parseFraction(opts.ownership, (_b = derived.ownership) !== null && _b !== void 0 ? _b : 0.6),
85
+ context: parseFraction(opts.context, (_c = derived.context) !== null && _c !== void 0 ? _c : 0.4),
86
+ tests: parseFraction(opts.tests, (_d = derived.tests) !== null && _d !== void 0 ? _d : 0.4),
87
+ review: parseFraction(opts.review, (_e = derived.review) !== null && _e !== void 0 ? _e : 0.4),
88
+ };
89
+ const result = (0, vibecoding_index_1.computeVibeIndex)(inputs);
90
+ const mode = isMode(String((_f = opts.mode) !== null && _f !== void 0 ? _f : '').toUpperCase())
91
+ ? String(opts.mode).toUpperCase()
92
+ : 'WARNING';
93
+ const outcome = (0, vibecoding_index_1.applyVibeMode)(result, mode);
94
+ if (opts.json) {
95
+ process.stdout.write(JSON.stringify({ outcome }, null, 2) + '\n');
96
+ }
97
+ else {
98
+ process.stdout.write((0, vibecoding_index_1.formatVibeReport)(result) + '\n');
99
+ if (outcome.message)
100
+ process.stdout.write(outcome.message + '\n');
101
+ }
102
+ if (outcome.status === 'block')
103
+ process.exit(1);
104
+ });
105
+ }
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ /**
3
+ * `cm stack` — detect ecosystems/frameworks and emit .cm/project-skills.md.
4
+ * `cm tier` — classify project size tier and emit .cm/project-tier.md.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.registerStackCommands = registerStackCommands;
8
+ const stack_detect_1 = require("../../indexer/stack-detect");
9
+ const tier_classify_1 = require("../../tier-classify");
10
+ function registerStackCommands(program) {
11
+ const stack = program.command('stack').description('Detect project stack and suggest skills');
12
+ stack
13
+ .command('detect')
14
+ .description('scan the current project and print suggestions')
15
+ .option('--write', 'write report to .cm/project-skills.md')
16
+ .option('--json', 'print raw JSON')
17
+ .action((opts) => {
18
+ const r = (0, stack_detect_1.detectStack)(process.cwd());
19
+ if (opts.json) {
20
+ process.stdout.write(JSON.stringify(r, null, 2) + '\n');
21
+ }
22
+ else {
23
+ process.stdout.write((0, stack_detect_1.renderStackMarkdown)(r));
24
+ }
25
+ if (opts.write) {
26
+ const file = (0, stack_detect_1.writeProjectSkills)(process.cwd(), r);
27
+ process.stdout.write(`\nWrote ${file}\n`);
28
+ }
29
+ });
30
+ const tier = program.command('tier').description('Classify project tier (LITE/STANDARD/PROFESSIONAL/ENTERPRISE)');
31
+ tier
32
+ .command('classify')
33
+ .description('measure and classify the current project')
34
+ .option('--write', 'write report to .cm/project-tier.md')
35
+ .option('--json', 'print raw JSON')
36
+ .action((opts) => {
37
+ const r = (0, tier_classify_1.classifyProject)(process.cwd());
38
+ if (opts.json) {
39
+ process.stdout.write(JSON.stringify(r, null, 2) + '\n');
40
+ }
41
+ else {
42
+ process.stdout.write((0, tier_classify_1.renderTierMarkdown)(r));
43
+ }
44
+ if (opts.write) {
45
+ const file = (0, tier_classify_1.writeTierReport)(process.cwd(), r);
46
+ process.stdout.write(`\nWrote ${file}\n`);
47
+ }
48
+ });
49
+ }
@@ -0,0 +1,159 @@
1
+ "use strict";
2
+ /**
3
+ * cm update — Unified update command for CodyMaster
4
+ *
5
+ * TRIZ Principle #15 (Dynamicity):
6
+ * Adapt update behavior based on flags.
7
+ *
8
+ * TRIZ Principle #40 (Composite):
9
+ * Combine sync + changelog + version check in one command.
10
+ */
11
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
12
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
13
+ return new (P || (P = Promise))(function (resolve, reject) {
14
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
15
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
16
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
17
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
18
+ });
19
+ };
20
+ var __importDefault = (this && this.__importDefault) || function (mod) {
21
+ return (mod && mod.__esModule) ? mod : { "default": mod };
22
+ };
23
+ Object.defineProperty(exports, "__esModule", { value: true });
24
+ exports.registerUpdateCommands = registerUpdateCommands;
25
+ const chalk_1 = __importDefault(require("chalk"));
26
+ const child_process_1 = require("child_process");
27
+ const path_1 = __importDefault(require("path"));
28
+ const fs_1 = __importDefault(require("fs"));
29
+ const box_1 = require("../../ui/box");
30
+ const repoRoot = path_1.default.join(__dirname, '..', '..', '..');
31
+ const pkg = JSON.parse(fs_1.default.readFileSync(path_1.default.join(repoRoot, 'package.json'), 'utf-8'));
32
+ function registerUpdateCommands(program) {
33
+ program
34
+ .command('update')
35
+ .description('Update CodyMaster skills, changelog, and check for upgrades')
36
+ .option('-s, --sync', 'Sync skills to all platforms')
37
+ .option('-c, --changelog', 'Update CHANGELOG.md from git commits')
38
+ .option('--check', 'Check for available updates')
39
+ .option('-f, --full', 'Full update (sync + changelog)')
40
+ .option('--dry-run', 'Show what would be done without making changes')
41
+ .action((opts) => __awaiter(this, void 0, void 0, function* () {
42
+ console.log((0, box_1.renderCommandHeader)('CodyMaster Update', '🔄'));
43
+ // Default: full update if no flags
44
+ if (!opts.sync && !opts.changelog && !opts.check) {
45
+ opts.full = true;
46
+ }
47
+ // Check for updates
48
+ if (opts.check) {
49
+ yield checkForUpdates();
50
+ return;
51
+ }
52
+ // Sync skills
53
+ if (opts.sync || opts.full) {
54
+ yield syncSkills(opts.dryRun);
55
+ }
56
+ // Update changelog
57
+ if (opts.changelog || opts.full) {
58
+ yield updateChangelog(opts.dryRun);
59
+ }
60
+ // Summary
61
+ console.log('');
62
+ console.log(chalk_1.default.green(' ✅ Update complete!'));
63
+ console.log('');
64
+ }));
65
+ // ─── Upgrade Command ─────────────────────────────────────────
66
+ program
67
+ .command('upgrade')
68
+ .description('Upgrade CodyMaster package and sync skills')
69
+ .option('--dry-run', 'Show what would be done without making changes')
70
+ .action((opts) => __awaiter(this, void 0, void 0, function* () {
71
+ console.log((0, box_1.renderCommandHeader)('CodyMaster Upgrade', '⬆️'));
72
+ if (opts.dryRun) {
73
+ console.log(chalk_1.default.dim(' [DRY RUN] Would run: npm update -g codymaster'));
74
+ console.log(chalk_1.default.dim(' [DRY RUN] Would run: cm update --full'));
75
+ return;
76
+ }
77
+ // Step 1: Update package
78
+ console.log(chalk_1.default.bold(' Step 1: Updating CodyMaster package...'));
79
+ try {
80
+ (0, child_process_1.execSync)('npm update -g codymaster', { stdio: 'inherit', cwd: repoRoot });
81
+ console.log(chalk_1.default.green(' ✅ Package updated'));
82
+ }
83
+ catch (error) {
84
+ console.log(chalk_1.default.yellow(' ⚠️ Package update failed (may already be latest)'));
85
+ }
86
+ // Step 2: Sync skills
87
+ console.log(chalk_1.default.bold('\n Step 2: Syncing skills...'));
88
+ yield syncSkills(false);
89
+ // Step 3: Update changelog
90
+ console.log(chalk_1.default.bold('\n Step 3: Updating changelog...'));
91
+ yield updateChangelog(false);
92
+ console.log('');
93
+ console.log(chalk_1.default.green(' ✅ Upgrade complete!'));
94
+ console.log(chalk_1.default.dim(' Run `cm --version` to verify.'));
95
+ console.log('');
96
+ }));
97
+ }
98
+ function checkForUpdates() {
99
+ return __awaiter(this, void 0, void 0, function* () {
100
+ console.log(chalk_1.default.bold('\n Checking for updates...\n'));
101
+ // Current version
102
+ console.log(chalk_1.default.dim(` Current: v${pkg.version}`));
103
+ // Check npm for latest
104
+ try {
105
+ const latest = (0, child_process_1.execSync)('npm view codymaster version', { encoding: 'utf-8' }).trim();
106
+ console.log(chalk_1.default.dim(` Latest: v${latest}`));
107
+ if (latest !== pkg.version) {
108
+ console.log(chalk_1.default.yellow(`\n ⚠️ Update available: v${latest}`));
109
+ console.log(chalk_1.default.dim(' Run `cm upgrade` to update.'));
110
+ }
111
+ else {
112
+ console.log(chalk_1.default.green('\n ✅ You are on the latest version.'));
113
+ }
114
+ }
115
+ catch (error) {
116
+ console.log(chalk_1.default.dim(' Could not check npm registry.'));
117
+ }
118
+ });
119
+ }
120
+ function syncSkills(dryRun) {
121
+ return __awaiter(this, void 0, void 0, function* () {
122
+ console.log(chalk_1.default.bold('\n Syncing skills to all platforms...'));
123
+ if (dryRun) {
124
+ console.log(chalk_1.default.dim(' [DRY RUN] Would run: node scripts/build-skills.mjs --all-platforms'));
125
+ return;
126
+ }
127
+ try {
128
+ const output = (0, child_process_1.execSync)('node scripts/build-skills.mjs --all-platforms', {
129
+ encoding: 'utf-8',
130
+ cwd: repoRoot,
131
+ timeout: 60000,
132
+ });
133
+ console.log(chalk_1.default.green(' ✅ Skills synced'));
134
+ }
135
+ catch (error) {
136
+ console.log(chalk_1.default.red(' ❌ Sync failed: ' + (error.message || 'Unknown error')));
137
+ }
138
+ });
139
+ }
140
+ function updateChangelog(dryRun) {
141
+ return __awaiter(this, void 0, void 0, function* () {
142
+ console.log(chalk_1.default.bold('\n Updating changelog...'));
143
+ if (dryRun) {
144
+ console.log(chalk_1.default.dim(' [DRY RUN] Would run: bash scripts/update-changelog.sh'));
145
+ return;
146
+ }
147
+ try {
148
+ const output = (0, child_process_1.execSync)('bash scripts/update-changelog.sh', {
149
+ encoding: 'utf-8',
150
+ cwd: repoRoot,
151
+ timeout: 30000,
152
+ });
153
+ console.log(chalk_1.default.green(' ✅ Changelog updated'));
154
+ }
155
+ catch (error) {
156
+ console.log(chalk_1.default.red(' ❌ Changelog update failed: ' + (error.message || 'Unknown error')));
157
+ }
158
+ });
159
+ }
@@ -12,18 +12,20 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
12
12
  return (mod && mod.__esModule) ? mod : { "default": mod };
13
13
  };
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
- exports._updateMessage = void 0;
15
+ exports.VERSION = void 0;
16
16
  exports.checkForUpdates = checkForUpdates;
17
+ exports.showUpdateNotification = showUpdateNotification;
18
+ exports.promptForUpgrade = promptForUpgrade;
17
19
  const fs_1 = __importDefault(require("fs"));
18
20
  const path_1 = __importDefault(require("path"));
19
21
  const os_1 = __importDefault(require("os"));
20
22
  const https_1 = __importDefault(require("https"));
21
23
  const pkg = JSON.parse(fs_1.default.readFileSync(path_1.default.resolve(__dirname, '..', '..', 'package.json'), 'utf-8'));
22
- const VERSION = pkg.version;
23
- exports._updateMessage = '';
24
+ exports.VERSION = pkg.version;
24
25
  /**
25
26
  * Checks for updates to CodyMaster on the npm registry.
26
27
  * Caches results for 24 hours to avoid frequent network calls.
28
+ * Returns UpdateInfo if a newer version is available, null otherwise.
27
29
  */
28
30
  function checkForUpdates() {
29
31
  return __awaiter(this, void 0, void 0, function* () {
@@ -41,10 +43,12 @@ function checkForUpdates() {
41
43
  const age = Date.now() - stat.mtimeMs;
42
44
  if (age < 24 * 60 * 60 * 1000) {
43
45
  const cached = fs_1.default.readFileSync(cacheFile, 'utf-8').trim();
44
- if (cached && cached !== VERSION) {
45
- exports._updateMessage = cached;
46
+ if (cached && cached !== exports.VERSION) {
47
+ return { currentVersion: exports.VERSION, latestVersion: cached };
48
+ }
49
+ if (!cached || cached === exports.VERSION) {
50
+ return null; // up to date
46
51
  }
47
- return;
48
52
  }
49
53
  }
50
54
  }
@@ -59,25 +63,105 @@ function checkForUpdates() {
59
63
  clearTimeout(timer);
60
64
  try {
61
65
  const json = JSON.parse(data);
62
- resolve(json.version || VERSION);
66
+ resolve(json.version || exports.VERSION);
63
67
  }
64
68
  catch (_a) {
65
- resolve(VERSION);
69
+ resolve(exports.VERSION);
66
70
  }
67
71
  });
68
72
  }).on('error', () => { clearTimeout(timer); reject(new Error('fetch failed')); });
69
73
  });
70
74
  // Cache result
71
- if (latestVersion && latestVersion !== VERSION) {
72
- exports._updateMessage = latestVersion;
75
+ if (latestVersion && latestVersion !== exports.VERSION) {
73
76
  fs_1.default.writeFileSync(cacheFile, latestVersion);
77
+ return { currentVersion: exports.VERSION, latestVersion };
74
78
  }
75
79
  else {
76
80
  fs_1.default.writeFileSync(cacheFile, '');
81
+ return null;
77
82
  }
78
83
  }
79
84
  catch (e) {
80
85
  // Silent failure for update checks
86
+ return null;
81
87
  }
82
88
  });
83
89
  }
90
+ /**
91
+ * Display update notification with upgrade prompt.
92
+ * Shows a colored banner and optionally prompts for upgrade.
93
+ */
94
+ function showUpdateNotification(info) {
95
+ const chalk = require('chalk');
96
+ console.log('');
97
+ console.log(chalk.yellow(' ┌──────────────────────────────────────────────┐'));
98
+ console.log(chalk.yellow(' │ ') + chalk.bold('Update available!') + ` v${info.currentVersion} → v${info.latestVersion}` + chalk.yellow(' │'));
99
+ console.log(chalk.yellow(' │ ') + chalk.dim('Run `cm upgrade` to update') + chalk.yellow(' │'));
100
+ console.log(chalk.yellow(' └──────────────────────────────────────────────┘'));
101
+ console.log('');
102
+ }
103
+ /**
104
+ * Show update notification and optionally prompt for upgrade.
105
+ * Respects CM_NO_UPDATE_CHECK env var to skip entirely.
106
+ * Only prompts in TTY environments (not pipes/CI).
107
+ */
108
+ function promptForUpgrade(info) {
109
+ return __awaiter(this, void 0, void 0, function* () {
110
+ // Skip if user disabled it
111
+ if (process.env.CM_NO_UPDATE_CHECK === '1' || process.env.CM_NO_UPDATE_CHECK === 'true') {
112
+ return;
113
+ }
114
+ // Skip if not a TTY (piped, CI, etc.)
115
+ if (!process.stdin.isTTY) {
116
+ showUpdateNotification(info);
117
+ return;
118
+ }
119
+ // Only prompt for interactive commands (not help, version, or help subcommands)
120
+ const args = process.argv.slice(2);
121
+ const skipPrompts = args.includes('--help') || args.includes('-h') || args.includes('--version') || args.includes('-V');
122
+ if (skipPrompts) {
123
+ return;
124
+ }
125
+ const chalk = require('chalk');
126
+ const readline = require('readline');
127
+ console.log('');
128
+ console.log(chalk.yellow(' ┌──────────────────────────────────────────────┐'));
129
+ console.log(chalk.yellow(' │ ') + chalk.bold('Update available!') + ` v${info.currentVersion} → v${info.latestVersion}` + chalk.yellow(' │'));
130
+ console.log(chalk.yellow(' └──────────────────────────────────────────────┘'));
131
+ console.log('');
132
+ const rl = readline.createInterface({
133
+ input: process.stdin,
134
+ output: process.stdout,
135
+ });
136
+ return new Promise((resolve) => {
137
+ rl.question(chalk.bold(' Upgrade now?') + chalk.dim(' (y/N) '), (answer) => {
138
+ rl.close();
139
+ const choice = (answer || '').trim().toLowerCase();
140
+ if (choice === 'y' || choice === 'yes') {
141
+ console.log('');
142
+ console.log(chalk.dim(' Running cm upgrade...'));
143
+ console.log('');
144
+ const { execSync } = require('child_process');
145
+ try {
146
+ execSync('npm update -g codymaster', { stdio: 'inherit', timeout: 60000 });
147
+ console.log('');
148
+ console.log(chalk.green(' ✅ Upgrade complete! Restart your shell or run:'));
149
+ console.log(chalk.dim(' hash -r'));
150
+ console.log('');
151
+ }
152
+ catch (err) {
153
+ console.log('');
154
+ console.log(chalk.red(' ❌ Upgrade failed. Try manually:'));
155
+ console.log(chalk.dim(' npm install -g codymaster@latest'));
156
+ console.log('');
157
+ }
158
+ }
159
+ else {
160
+ console.log(chalk.dim(' Skipped. Run `cm upgrade` when ready.'));
161
+ console.log('');
162
+ }
163
+ resolve();
164
+ });
165
+ });
166
+ });
167
+ }
@@ -21,6 +21,7 @@ const path_1 = __importDefault(require("path"));
21
21
  const crypto_1 = __importDefault(require("crypto"));
22
22
  const l0_indexer_1 = require("./l0-indexer");
23
23
  const token_budget_1 = require("./token-budget");
24
+ const learnings_1 = require("./learnings");
24
25
  // ─── Constants ──────────────────────────────────────────────────────────────
25
26
  const CM_DIR = '.cm';
26
27
  const CONTINUITY_FILE = 'CONTINUITY.md';
@@ -237,7 +238,8 @@ ${state.workingContext || '[No additional context]'}
237
238
  ${state.filesModified.length > 0
238
239
  ? state.filesModified.map(f => `- ${f.path}: ${f.change}`).join('\n')
239
240
  : '- [No files being modified]'}
240
- `;
241
+
242
+ ${(0, learnings_1.renderLearningsForContinuity)(projectPath, 10)}`;
241
243
  fs_1.default.writeFileSync(filePath, content, 'utf-8');
242
244
  }
243
245
  // ─── Learnings Management ───────────────────────────────────────────────────