codymaster 4.8.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 (416) hide show
  1. package/CHANGELOG.md +331 -7
  2. package/README.md +226 -296
  3. package/dist/advisory-handoff.js +89 -0
  4. package/dist/advisory-report.js +105 -0
  5. package/dist/agent/antigravity.js +152 -0
  6. package/dist/agent/backend.js +2 -0
  7. package/dist/agent/claude.js +196 -0
  8. package/dist/agent/codex.js +204 -0
  9. package/dist/agent/copilot.js +284 -0
  10. package/dist/agent/cursor.js +211 -0
  11. package/dist/agent/factory.js +30 -0
  12. package/dist/agent/gemini.js +142 -0
  13. package/dist/agent/opencode.js +205 -0
  14. package/dist/agent/spawn-helper.js +237 -0
  15. package/dist/agent/version.js +25 -0
  16. package/dist/browse/adapter-factory.js +69 -0
  17. package/dist/browse/adapters/agent-browser-adapter.js +305 -0
  18. package/dist/browse/adapters/playwright-adapter.js +309 -0
  19. package/dist/browse/adapters/types.js +6 -0
  20. package/dist/browse/error-collector.js +132 -0
  21. package/dist/browse/event-log.js +109 -0
  22. package/dist/browse/index.js +17 -0
  23. package/dist/browse-server.js +204 -120
  24. package/dist/cli/command-registry.js +20 -0
  25. package/dist/cli/commands/bench.js +69 -0
  26. package/dist/cli/commands/brain.js +108 -0
  27. package/dist/cli/commands/dashboard.js +76 -2
  28. package/dist/cli/commands/engineering.js +326 -4
  29. package/dist/cli/commands/evolve.js +123 -0
  30. package/dist/cli/commands/install.js +160 -0
  31. package/dist/cli/commands/learn.js +181 -0
  32. package/dist/cli/commands/mcp-serve.js +104 -0
  33. package/dist/cli/commands/parallel.js +138 -0
  34. package/dist/cli/commands/quality.js +105 -0
  35. package/dist/cli/commands/stack.js +49 -0
  36. package/dist/cli/commands/update.js +159 -0
  37. package/dist/cli/update-check.js +94 -10
  38. package/dist/cm-config.js +0 -18
  39. package/dist/codybench/judges/automated.js +31 -0
  40. package/dist/codybench/runners/claude-code.js +32 -0
  41. package/dist/codybench/suites/memory-retention.js +85 -0
  42. package/dist/codybench/suites/tdd-regression.js +35 -0
  43. package/dist/codybench/suites/token-efficiency.js +55 -0
  44. package/dist/codybench/types.js +2 -0
  45. package/dist/context-db.js +157 -0
  46. package/dist/continuity.js +5 -7
  47. package/dist/dashboard.js +47 -6
  48. package/dist/data.js +35 -0
  49. package/dist/execution/tdd-gate.js +113 -0
  50. package/dist/execution-analyzer.js +138 -0
  51. package/dist/executor/cancel.js +34 -0
  52. package/dist/executor/gc.js +74 -0
  53. package/dist/executor/index.js +14 -0
  54. package/dist/executor/runner.js +70 -0
  55. package/dist/executor/workdir.js +31 -0
  56. package/dist/handoff/contracts.js +22 -0
  57. package/dist/handoff/index.js +18 -0
  58. package/dist/handoff/io.js +121 -0
  59. package/dist/index.js +7 -3
  60. package/dist/indexer/skills-lib.js +533 -0
  61. package/dist/indexer/skills-map.js +1374 -0
  62. package/dist/indexer/skills.js +16 -0
  63. package/dist/indexer/stack-detect.js +219 -0
  64. package/dist/install/copy.js +98 -0
  65. package/dist/install/engine.js +42 -0
  66. package/dist/install/paths.js +70 -0
  67. package/dist/install/platforms/_simple.js +85 -0
  68. package/dist/install/platforms/antigravity.js +91 -0
  69. package/dist/install/platforms/claude-code.js +107 -0
  70. package/dist/install/platforms/cursor.js +77 -0
  71. package/dist/install/platforms/index.js +27 -0
  72. package/dist/install/platforms/simple.js +163 -0
  73. package/dist/install/profiles.js +75 -0
  74. package/dist/install/types.js +2 -0
  75. package/dist/learning-promoter.js +246 -0
  76. package/dist/learnings.js +208 -0
  77. package/dist/mcp-context-server.js +230 -1
  78. package/dist/middleware/metrics.js +30 -0
  79. package/dist/middleware/security-headers.js +14 -0
  80. package/dist/realtime/event-bus.js +29 -0
  81. package/dist/realtime/ws-hub.js +91 -0
  82. package/dist/schemas/task-schema.js +48 -0
  83. package/dist/schemas/validate.js +18 -0
  84. package/dist/skill-chain.js +63 -1
  85. package/dist/skill-evolver.js +456 -0
  86. package/dist/skill-execution-cache.js +254 -0
  87. package/dist/skills-lock.js +96 -0
  88. package/dist/smart-brain-router.js +184 -0
  89. package/dist/sprint-pipeline.js +26 -0
  90. package/dist/storage/index.js +21 -0
  91. package/dist/storage/repos/activity-repo.js +46 -0
  92. package/dist/storage/repos/message-repo.js +39 -0
  93. package/dist/storage/repos/project-repo.js +56 -0
  94. package/dist/storage/repos/task-repo.js +142 -0
  95. package/dist/storage/services/project-service.js +49 -0
  96. package/dist/storage/services/task-service.js +97 -0
  97. package/dist/storage/sqlite.js +113 -0
  98. package/dist/storage-backend.js +10 -8
  99. package/dist/tier-classify.js +131 -0
  100. package/dist/token-budget.js +88 -0
  101. package/dist/ui/onboarding.js +51 -15
  102. package/dist/utils/cli-utils.js +7 -2
  103. package/dist/utils/design-taste.js +108 -0
  104. package/dist/utils/output-compress.js +143 -0
  105. package/dist/vibecoding-index.js +126 -0
  106. package/package.json +20 -6
  107. package/public/dashboard/app.js +52 -1
  108. package/scripts/build-skills-lock.mjs +88 -0
  109. package/scripts/build-skills.mjs +187 -28
  110. package/scripts/compress-skill.mjs +73 -0
  111. package/scripts/deprecate-skill.mjs +72 -0
  112. package/scripts/install.sh +170 -0
  113. package/scripts/mcp-bridge.js +2 -2
  114. package/scripts/postinstall.js +53 -335
  115. package/scripts/update-changelog.sh +88 -0
  116. package/scripts/validate-skills.mjs +101 -4
  117. package/skills/CLAUDE.md +0 -5
  118. package/skills/_shared/SKILL_TEMPLATE.md +62 -0
  119. package/skills/_shared/helpers.md +2 -8
  120. package/skills/cm-autopilot/scripts/autopilot.py +19 -2
  121. package/skills/cm-brainstorm-idea/SKILL.md +9 -0
  122. package/skills/cm-browse/SKILL.md +6 -0
  123. package/skills/cm-clean-code/SKILL.md +20 -0
  124. package/skills/cm-code-review/SKILL.md +21 -0
  125. package/skills/cm-codeintell/SKILL.md +9 -0
  126. package/skills/cm-conductor-worktrees/SKILL.archive.md +28 -0
  127. package/skills/cm-conductor-worktrees/SKILL.md +20 -18
  128. package/skills/cm-continuity/SKILL.md +41 -33
  129. package/skills/cm-dashboard/SKILL.archive.md +15 -0
  130. package/skills/cm-dashboard/SKILL.md +20 -9
  131. package/skills/cm-dashboard/ui/app.js +9 -1
  132. package/skills/cm-debugging/SKILL.md +9 -0
  133. package/skills/cm-design-studio/SKILL.archive.md +34 -0
  134. package/skills/cm-design-studio/SKILL.md +20 -24
  135. package/skills/cm-design-system/SKILL.md +1 -0
  136. package/skills/cm-ecosystem-roadmap/SKILL.md +4 -0
  137. package/skills/cm-engineering-meta/SKILL.archive.md +73 -0
  138. package/skills/cm-engineering-meta/SKILL.md +19 -62
  139. package/skills/cm-execution/SKILL.md +98 -0
  140. package/skills/cm-git-worktrees/SKILL.archive.md +157 -0
  141. package/skills/cm-git-worktrees/SKILL.md +15 -146
  142. package/skills/cm-guardian-runtime/SKILL.md +5 -1
  143. package/skills/cm-identity-guard/SKILL.md +8 -0
  144. package/skills/cm-mcp-engineering/SKILL.md +4 -0
  145. package/skills/cm-planning/SKILL.md +63 -92
  146. package/skills/cm-post-deploy-canary/SKILL.archive.md +22 -0
  147. package/skills/cm-post-deploy-canary/SKILL.md +20 -12
  148. package/skills/cm-project-bootstrap/SKILL.md +11 -0
  149. package/skills/cm-qa-visual-cli/SKILL.archive.md +22 -0
  150. package/skills/cm-qa-visual-cli/SKILL.md +19 -11
  151. package/skills/cm-quality-gate/SKILL.md +38 -0
  152. package/skills/cm-retro-cli/SKILL.md +4 -0
  153. package/skills/cm-safe-deploy/SKILL.md +9 -0
  154. package/skills/cm-second-opinion-cli/SKILL.archive.md +23 -0
  155. package/skills/cm-second-opinion-cli/SKILL.md +20 -13
  156. package/skills/cm-secret-shield/SKILL.archive.md +580 -0
  157. package/skills/cm-secret-shield/SKILL.md +15 -569
  158. package/skills/cm-security-gate/SKILL.archive.md +239 -0
  159. package/skills/cm-security-gate/SKILL.md +16 -228
  160. package/skills/cm-skill-chain/SKILL.md +25 -4
  161. package/skills/cm-skill-evolution/SKILL.md +83 -0
  162. package/skills/cm-skill-health/SKILL.archive.md +83 -0
  163. package/skills/cm-skill-health/SKILL.md +26 -0
  164. package/skills/cm-skill-index/SKILL.md +19 -3
  165. package/skills/cm-skill-mastery/SKILL.archive.md +156 -0
  166. package/skills/cm-skill-mastery/SKILL.md +16 -146
  167. package/skills/cm-skill-search/SKILL.archive.md +49 -0
  168. package/skills/cm-skill-search/SKILL.md +26 -0
  169. package/skills/cm-skill-share/SKILL.archive.md +58 -0
  170. package/skills/cm-skill-share/SKILL.md +26 -0
  171. package/skills/cm-sprint-bus/SKILL.md +13 -0
  172. package/skills/cm-start/SKILL.md +17 -10
  173. package/skills/cm-tdd/SKILL.md +21 -2
  174. package/skills/cm-terminal/SKILL.md +15 -0
  175. package/skills/cm-test-gate/SKILL.archive.md +245 -0
  176. package/skills/cm-test-gate/SKILL.md +15 -234
  177. package/skills/cm-ui-preview/SKILL.archive.md +153 -0
  178. package/skills/cm-ui-preview/SKILL.md +16 -143
  179. package/skills/cm-ux-master/cli/uxmaster/commands/mcp.py +1 -1
  180. package/skills/cm-ux-master/mcp/mcp-config.json +1 -1
  181. package/skills/cm-ux-master/mcp/server.py +2 -2
  182. package/skills/profiles/design.txt +1 -1
  183. package/skills/profiles/full.txt +4 -10
  184. package/skills/profiles/growth.txt +8 -8
  185. package/skills/profiles/knowledge.txt +1 -1
  186. package/skills/profiles/top35.json +41 -0
  187. package/adapters/antigravity.js +0 -15
  188. package/adapters/claude-code.js +0 -17
  189. package/adapters/cursor.js +0 -16
  190. package/install.sh +0 -1125
  191. package/scripts/viking-demo.ts +0 -105
  192. package/skills/cm-ads-tracker/SKILL.md +0 -401
  193. package/skills/cm-ads-tracker/evals/evals.json +0 -55
  194. package/skills/cm-ads-tracker/references/gtm-architecture.md +0 -321
  195. package/skills/cm-ads-tracker/references/industry-events.md +0 -294
  196. package/skills/cm-ads-tracker/references/platforms-api.md +0 -238
  197. package/skills/cm-ads-tracker/templates/capi-payload.md +0 -79
  198. package/skills/cm-ads-tracker/templates/datalayer-push.js +0 -104
  199. package/skills/cm-ads-tracker/templates/gtm-variables.js +0 -56
  200. package/skills/cm-auto-publisher/SKILL.md +0 -81
  201. package/skills/cm-booking-calendar/SKILL.md +0 -521
  202. package/skills/cm-booking-calendar/references/industry-patterns.md +0 -527
  203. package/skills/cm-booking-calendar/templates/booking-form.css +0 -626
  204. package/skills/cm-booking-calendar/templates/booking-form.html +0 -477
  205. package/skills/cm-booking-calendar/templates/calendar-engine.js +0 -419
  206. package/skills/cm-booking-calendar/templates/calendar-export.js +0 -395
  207. package/skills/cm-booking-calendar/templates/reminder-config.js +0 -629
  208. package/skills/cm-content-factory/.content-factory-state.json +0 -132
  209. package/skills/cm-content-factory/.git 2/logs/refs/heads/main +0 -1
  210. package/skills/cm-content-factory/.git 2/logs/refs/remotes/origin/main +0 -1
  211. package/skills/cm-content-factory/.git 2/objects/02/fb0956734b5f8ba3f918b7defd04a89cfe0076 +0 -0
  212. package/skills/cm-content-factory/.git 2/objects/08/1e129d75dc6feac6c02037272e6bd1a04e3324 +0 -0
  213. package/skills/cm-content-factory/.git 2/objects/0c/5393416f3c5e01c9a655a802bff0dd52f76f0a +0 -0
  214. package/skills/cm-content-factory/.git 2/objects/10/0b9be46978a946a77188f68be725098a122001 +0 -0
  215. package/skills/cm-content-factory/.git 2/objects/10/cf041167fc9843610eb3d90259ef3396315fdc +0 -0
  216. package/skills/cm-content-factory/.git 2/objects/12/5e19538dd6e1338ffe74f6c4c165b00435bf48 +0 -0
  217. package/skills/cm-content-factory/.git 2/objects/16/a9b9d0088d5c1347628b45a2620b479d8ad57c +0 -0
  218. package/skills/cm-content-factory/.git 2/objects/17/8c2a9ef93c33ae4eec9d58e82321f9229843a1 +0 -0
  219. package/skills/cm-content-factory/.git 2/objects/25/397ae41d09104d763bdcac2695209d85cdea89 +0 -0
  220. package/skills/cm-content-factory/.git 2/objects/2f/a836b7947f2d458e1f639788bf4bb0983a3305 +0 -0
  221. package/skills/cm-content-factory/.git 2/objects/3a/baaaf0a1c0909c0828335791557125fba911e0 +0 -0
  222. package/skills/cm-content-factory/.git 2/objects/42/2924221b81f5ce3c4e4daac9a64a24f9b01f9a +0 -0
  223. package/skills/cm-content-factory/.git 2/objects/42/ec0ce707447dc11446a34c9995fb8533801731 +0 -0
  224. package/skills/cm-content-factory/.git 2/objects/46/e43ce92866d56ce74b1d750db307cfe6154a15 +0 -0
  225. package/skills/cm-content-factory/.git 2/objects/48/5e41b633c63f55b8277bcc59f44f67681f671a +0 -0
  226. package/skills/cm-content-factory/.git 2/objects/49/49c596a3a89fa240642acd95dd3258e261eb09 +0 -0
  227. package/skills/cm-content-factory/.git 2/objects/50/9d42d8412ef8eaf7f7e138476bac2e4d10ce60 +0 -0
  228. package/skills/cm-content-factory/.git 2/objects/55/0c8c389d981b463ef849aeb792d8be3ccb6ec8 +0 -0
  229. package/skills/cm-content-factory/.git 2/objects/5d/82d3b18410cdda3ace3677436f0cb599dbe2d2 +0 -0
  230. package/skills/cm-content-factory/.git 2/objects/60/0617c58e871a38b33bf29e282d132bb3c381ad +0 -0
  231. package/skills/cm-content-factory/.git 2/objects/6a/8369a99c687b7245c92ffaf0e0f0dab9014504 +0 -0
  232. package/skills/cm-content-factory/.git 2/objects/79/bea435d40ab531c1aaf6be0432c6a5b7aaed21 +0 -0
  233. package/skills/cm-content-factory/.git 2/objects/7e/5ebd79251c2f14e4aceb86c74b6b6daae6b500 +0 -0
  234. package/skills/cm-content-factory/.git 2/objects/81/98a822a60178d6d5023ddb3e222cddf048742e +0 -0
  235. package/skills/cm-content-factory/.git 2/objects/86/0a0e1943dfe53411d2e499a1f16f46a96ef758 +0 -0
  236. package/skills/cm-content-factory/.git 2/objects/86/971fb55fdc081fdbae52376f0f13e57a4e9b04 +0 -0
  237. package/skills/cm-content-factory/.git 2/objects/88/b89dd609a0a03f8d4fe8bfde20d5b8fc1d326d +0 -0
  238. package/skills/cm-content-factory/.git 2/objects/90/8737edb6b7809e32cc01590b4e08ba42a9d40d +0 -0
  239. package/skills/cm-content-factory/.git 2/objects/93/d5a8a9a7d4fb7f11491cb596a6880528725118 +0 -0
  240. package/skills/cm-content-factory/.git 2/objects/98/46a2ab81d0c3b3eb00ef88fc56989aa7e9f316 +0 -0
  241. package/skills/cm-content-factory/.git 2/objects/9b/d8dd1e49cf274eaf9c555f3ab39dce7af5715e +0 -0
  242. package/skills/cm-content-factory/.git 2/objects/a1/13329fb0cec96ae78b222d33a24c3b5bc7fa1f +0 -0
  243. package/skills/cm-content-factory/.git 2/objects/a9/e6effe626e8a3aea3a8fc3364b492191c6e7d0 +0 -0
  244. package/skills/cm-content-factory/.git 2/objects/ad/6de7e48d9782cca9353d1ff0aa1aab7fe1df85 +0 -0
  245. package/skills/cm-content-factory/.git 2/objects/af/54ae316f771ff692e299ffcd8bf2f06b413b59 +0 -0
  246. package/skills/cm-content-factory/.git 2/objects/b0/4cb8b0b00dad633e731c1472161419e738d674 +0 -0
  247. package/skills/cm-content-factory/.git 2/objects/b3/094abb0b9ed46419b269e4a4e36a459690e3b0 +0 -0
  248. package/skills/cm-content-factory/.git 2/objects/b9/435c5d4baac2cfc5c83009ddd27b46b60db5f1 +0 -0
  249. package/skills/cm-content-factory/.git 2/objects/ba/5da17dbaec5ec2dcfdfd126aead518d1171d5c +0 -0
  250. package/skills/cm-content-factory/.git 2/objects/c0/bf58703aa258ba5dd63083bebaec8f223d844c +0 -0
  251. package/skills/cm-content-factory/.git 2/objects/c4/701a34edf1fc1bad58ccc57bd03f9426acb59a +0 -0
  252. package/skills/cm-content-factory/.git 2/objects/c7/5ccce9a4e5cc74d9b3174550cf6d993ca43638 +0 -0
  253. package/skills/cm-content-factory/.git 2/objects/c7/710d59b5a35b0f1f0a0399386643a0bd94c929 +0 -0
  254. package/skills/cm-content-factory/.git 2/objects/d1/fe58237112e953e5fec52da22cf38e08be3df9 +0 -5
  255. package/skills/cm-content-factory/.git 2/objects/d2/2bbe9fd2f74c95bc5583e803f5e435f1e2cd86 +0 -0
  256. package/skills/cm-content-factory/.git 2/objects/d7/e72852ea2bff74581dbf247d400120086229f4 +0 -0
  257. package/skills/cm-content-factory/.git 2/objects/d8/d4c3b5553e4fd72807e1d4b49ef07d9ef3ac35 +0 -0
  258. package/skills/cm-content-factory/.git 2/objects/dc/75050c2876f6a02ae2a53a3c886f395b622977 +0 -0
  259. package/skills/cm-content-factory/.git 2/objects/ee/e8546f95acec500187c08a28a8b9ee02db0dec +0 -0
  260. package/skills/cm-content-factory/.git 2/objects/ef/263c059208b416c2146434f10cb2b9fabcba16 +0 -0
  261. package/skills/cm-content-factory/.git 2/objects/f3/ae597e84d9a59b88acd21c99bde2eaf686d785 +0 -0
  262. package/skills/cm-content-factory/.git 2/objects/f3/f6f5673c821d3d8e76fa267a9e882e7a5387ea +0 -0
  263. package/skills/cm-content-factory/.git 2/objects/f9/6e6d0ad02624dd11d5848594d056caef7a5e8b +0 -0
  264. package/skills/cm-content-factory/.git 2/objects/ff/278988fc1edf0db3abcf18de795f4cc0b4f3e1 +0 -0
  265. package/skills/cm-content-factory/.git 2/refs/heads/main +0 -1
  266. package/skills/cm-content-factory/.git 2/refs/remotes/origin/main +0 -1
  267. package/skills/cm-content-factory/.pytest_cache 2/v/cache/nodeids +0 -76
  268. package/skills/cm-content-factory/.pytest_cache 2/v/cache/stepwise +0 -1
  269. package/skills/cm-content-factory/AGENTS.md +0 -61
  270. package/skills/cm-content-factory/CLAUDE.md +0 -63
  271. package/skills/cm-content-factory/CURSOR.md +0 -43
  272. package/skills/cm-content-factory/Content Factory.zip +0 -0
  273. package/skills/cm-content-factory/SKILL.md +0 -416
  274. package/skills/cm-content-factory/cf +0 -313
  275. package/skills/cm-content-factory/config.schema.json +0 -397
  276. package/skills/cm-content-factory/dashboard/app.js +0 -556
  277. package/skills/cm-content-factory/dashboard/index.html +0 -397
  278. package/skills/cm-content-factory/dashboard/style.css +0 -1211
  279. package/skills/cm-content-factory/examples/01-real-estate.config.json +0 -146
  280. package/skills/cm-content-factory/examples/02-personal-finance.config.json +0 -146
  281. package/skills/cm-content-factory/examples/03-health-wellness.config.json +0 -147
  282. package/skills/cm-content-factory/examples/04-saas-software.config.json +0 -147
  283. package/skills/cm-content-factory/examples/05-legal-services.config.json +0 -147
  284. package/skills/cm-content-factory/examples/06-insurance.config.json +0 -146
  285. package/skills/cm-content-factory/examples/07-ecommerce-dropship.config.json +0 -146
  286. package/skills/cm-content-factory/examples/08-online-education.config.json +0 -147
  287. package/skills/cm-content-factory/examples/09-crypto-defi.config.json +0 -147
  288. package/skills/cm-content-factory/examples/10-beauty-skincare.config.json +0 -147
  289. package/skills/cm-content-factory/examples/11-home-services.config.json +0 -146
  290. package/skills/cm-content-factory/examples/12-dental-clinic.config.json +0 -147
  291. package/skills/cm-content-factory/examples/13-pet-care.config.json +0 -147
  292. package/skills/cm-content-factory/examples/14-travel-hospitality.config.json +0 -147
  293. package/skills/cm-content-factory/examples/15-ai-automation.config.json +0 -147
  294. package/skills/cm-content-factory/examples/16-wedding-events.config.json +0 -147
  295. package/skills/cm-content-factory/examples/17-fitness-coaching.config.json +0 -148
  296. package/skills/cm-content-factory/examples/18-cybersecurity.config.json +0 -147
  297. package/skills/cm-content-factory/examples/19-food-restaurant.config.json +0 -148
  298. package/skills/cm-content-factory/examples/20-solar-energy.config.json +0 -147
  299. package/skills/cm-content-factory/examples/fitness-blog.config.json +0 -116
  300. package/skills/cm-content-factory/examples/tech-blog.config.json +0 -107
  301. package/skills/cm-content-factory/extensions/EXTENSION_GUIDE.md +0 -72
  302. package/skills/cm-content-factory/extensions/hooks.py +0 -126
  303. package/skills/cm-content-factory/extensions/openclaw_adapter.py +0 -132
  304. package/skills/cm-content-factory/landing/docs/content/changelog.md +0 -36
  305. package/skills/cm-content-factory/landing/docs/content/deployment.md +0 -46
  306. package/skills/cm-content-factory/landing/docs/content/execution-flow.md +0 -67
  307. package/skills/cm-content-factory/landing/docs/content/openspace.md +0 -27
  308. package/skills/cm-content-factory/landing/docs/content/openviking.md +0 -33
  309. package/skills/cm-content-factory/landing/docs/content/use-cases.md +0 -26
  310. package/skills/cm-content-factory/landing/docs/content/v5-intro.md +0 -28
  311. package/skills/cm-content-factory/landing/docs/index.html +0 -240
  312. package/skills/cm-content-factory/landing/index.html +0 -680
  313. package/skills/cm-content-factory/landing/script.js +0 -143
  314. package/skills/cm-content-factory/landing/style.css +0 -1216
  315. package/skills/cm-content-factory/landing/translations.js +0 -508
  316. package/skills/cm-content-factory/logs/events.jsonl +0 -11
  317. package/skills/cm-content-factory/profiles/_template.profile.json +0 -231
  318. package/skills/cm-content-factory/profiles/finance.profile.json +0 -278
  319. package/skills/cm-content-factory/profiles/legal.profile.json +0 -263
  320. package/skills/cm-content-factory/profiles/medical-research.profile.json +0 -321
  321. package/skills/cm-content-factory/profiles/technology.profile.json +0 -275
  322. package/skills/cm-content-factory/scripts/agent_dispatcher.py +0 -266
  323. package/skills/cm-content-factory/scripts/audit.py +0 -106
  324. package/skills/cm-content-factory/scripts/dashboard_server.py +0 -225
  325. package/skills/cm-content-factory/scripts/deploy.py +0 -146
  326. package/skills/cm-content-factory/scripts/extract.py +0 -132
  327. package/skills/cm-content-factory/scripts/landing_generator.py +0 -459
  328. package/skills/cm-content-factory/scripts/memory.py +0 -521
  329. package/skills/cm-content-factory/scripts/monetize.py +0 -239
  330. package/skills/cm-content-factory/scripts/pipeline.py +0 -357
  331. package/skills/cm-content-factory/scripts/plan.py +0 -163
  332. package/skills/cm-content-factory/scripts/publish.py +0 -145
  333. package/skills/cm-content-factory/scripts/research.py +0 -337
  334. package/skills/cm-content-factory/scripts/scaffold.py +0 -464
  335. package/skills/cm-content-factory/scripts/scoreboard.py +0 -336
  336. package/skills/cm-content-factory/scripts/seo.py +0 -90
  337. package/skills/cm-content-factory/scripts/state_manager.py +0 -320
  338. package/skills/cm-content-factory/scripts/token_manager.py +0 -268
  339. package/skills/cm-content-factory/scripts/validate.py +0 -221
  340. package/skills/cm-content-factory/scripts/wizard.py +0 -329
  341. package/skills/cm-content-factory/scripts/write.py +0 -93
  342. package/skills/cm-content-factory/sites/docs-site/src/assets/houston.webp +0 -0
  343. package/skills/cm-content-factory/sites/docs-site/src/content/docs/architecture.md +0 -90
  344. package/skills/cm-content-factory/sites/docs-site/src/content/docs/data-flow.md +0 -54
  345. package/skills/cm-content-factory/sites/docs-site/src/content/docs/deployment.md +0 -38
  346. package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/index.md +0 -65
  347. package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/lc-content-lifecycle.md +0 -48
  348. package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/seq-write-mode.md +0 -39
  349. package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/uj-first-batch.md +0 -42
  350. package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/wf-content-pipeline.md +0 -51
  351. package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/wf-learning-cycle.md +0 -52
  352. package/skills/cm-content-factory/sites/docs-site/src/content/docs/getting-started/configuration.md +0 -86
  353. package/skills/cm-content-factory/sites/docs-site/src/content/docs/getting-started/installation.md +0 -80
  354. package/skills/cm-content-factory/sites/docs-site/src/content/docs/getting-started/intro.md +0 -58
  355. package/skills/cm-content-factory/sites/docs-site/src/content/docs/index.md +0 -102
  356. package/skills/cm-content-factory/sites/docs-site/src/content/docs/jtbd/index.md +0 -45
  357. package/skills/cm-content-factory/sites/docs-site/src/content/docs/jtbd/optimize-seo.md +0 -29
  358. package/skills/cm-content-factory/sites/docs-site/src/content/docs/jtbd/scale-content-production.md +0 -55
  359. package/skills/cm-content-factory/sites/docs-site/src/content/docs/jtbd/standardize-quality.md +0 -29
  360. package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/buyer-cmo-huong.md +0 -41
  361. package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/buyer-content-lead-khoa.md +0 -40
  362. package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/index.md +0 -56
  363. package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/user-content-manager-lan.md +0 -46
  364. package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/user-seo-minh.md +0 -45
  365. package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/user-writer-tu.md +0 -45
  366. package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/content-pipeline.md +0 -108
  367. package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/index.md +0 -22
  368. package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/memory-system.md +0 -52
  369. package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/seo-optimization.md +0 -58
  370. package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/troubleshooting-guide.md +0 -92
  371. package/skills/cm-content-factory/sites/docs-site/src/styles/custom.css +0 -575
  372. package/skills/cm-content-factory/tests/conftest.py +0 -66
  373. package/skills/cm-content-factory/tests/test_agent_dispatcher.py +0 -125
  374. package/skills/cm-content-factory/tests/test_memory.py +0 -128
  375. package/skills/cm-content-factory/tests/test_pipeline.py +0 -107
  376. package/skills/cm-content-factory/tests/test_research.py +0 -56
  377. package/skills/cm-content-factory/tests/test_state_manager.py +0 -131
  378. package/skills/cm-content-factory/tests/test_token_manager.py +0 -110
  379. package/skills/cm-content-factory/tests/test_wizard.py +0 -121
  380. package/skills/cm-cro-methodology/SKILL.md +0 -290
  381. package/skills/cm-cro-methodology/references/COPYWRITING.md +0 -178
  382. package/skills/cm-cro-methodology/references/OBJECTIONS.md +0 -135
  383. package/skills/cm-cro-methodology/references/PERSUASION.md +0 -158
  384. package/skills/cm-cro-methodology/references/RESEARCH.md +0 -220
  385. package/skills/cm-cro-methodology/references/funnel-analysis.md +0 -365
  386. package/skills/cm-cro-methodology/references/testing-methodology.md +0 -330
  387. package/skills/cm-google-form/SKILL.md +0 -266
  388. package/skills/cm-google-form/templates/apps-script.js +0 -55
  389. package/skills/cm-google-form/templates/form-markup.html +0 -110
  390. package/skills/cm-google-form/templates/form-submit.js +0 -201
  391. package/skills/cm-google-form/templates/toast.css +0 -152
  392. package/skills/cm-growth-hacking/SKILL.md +0 -282
  393. package/skills/cm-growth-hacking/bottom-sheet-engine.md +0 -261
  394. package/skills/cm-growth-hacking/calendar-integration.md +0 -264
  395. package/skills/cm-growth-hacking/references/engagement-patterns.md +0 -346
  396. package/skills/cm-growth-hacking/templates/bottom-sheet.css +0 -528
  397. package/skills/cm-growth-hacking/templates/bottom-sheet.js +0 -269
  398. package/skills/cm-growth-hacking/templates/calendar-cta.js +0 -213
  399. package/skills/cm-growth-hacking/templates/tracking-events.js +0 -211
  400. package/skills/cm-growth-hacking/templates/trigger-manager.js +0 -254
  401. package/skills/cm-growth-hacking/tracking-events.md +0 -246
  402. package/skills/cm-growth-hacking/trigger-system.md +0 -342
  403. package/skills/cm-jtbd/SKILL.md +0 -98
  404. package/skills/cm-notebooklm/SKILL.md +0 -156
  405. package/skills/cm-notebooklm/references/command_reference.md +0 -94
  406. package/skills/cm-notebooklm/references/workflows.md +0 -60
  407. package/skills/cm-notebooklm/resources/knowledge_sources.md +0 -106
  408. package/skills/cm-notebooklm/scripts/brain-sync.sh +0 -453
  409. package/skills/cm-notebooklm/scripts/graduate_wisdom.py +0 -101
  410. package/skills/cm-readit/SKILL.md +0 -289
  411. package/skills/cm-readit/audio-player.md +0 -206
  412. package/skills/cm-readit/examples/blog-reader.js +0 -352
  413. package/skills/cm-readit/examples/voice-cro.js +0 -390
  414. package/skills/cm-readit/tts-engine.md +0 -262
  415. package/skills/cm-readit/ui-patterns.md +0 -362
  416. package/skills/cm-readit/voice-cro.md +0 -223
