codymaster 5.2.0 → 7.0.1

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