@@ -8,6 +8,10 @@ exports.loadBudget = loadBudget;
8
8
  exports.checkBudget = checkBudget;
9
9
  exports.estimateTokens = estimateTokens;
10
10
  exports.generateBudgetReport = generateBudgetReport;
11
+ exports.getDefaultTierBudgets = getDefaultTierBudgets;
12
+ exports.checkTierBudget = checkTierBudget;
13
+ exports.generateTierReport = generateTierReport;
14
+ exports.formatSavingsReport = formatSavingsReport;
11
15
  const fs_1 = __importDefault(require("fs"));
12
16
  const path_1 = __importDefault(require("path"));
13
17
  // ─── Constants ──────────────────────────────────────────────────────────────
@@ -106,3 +110,87 @@ function generateBudgetReport(budget) {
106
110
  lines.push(`${'TOTAL'.padEnd(25)} ${sum.toLocaleString().padStart(10)} ${(((sum / total) * 100).toFixed(2) + '%').padStart(10)}`);
107
111
  return lines.join('\n');
108
112
  }
113
+ // ─── Per-Tier Budgets (Smart Brain Router integration) ───────────────────────
114
+ /**
115
+ * Default per-tier token budgets for the 5-Tier Brain architecture.
116
+ * Used by SmartBrainRouter to enforce tier-level spending limits.
117
+ */
118
+ function getDefaultTierBudgets() {
119
+ return [
120
+ { tier: 1, label: 'Sensory', soft: 0, hard: 0 }, // Always on, zero cost
121
+ { tier: 2, label: 'Working', soft: 500, hard: 1000 }, // CONTINUITY.md
122
+ { tier: 3, label: 'Long-term', soft: 500, hard: 3000 }, // Learnings/decisions
123
+ { tier: 4, label: 'Semantic', soft: 0, hard: 2000 }, // qmd vector search
124
+ { tier: 5, label: 'Structural', soft: 0, hard: 4000 }, // CodeGraph AST
125
+ ];
126
+ }
127
+ /**
128
+ * Check if a tier's token usage is within budget.
129
+ */
130
+ function checkTierBudget(tierBudgets, tier, tokenCount, enforcement = 'soft') {
131
+ const budget = tierBudgets.find(tb => tb.tier === tier);
132
+ if (!budget) {
133
+ return { allowed: false, remaining: 0, suggestion: `Unknown tier ${tier}` };
134
+ }
135
+ const limit = enforcement === 'hard' ? budget.hard : budget.soft;
136
+ if (limit === 0) {
137
+ // Tier is disabled by default (soft=0), but allowed up to hard limit
138
+ if (tokenCount <= budget.hard) {
139
+ return { allowed: true, remaining: budget.hard - tokenCount };
140
+ }
141
+ return {
142
+ allowed: false,
143
+ remaining: budget.hard - tokenCount,
144
+ suggestion: `Tier ${tier} (${budget.label}) exceeds hard limit of ${budget.hard} tokens.`,
145
+ };
146
+ }
147
+ const remaining = limit - tokenCount;
148
+ if (remaining >= 0) {
149
+ return { allowed: true, remaining };
150
+ }
151
+ return {
152
+ allowed: enforcement !== 'hard',
153
+ remaining,
154
+ suggestion: `Tier ${tier} (${budget.label}) over by ~${Math.abs(remaining)} tokens. Consider L0 loading.`,
155
+ };
156
+ }
157
+ /**
158
+ * Generate a tier-level budget report.
159
+ */
160
+ function generateTierReport(tierBudgets) {
161
+ const lines = [
162
+ `Brain Tier Budget Report`,
163
+ '─'.repeat(60),
164
+ `${'Tier'.padEnd(6)} ${'Label'.padEnd(12)} ${'Soft'.padStart(8)} ${'Hard'.padStart(8)} ${'Status'.padStart(10)}`,
165
+ '─'.repeat(60),
166
+ ];
167
+ for (const tb of tierBudgets) {
168
+ const status = tb.soft === 0 ? 'off/demand' : 'active';
169
+ lines.push(`${String(tb.tier).padEnd(6)} ${tb.label.padEnd(12)} ${tb.soft.toLocaleString().padStart(8)} ${tb.hard.toLocaleString().padStart(8)} ${status.padStart(10)}`);
170
+ }
171
+ const totalSoft = tierBudgets.reduce((s, tb) => s + tb.soft, 0);
172
+ const totalHard = tierBudgets.reduce((s, tb) => s + tb.hard, 0);
173
+ lines.push('─'.repeat(60));
174
+ lines.push(`${'TOTAL'.padEnd(18)} ${totalSoft.toLocaleString().padStart(8)} ${totalHard.toLocaleString().padStart(8)}`);
175
+ return lines.join('\n');
176
+ }
177
+ /**
178
+ * Format token savings report for CLI display.
179
+ */
180
+ function formatSavingsReport(savings) {
181
+ const lines = [
182
+ `💰 Token Savings Report`,
183
+ '─'.repeat(50),
184
+ `Brain routing: ~${savings.brainRoutingSaved.toLocaleString()} tokens saved`,
185
+ `Cache hits: ~${savings.cacheHitsSaved.toLocaleString()} tokens saved`,
186
+ `Progressive loading: ~${savings.progressiveLoadSaved.toLocaleString()} tokens saved`,
187
+ '─'.repeat(50),
188
+ `Total saved: ~${savings.totalSaved.toLocaleString()} tokens`,
189
+ `Tasks this session: ${savings.sessionTasks}`,
190
+ ];
191
+ if (savings.sessionTasks > 0) {
192
+ const avgSaved = Math.round(savings.totalSaved / savings.sessionTasks);
193
+ lines.push(`Avg saved per task: ~${avgSaved.toLocaleString()} tokens`);
194
+ }
195
+ return lines.join('\n');
196
+ }
@@ -121,34 +121,70 @@ function runOnboarding(version) {
121
121
  profile.firstRunAt = new Date().toISOString();
122
122
  (0, hooks_1.saveProfile)(profile);
123
123
  }
124
- // ─── STEP 2: Platform ──────────────────────────
124
+ // ─── STEP 2: Platform(s) + Install ─────────────
125
125
  if (startStep < 2) {
126
126
  console.log('');
127
127
  console.log(` ${(0, theme_1.success)('✓')} ${(0, theme_1.dim)('Nice to meet you,')} ${(0, theme_1.brand)(profile.userName)}${(0, theme_1.dim)('!')}`);
128
128
  console.log('');
129
129
  console.log((0, box_1.renderStepProgress)(2, TOTAL_STEPS));
130
130
  console.log('');
131
- const platformResult = yield p.select({
132
- message: 'Where do you code?',
131
+ const { detectPlatforms, installToMany } = yield Promise.resolve().then(() => __importStar(require('../install/engine')));
132
+ const detected = detectPlatforms();
133
+ const installedIds = detected.filter((d) => d.installed).map((d) => d.platform.id);
134
+ const platformsResult = yield p.multiselect({
135
+ message: 'Which AI coding platforms do you use? (space to toggle, enter to confirm)',
136
+ options: detected.map((d) => ({
137
+ label: `${d.platform.emoji} ${d.platform.name}`,
138
+ value: d.platform.id,
139
+ hint: d.installed ? 'detected' : undefined,
140
+ })),
141
+ initialValues: installedIds.length > 0 ? installedIds : undefined,
142
+ required: true,
143
+ });
144
+ if (p.isCancel(platformsResult)) {
145
+ profile.onboardingStep = 1;
146
+ (0, hooks_1.saveProfile)(profile);
147
+ console.log((0, theme_1.dim)('\n No worries! Run cm again to continue. 👋\n'));
148
+ process.exit(0);
149
+ }
150
+ const chosenPlatforms = platformsResult;
151
+ const profileResult = yield p.select({
152
+ message: 'Pick a skill profile (you can change later):',
133
153
  options: [
134
- { label: '✦ Google Antigravity (Gemini)', value: 'gemini', hint: 'recommended' },
135
- { label: '🟣 Claude Code', value: 'claude', hint: 'plugin system' },
136
- { label: '⬡ Cursor', value: 'cursor', hint: 'rules directory' },
137
- { label: '🌊 Windsurf', value: 'windsurf', hint: 'rules directory' },
138
- { label: '🔶 Cline / RooCode', value: 'cline', hint: 'skills directory' },
139
- { label: '📦 OpenCode', value: 'opencode', hint: 'skills directory' },
140
- { label: '🪁 Kiro', value: 'kiro', hint: 'steering docs' },
141
- { label: '🤖 GitHub Copilot', value: 'copilot', hint: 'auto-context' },
142
- { label: '🔧 Other / Not sure', value: 'other', hint: 'auto-detect' },
154
+ { label: 'Core', value: 'core', hint: 'planning + tdd + debugging + deploy (recommended)' },
155
+ { label: 'Growth', value: 'growth', hint: 'content + ads + CRO + booking' },
156
+ { label: 'Design', value: 'design', hint: 'UI preview + UX laws + design system' },
157
+ { label: 'Knowledge', value: 'knowledge', hint: 'docs + memory + continuity' },
158
+ { label: 'Full', value: 'full', hint: 'everything (~56 skills)' },
143
159
  ],
160
+ initialValue: 'core',
144
161
  });
145
- if (p.isCancel(platformResult)) {
162
+ if (p.isCancel(profileResult)) {
146
163
  profile.onboardingStep = 1;
147
164
  (0, hooks_1.saveProfile)(profile);
148
- console.log((0, theme_1.dim)('\n No worries! Run cm again to continue. 👋\n'));
149
165
  process.exit(0);
150
166
  }
151
- profile.platform = platformResult;
167
+ const skillProfile = profileResult;
168
+ const spinner = p.spinner();
169
+ spinner.start(`Installing skills to ${chosenPlatforms.length} platform(s)...`);
170
+ let results = [];
171
+ try {
172
+ results = yield installToMany(chosenPlatforms, {
173
+ scope: 'user',
174
+ profile: skillProfile,
175
+ });
176
+ spinner.stop(`Installed to ${chosenPlatforms.length} platform(s).`);
177
+ }
178
+ catch (err) {
179
+ spinner.stop(`Install failed: ${err.message}`);
180
+ }
181
+ for (const r of results) {
182
+ console.log(` ${(0, theme_1.success)('✓')} ${(0, theme_1.brand)(r.platform)} ${(0, theme_1.dim)('→ ' + r.targetPath)} ${(0, theme_1.dim)(`(${r.installed.length} skills)`)}`);
183
+ }
184
+ console.log('');
185
+ profile.platform = chosenPlatforms[0] || '';
186
+ profile.platforms = chosenPlatforms;
187
+ profile.skillProfile = skillProfile;
152
188
  profile.onboardingStep = 2;
153
189
  (0, hooks_1.saveProfile)(profile);
154
190
  }
@@ -25,8 +25,13 @@ function padRight(str, len) {
25
25
  */
26
26
  function openUrl(url) {
27
27
  const plat = os_1.default.platform();
28
- const command = plat === 'darwin' ? 'open' : plat === 'win32' ? 'start' : 'xdg-open';
29
- (0, child_process_1.exec)(`${command} "${url}"`);
28
+ if (plat === 'win32') {
29
+ (0, child_process_1.execFile)('cmd.exe', ['/c', 'start', '""', url]);
30
+ }
31
+ else {
32
+ const command = plat === 'darwin' ? 'open' : 'xdg-open';
33
+ (0, child_process_1.execFile)(command, [url]);
34
+ }
30
35
  }
31
36
  /**
32
37
  * Formats a date string relative to now (e.g. "2m ago", "1h ago").
@@ -0,0 +1,108 @@
1
+ "use strict";
2
+ /**
3
+ * Design taste memory — per-project log of approved/rejected design choices
4
+ * (color, font, layout). Each entry decays 5 % per week so old taste does
5
+ * not lock in stale aesthetics; entries with weight < 0.1 are dropped on read.
6
+ *
7
+ * Storage: `.cm/design-taste.json` (JSON, not JSONL — small file, full rewrite).
8
+ *
9
+ * Consumed by cm-design-system and cm-ui-preview to bias token / prompt
10
+ * generation toward what the user has already approved.
11
+ */
12
+ var __importDefault = (this && this.__importDefault) || function (mod) {
13
+ return (mod && mod.__esModule) ? mod : { "default": mod };
14
+ };
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.tastePath = tastePath;
17
+ exports.recordTaste = recordTaste;
18
+ exports.decayEntries = decayEntries;
19
+ exports.loadTaste = loadTaste;
20
+ exports.topTaste = topTaste;
21
+ exports.compactTaste = compactTaste;
22
+ const fs_1 = __importDefault(require("fs"));
23
+ const path_1 = __importDefault(require("path"));
24
+ const FILENAME = path_1.default.join('.cm', 'design-taste.json');
25
+ const DECAY_PER_WEEK = 0.05;
26
+ const MIN_WEIGHT = 0.1;
27
+ const MS_PER_WEEK = 7 * 24 * 60 * 60 * 1000;
28
+ function tastePath(projectPath) {
29
+ return path_1.default.join(projectPath, FILENAME);
30
+ }
31
+ function readRaw(p) {
32
+ if (!fs_1.default.existsSync(p))
33
+ return { version: 1, entries: [] };
34
+ try {
35
+ const raw = JSON.parse(fs_1.default.readFileSync(p, 'utf8'));
36
+ if (!raw || raw.version !== 1 || !Array.isArray(raw.entries)) {
37
+ return { version: 1, entries: [] };
38
+ }
39
+ return raw;
40
+ }
41
+ catch (_a) {
42
+ return { version: 1, entries: [] };
43
+ }
44
+ }
45
+ function writeRaw(p, file) {
46
+ fs_1.default.mkdirSync(path_1.default.dirname(p), { recursive: true });
47
+ fs_1.default.writeFileSync(p, JSON.stringify(file, null, 2) + '\n');
48
+ }
49
+ function recordTaste(projectPath, input, now = new Date()) {
50
+ const p = tastePath(projectPath);
51
+ const file = readRaw(p);
52
+ // Idempotent on (dimension, value, verdict): refresh ts/weight instead of duplicating.
53
+ const existing = file.entries.find(e => e.dimension === input.dimension && e.value === input.value && e.verdict === input.verdict);
54
+ const entry = {
55
+ dimension: input.dimension,
56
+ value: input.value,
57
+ verdict: input.verdict,
58
+ weight: 1.0,
59
+ ts: now.toISOString(),
60
+ };
61
+ if (existing) {
62
+ existing.weight = 1.0;
63
+ existing.ts = entry.ts;
64
+ }
65
+ else {
66
+ file.entries.push(entry);
67
+ }
68
+ writeRaw(p, file);
69
+ return existing !== null && existing !== void 0 ? existing : entry;
70
+ }
71
+ /**
72
+ * Apply exponential decay (5 %/week) and drop entries below MIN_WEIGHT.
73
+ * Pure: does not write back.
74
+ */
75
+ function decayEntries(entries, now = new Date()) {
76
+ const nowMs = now.getTime();
77
+ const out = [];
78
+ for (const e of entries) {
79
+ const ageWeeks = Math.max(0, (nowMs - new Date(e.ts).getTime()) / MS_PER_WEEK);
80
+ const decayed = e.weight * Math.pow(1 - DECAY_PER_WEEK, ageWeeks);
81
+ if (decayed >= MIN_WEIGHT) {
82
+ out.push(Object.assign(Object.assign({}, e), { weight: Number(decayed.toFixed(4)) }));
83
+ }
84
+ }
85
+ return out;
86
+ }
87
+ function loadTaste(projectPath, now = new Date()) {
88
+ return decayEntries(readRaw(tastePath(projectPath)).entries, now);
89
+ }
90
+ function topTaste(projectPath, dimension, n = 5, now = new Date()) {
91
+ const live = loadTaste(projectPath, now).filter(e => e.dimension === dimension);
92
+ const sortDesc = (a, b) => b.weight - a.weight;
93
+ return {
94
+ approved: live.filter(e => e.verdict === 'approved').sort(sortDesc).slice(0, n),
95
+ rejected: live.filter(e => e.verdict === 'rejected').sort(sortDesc).slice(0, n),
96
+ };
97
+ }
98
+ /**
99
+ * Rewrite the file with decayed entries, dropping stale ones.
100
+ * Cm-continuity or a periodic task can call this; not required for reads.
101
+ */
102
+ function compactTaste(projectPath, now = new Date()) {
103
+ const p = tastePath(projectPath);
104
+ const before = readRaw(p).entries;
105
+ const after = decayEntries(before, now);
106
+ writeRaw(p, { version: 1, entries: after });
107
+ return before.length - after.length;
108
+ }
@@ -0,0 +1,143 @@
1
+ "use strict";
2
+ /**
3
+ * Output compression middleware — pure helpers that strip noise from common
4
+ * CLI outputs before they enter the model context. Keep them deterministic
5
+ * and side-effect free so cm-terminal can reference them by name.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.COMPRESSORS = void 0;
9
+ exports.compressGitStatus = compressGitStatus;
10
+ exports.compressNpmTest = compressNpmTest;
11
+ exports.collapseRepeatedLines = collapseRepeatedLines;
12
+ exports.summarizeBuildLog = summarizeBuildLog;
13
+ exports.compressFor = compressFor;
14
+ const STATUS_LINE = /^(?:\s*)([MADRCU?!]{1,2}|\?\?)\s+(.+)$/;
15
+ function compressGitStatus(stdout) {
16
+ const lines = stdout.split('\n');
17
+ const kept = [];
18
+ let branch = null;
19
+ for (const raw of lines) {
20
+ const line = raw.replace(/\r$/, '');
21
+ if (line.startsWith('On branch ')) {
22
+ branch = line;
23
+ continue;
24
+ }
25
+ if (STATUS_LINE.test(line)) {
26
+ kept.push(line.trim());
27
+ }
28
+ }
29
+ if (kept.length === 0) {
30
+ return branch ? `${branch}\n(clean)` : '(clean)';
31
+ }
32
+ const head = branch ? `${branch}\n` : '';
33
+ return `${head}${kept.join('\n')}\n(${kept.length} changed)`;
34
+ }
35
+ const TEST_FAIL_PATTERNS = [
36
+ /^\s*FAIL\s/,
37
+ /^\s*✗\s/,
38
+ /^\s*×\s/,
39
+ /^\s*✘\s/,
40
+ /\bAssertionError\b/,
41
+ /^\s*Error:/,
42
+ /^\s*Expected /,
43
+ /^\s*at .+\(.+:\d+:\d+\)/,
44
+ ];
45
+ const TEST_SUMMARY_PATTERNS = [
46
+ /Tests?:\s+\d+\s+(failed|passed|skipped)/i,
47
+ /Test Files\s+/i,
48
+ /\d+\s+passing/,
49
+ /\d+\s+failing/,
50
+ /Duration\s+/i,
51
+ /Snapshots:/i,
52
+ ];
53
+ function compressNpmTest(stdout) {
54
+ const lines = stdout.split('\n');
55
+ const kept = [];
56
+ let inFailureBlock = false;
57
+ for (const raw of lines) {
58
+ const line = raw.replace(/\r$/, '');
59
+ const isFailLike = TEST_FAIL_PATTERNS.some(re => re.test(line));
60
+ const isSummary = TEST_SUMMARY_PATTERNS.some(re => re.test(line));
61
+ if (isFailLike) {
62
+ kept.push(line);
63
+ inFailureBlock = true;
64
+ continue;
65
+ }
66
+ if (inFailureBlock && line.trim() === '') {
67
+ kept.push(line);
68
+ inFailureBlock = false;
69
+ continue;
70
+ }
71
+ if (inFailureBlock) {
72
+ kept.push(line);
73
+ continue;
74
+ }
75
+ if (isSummary) {
76
+ kept.push(line);
77
+ }
78
+ }
79
+ if (kept.length === 0)
80
+ return '(no failures detected)';
81
+ return kept.join('\n').replace(/\n{3,}/g, '\n\n');
82
+ }
83
+ function collapseRepeatedLines(stdout, threshold = 3) {
84
+ if (threshold < 2)
85
+ threshold = 2;
86
+ const lines = stdout.split('\n');
87
+ const out = [];
88
+ let i = 0;
89
+ while (i < lines.length) {
90
+ let j = i + 1;
91
+ while (j < lines.length && lines[j] === lines[i])
92
+ j++;
93
+ const run = j - i;
94
+ if (run >= threshold) {
95
+ out.push(`${lines[i]} … (× ${run})`);
96
+ }
97
+ else {
98
+ for (let k = i; k < j; k++)
99
+ out.push(lines[k]);
100
+ }
101
+ i = j;
102
+ }
103
+ return out.join('\n');
104
+ }
105
+ const BUILD_KEEP = [
106
+ /\berror\b/i,
107
+ /\bwarning\b/i,
108
+ /\bfailed\b/i,
109
+ /\bsucceeded\b/i,
110
+ /\bbuilt\b/i,
111
+ /\bcompiled\b/i,
112
+ /\bDone in\b/i,
113
+ /^\s*✓\s/,
114
+ /^\s*✗\s/,
115
+ ];
116
+ function summarizeBuildLog(stdout) {
117
+ const lines = stdout.split('\n');
118
+ const kept = lines.filter(l => BUILD_KEEP.some(re => re.test(l)));
119
+ if (kept.length === 0) {
120
+ const tail = lines.slice(-5).filter(Boolean);
121
+ return tail.join('\n') || '(empty build output)';
122
+ }
123
+ return collapseRepeatedLines(kept.join('\n'), 3);
124
+ }
125
+ exports.COMPRESSORS = {
126
+ 'git status': compressGitStatus,
127
+ 'git status --porcelain': compressGitStatus,
128
+ 'npm test': compressNpmTest,
129
+ 'npm run test': compressNpmTest,
130
+ 'vitest': compressNpmTest,
131
+ 'jest': compressNpmTest,
132
+ 'npm run build': summarizeBuildLog,
133
+ 'npm build': summarizeBuildLog,
134
+ 'tsc': summarizeBuildLog,
135
+ };
136
+ function compressFor(command, stdout) {
137
+ const cmd = command.trim().toLowerCase();
138
+ for (const key of Object.keys(exports.COMPRESSORS)) {
139
+ if (cmd.startsWith(key))
140
+ return exports.COMPRESSORS[key](stdout);
141
+ }
142
+ return collapseRepeatedLines(stdout, 3);
143
+ }
@@ -0,0 +1,126 @@
1
+ "use strict";
2
+ /**
3
+ * Vibecoding Index — score code-change quality 0–100.
4
+ *
5
+ * Formula:
6
+ * intent × 0.30 (clear goal, scope, design notes)
7
+ * ownership × 0.25 (author attribution, AI disclosure)
8
+ * context × 0.20 (links to plan/handoff, why-not-what)
9
+ * tests × 0.15 (added/passing test coverage)
10
+ * review × 0.10 (review evidence)
11
+ *
12
+ * Each input is normalized 0..1 before weighting.
13
+ *
14
+ * Modes (governance enforcement):
15
+ * OFF → no print, no block
16
+ * WARNING → print score + advice, never blocks (default)
17
+ * SOFT → print score; warn loudly if score < 60
18
+ * FULL → fail (exit 1) if score < 70
19
+ */
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ exports.VIBE_WEIGHTS = void 0;
22
+ exports.computeVibeIndex = computeVibeIndex;
23
+ exports.applyVibeMode = applyVibeMode;
24
+ exports.formatVibeReport = formatVibeReport;
25
+ exports.VIBE_WEIGHTS = {
26
+ intent: 0.30,
27
+ ownership: 0.25,
28
+ context: 0.20,
29
+ tests: 0.15,
30
+ review: 0.10,
31
+ };
32
+ const MODE_THRESHOLDS = {
33
+ OFF: { warn: 0, block: null },
34
+ WARNING: { warn: 60, block: null },
35
+ SOFT: { warn: 60, block: null },
36
+ FULL: { warn: 60, block: 70 },
37
+ };
38
+ function clamp01(n) {
39
+ if (Number.isNaN(n) || !Number.isFinite(n))
40
+ return 0;
41
+ return Math.max(0, Math.min(1, n));
42
+ }
43
+ function computeVibeIndex(raw) {
44
+ var _a, _b, _c, _d, _e;
45
+ const components = {
46
+ intent: clamp01((_a = raw.intent) !== null && _a !== void 0 ? _a : 0),
47
+ ownership: clamp01((_b = raw.ownership) !== null && _b !== void 0 ? _b : 0),
48
+ context: clamp01((_c = raw.context) !== null && _c !== void 0 ? _c : 0),
49
+ tests: clamp01((_d = raw.tests) !== null && _d !== void 0 ? _d : 0),
50
+ review: clamp01((_e = raw.review) !== null && _e !== void 0 ? _e : 0),
51
+ };
52
+ const weighted = {
53
+ intent: components.intent * exports.VIBE_WEIGHTS.intent * 100,
54
+ ownership: components.ownership * exports.VIBE_WEIGHTS.ownership * 100,
55
+ context: components.context * exports.VIBE_WEIGHTS.context * 100,
56
+ tests: components.tests * exports.VIBE_WEIGHTS.tests * 100,
57
+ review: components.review * exports.VIBE_WEIGHTS.review * 100,
58
+ };
59
+ const score = Math.round(weighted.intent + weighted.ownership + weighted.context + weighted.tests + weighted.review);
60
+ const advice = [];
61
+ if (components.intent < 0.7)
62
+ advice.push('Clarify intent — link plan/spec, state in/out of scope.');
63
+ if (components.ownership < 0.7)
64
+ advice.push('Add ownership — attribute author, disclose AI usage.');
65
+ if (components.context < 0.7)
66
+ advice.push('Add context — link handoff/issue, write WHY (not WHAT).');
67
+ if (components.tests < 0.7)
68
+ advice.push('Increase test coverage on changed lines.');
69
+ if (components.review < 0.5)
70
+ advice.push('Get a review or second-opinion before merge.');
71
+ let band = 'POOR';
72
+ if (score >= 85)
73
+ band = 'GREAT';
74
+ else if (score >= 70)
75
+ band = 'GOOD';
76
+ else if (score >= 50)
77
+ band = 'FAIR';
78
+ return { score, components, weighted, band, advice };
79
+ }
80
+ function applyVibeMode(result, mode) {
81
+ if (mode === 'OFF') {
82
+ return { result, mode, status: 'pass', message: '' };
83
+ }
84
+ const t = MODE_THRESHOLDS[mode];
85
+ if (t.block !== null && result.score < t.block) {
86
+ return {
87
+ result,
88
+ mode,
89
+ status: 'block',
90
+ message: `Vibecoding Index ${result.score} < ${t.block} — blocked by ${mode} mode`,
91
+ };
92
+ }
93
+ if (result.score < t.warn) {
94
+ return {
95
+ result,
96
+ mode,
97
+ status: 'warn',
98
+ message: `Vibecoding Index ${result.score} (${result.band}) — below ${t.warn}, see advice`,
99
+ };
100
+ }
101
+ return {
102
+ result,
103
+ mode,
104
+ status: 'pass',
105
+ message: `Vibecoding Index ${result.score} (${result.band})`,
106
+ };
107
+ }
108
+ function formatVibeReport(result) {
109
+ const lines = [
110
+ `Vibecoding Index: ${result.score}/100 (${result.band})`,
111
+ ` intent ${pct(result.components.intent)} → ${result.weighted.intent.toFixed(1)} pts`,
112
+ ` ownership ${pct(result.components.ownership)} → ${result.weighted.ownership.toFixed(1)} pts`,
113
+ ` context ${pct(result.components.context)} → ${result.weighted.context.toFixed(1)} pts`,
114
+ ` tests ${pct(result.components.tests)} → ${result.weighted.tests.toFixed(1)} pts`,
115
+ ` review ${pct(result.components.review)} → ${result.weighted.review.toFixed(1)} pts`,
116
+ ];
117
+ if (result.advice.length) {
118
+ lines.push('Advice:');
119
+ for (const a of result.advice)
120
+ lines.push(` • ${a}`);
121
+ }
122
+ return lines.join('\n');
123
+ }
124
+ function pct(n) {
125
+ return `${(n * 100).toFixed(0).padStart(3, ' ')}%`;
126
+ }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "codymaster",
3
- "version": "4.8.0",
4
- "description": "68+ Skills. Ship 10x faster. AI-powered coding skill kit for Claude, Cursor, Gemini & more.",
3
+ "version": "7.0.0",
4
+ "description": "CodyMaster v7.0 50+ AI agent skills with Browse Hybrid Bridge (agent-browser + Playwright), a11y snapshots, structured error collection, video recording. Hybrid browser automation for visual QA and testing.",
5
5
  "main": "dist/index.js",
6
6
  "repository": {
7
7
  "type": "git",
@@ -33,6 +33,16 @@
33
33
  "validate:skills": "node scripts/validate-skills.mjs",
34
34
  "build:skills": "node scripts/build-skills.mjs",
35
35
  "check:skills": "node scripts/build-skills.mjs --check",
36
+ "build:platforms": "node scripts/build-skills.mjs --platforms cursor,codex,opencode",
37
+ "check:platforms": "node scripts/build-skills.mjs --platforms cursor,codex,opencode --check",
38
+ "sync:all": "node scripts/build-skills.mjs --all-platforms",
39
+ "sync:all:check": "node scripts/build-skills.mjs --all-platforms --check",
40
+ "changelog": "bash scripts/update-changelog.sh",
41
+ "changelog:dry": "bash scripts/update-changelog.sh --dry-run",
42
+ "update": "cm update --full",
43
+ "update:sync": "cm update --sync",
44
+ "update:changelog": "cm update --changelog",
45
+ "upgrade": "cm upgrade",
36
46
  "docs:dev": "vitepress dev docs",
37
47
  "docs:build": "vitepress build docs",
38
48
  "docs:preview": "vitepress preview docs"
@@ -56,31 +66,35 @@
56
66
  "dist/",
57
67
  "scripts/",
58
68
  "skills/",
59
- "adapters/",
60
69
  "commands/",
61
70
  "public/",
62
71
  "README.md",
63
- "CHANGELOG.md",
64
- "install.sh"
72
+ "CHANGELOG.md"
65
73
  ],
66
74
  "publishConfig": {
67
75
  "access": "public"
68
76
  },
69
77
  "dependencies": {
70
78
  "@clack/prompts": "^1.1.0",
79
+ "async-mutex": "^0.5.0",
71
80
  "better-sqlite3": "^12.8.0",
72
81
  "chalk": "^5.6.2",
73
82
  "chokidar": "^5.0.0",
74
83
  "commander": "^14.0.3",
75
84
  "express": "^5.2.1",
76
85
  "prompts": "^2.4.2",
77
- "yaml": "^2.8.3"
86
+ "ws": "^8.20.0",
87
+ "yaml": "^2.8.3",
88
+ "ajv": "^8.20.0",
89
+ "pino": "^10.0.0",
90
+ "pino-http": "^11.0.0"
78
91
  },
79
92
  "devDependencies": {
80
93
  "@types/better-sqlite3": "^7.6.13",
81
94
  "@types/express": "^5.0.6",
82
95
  "@types/node": "^25.5.0",
83
96
  "@types/prompts": "^2.4.9",
97
+ "@types/ws": "^8.18.1",
84
98
  "acorn": "^8.16.0",
85
99
  "jsdom": "^29.0.1",
86
100
  "playwright": "^1.50.0",