codymaster 7.0.2 → 7.0.3

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 (341) hide show
  1. package/CHANGELOG.md +64 -0
  2. package/README.md +38 -1
  3. package/dist/agent/codex.js +73 -21
  4. package/dist/agent-dispatch.js +63 -48
  5. package/dist/cli/commands/brain.js +18 -0
  6. package/dist/cli/commands/design-studio.js +1 -1
  7. package/dist/cm-suggest.js +3 -3
  8. package/dist/dashboard-project-summary.js +9 -0
  9. package/dist/dashboard.js +11 -5
  10. package/dist/execution-analyzer.js +9 -1
  11. package/dist/judge.js +16 -15
  12. package/dist/mcp-context-server.js +45 -23
  13. package/dist/mcp-skills-tools.js +2 -2
  14. package/dist/skill-chain.js +26 -3
  15. package/dist/skill-token-report.js +105 -0
  16. package/dist/sprint-pipeline.js +3 -3
  17. package/dist/ui/onboarding.js +3 -4
  18. package/dist/utils/design-taste.js +1 -1
  19. package/dist/utils/output-compress.js +8 -0
  20. package/package.json +2 -1
  21. package/public/dashboard/app.js +40 -13
  22. package/public/dashboard/index.html +190 -5
  23. package/public/dashboard/style.css +1 -1
  24. package/scripts/build-skills.mjs +36 -2
  25. package/scripts/mcp-bridge.js +41 -24
  26. package/scripts/pack-plugin.mjs +206 -0
  27. package/skills/cm-ads-tracker/SKILL.md +401 -0
  28. package/skills/cm-ads-tracker/evals/evals.json +55 -0
  29. package/skills/cm-ads-tracker/references/gtm-architecture.md +321 -0
  30. package/skills/cm-ads-tracker/references/industry-events.md +294 -0
  31. package/skills/cm-ads-tracker/references/platforms-api.md +238 -0
  32. package/skills/cm-ads-tracker/templates/capi-payload.md +79 -0
  33. package/skills/cm-ads-tracker/templates/datalayer-push.js +104 -0
  34. package/skills/cm-ads-tracker/templates/gtm-variables.js +56 -0
  35. package/skills/cm-auto-publisher/SKILL.md +81 -0
  36. package/skills/cm-booking-calendar/SKILL.md +521 -0
  37. package/skills/cm-booking-calendar/references/industry-patterns.md +527 -0
  38. package/skills/cm-booking-calendar/templates/booking-form.css +626 -0
  39. package/skills/cm-booking-calendar/templates/booking-form.html +477 -0
  40. package/skills/cm-booking-calendar/templates/calendar-engine.js +419 -0
  41. package/skills/cm-booking-calendar/templates/calendar-export.js +395 -0
  42. package/skills/cm-booking-calendar/templates/reminder-config.js +629 -0
  43. package/skills/cm-brainstorm-idea/SKILL.md +5 -5
  44. package/skills/cm-code-review/SKILL.md +2 -2
  45. package/skills/cm-codeintell/SKILL.md +47 -580
  46. package/skills/cm-codeintell/references/integration-workflows.md +23 -0
  47. package/skills/cm-codeintell/references/layer-0-skeleton.md +54 -0
  48. package/skills/cm-codeintell/references/layer-1-codegraph.md +58 -0
  49. package/skills/cm-codeintell/references/layer-2-architecture.md +31 -0
  50. package/skills/cm-codeintell/references/layer-3-context-builder.md +32 -0
  51. package/skills/cm-content-factory/.content-factory-state.json +132 -0
  52. package/skills/cm-content-factory/.git 2/logs/refs/heads/main +1 -0
  53. package/skills/cm-content-factory/.git 2/logs/refs/remotes/origin/main +1 -0
  54. package/skills/cm-content-factory/.git 2/objects/02/fb0956734b5f8ba3f918b7defd04a89cfe0076 +0 -0
  55. package/skills/cm-content-factory/.git 2/objects/08/1e129d75dc6feac6c02037272e6bd1a04e3324 +0 -0
  56. package/skills/cm-content-factory/.git 2/objects/0c/5393416f3c5e01c9a655a802bff0dd52f76f0a +0 -0
  57. package/skills/cm-content-factory/.git 2/objects/10/0b9be46978a946a77188f68be725098a122001 +0 -0
  58. package/skills/cm-content-factory/.git 2/objects/10/cf041167fc9843610eb3d90259ef3396315fdc +0 -0
  59. package/skills/cm-content-factory/.git 2/objects/12/5e19538dd6e1338ffe74f6c4c165b00435bf48 +0 -0
  60. package/skills/cm-content-factory/.git 2/objects/16/a9b9d0088d5c1347628b45a2620b479d8ad57c +0 -0
  61. package/skills/cm-content-factory/.git 2/objects/17/8c2a9ef93c33ae4eec9d58e82321f9229843a1 +0 -0
  62. package/skills/cm-content-factory/.git 2/objects/25/397ae41d09104d763bdcac2695209d85cdea89 +0 -0
  63. package/skills/cm-content-factory/.git 2/objects/2f/a836b7947f2d458e1f639788bf4bb0983a3305 +0 -0
  64. package/skills/cm-content-factory/.git 2/objects/3a/baaaf0a1c0909c0828335791557125fba911e0 +0 -0
  65. package/skills/cm-content-factory/.git 2/objects/42/2924221b81f5ce3c4e4daac9a64a24f9b01f9a +0 -0
  66. package/skills/cm-content-factory/.git 2/objects/42/ec0ce707447dc11446a34c9995fb8533801731 +0 -0
  67. package/skills/cm-content-factory/.git 2/objects/46/e43ce92866d56ce74b1d750db307cfe6154a15 +0 -0
  68. package/skills/cm-content-factory/.git 2/objects/48/5e41b633c63f55b8277bcc59f44f67681f671a +0 -0
  69. package/skills/cm-content-factory/.git 2/objects/49/49c596a3a89fa240642acd95dd3258e261eb09 +0 -0
  70. package/skills/cm-content-factory/.git 2/objects/50/9d42d8412ef8eaf7f7e138476bac2e4d10ce60 +0 -0
  71. package/skills/cm-content-factory/.git 2/objects/55/0c8c389d981b463ef849aeb792d8be3ccb6ec8 +0 -0
  72. package/skills/cm-content-factory/.git 2/objects/5d/82d3b18410cdda3ace3677436f0cb599dbe2d2 +0 -0
  73. package/skills/cm-content-factory/.git 2/objects/60/0617c58e871a38b33bf29e282d132bb3c381ad +0 -0
  74. package/skills/cm-content-factory/.git 2/objects/6a/8369a99c687b7245c92ffaf0e0f0dab9014504 +0 -0
  75. package/skills/cm-content-factory/.git 2/objects/79/bea435d40ab531c1aaf6be0432c6a5b7aaed21 +0 -0
  76. package/skills/cm-content-factory/.git 2/objects/7e/5ebd79251c2f14e4aceb86c74b6b6daae6b500 +0 -0
  77. package/skills/cm-content-factory/.git 2/objects/81/98a822a60178d6d5023ddb3e222cddf048742e +0 -0
  78. package/skills/cm-content-factory/.git 2/objects/86/0a0e1943dfe53411d2e499a1f16f46a96ef758 +0 -0
  79. package/skills/cm-content-factory/.git 2/objects/86/971fb55fdc081fdbae52376f0f13e57a4e9b04 +0 -0
  80. package/skills/cm-content-factory/.git 2/objects/88/b89dd609a0a03f8d4fe8bfde20d5b8fc1d326d +0 -0
  81. package/skills/cm-content-factory/.git 2/objects/90/8737edb6b7809e32cc01590b4e08ba42a9d40d +0 -0
  82. package/skills/cm-content-factory/.git 2/objects/93/d5a8a9a7d4fb7f11491cb596a6880528725118 +0 -0
  83. package/skills/cm-content-factory/.git 2/objects/98/46a2ab81d0c3b3eb00ef88fc56989aa7e9f316 +0 -0
  84. package/skills/cm-content-factory/.git 2/objects/9b/d8dd1e49cf274eaf9c555f3ab39dce7af5715e +0 -0
  85. package/skills/cm-content-factory/.git 2/objects/a1/13329fb0cec96ae78b222d33a24c3b5bc7fa1f +0 -0
  86. package/skills/cm-content-factory/.git 2/objects/a9/e6effe626e8a3aea3a8fc3364b492191c6e7d0 +0 -0
  87. package/skills/cm-content-factory/.git 2/objects/ad/6de7e48d9782cca9353d1ff0aa1aab7fe1df85 +0 -0
  88. package/skills/cm-content-factory/.git 2/objects/af/54ae316f771ff692e299ffcd8bf2f06b413b59 +0 -0
  89. package/skills/cm-content-factory/.git 2/objects/b0/4cb8b0b00dad633e731c1472161419e738d674 +0 -0
  90. package/skills/cm-content-factory/.git 2/objects/b3/094abb0b9ed46419b269e4a4e36a459690e3b0 +0 -0
  91. package/skills/cm-content-factory/.git 2/objects/b9/435c5d4baac2cfc5c83009ddd27b46b60db5f1 +0 -0
  92. package/skills/cm-content-factory/.git 2/objects/ba/5da17dbaec5ec2dcfdfd126aead518d1171d5c +0 -0
  93. package/skills/cm-content-factory/.git 2/objects/c0/bf58703aa258ba5dd63083bebaec8f223d844c +0 -0
  94. package/skills/cm-content-factory/.git 2/objects/c4/701a34edf1fc1bad58ccc57bd03f9426acb59a +0 -0
  95. package/skills/cm-content-factory/.git 2/objects/c7/5ccce9a4e5cc74d9b3174550cf6d993ca43638 +0 -0
  96. package/skills/cm-content-factory/.git 2/objects/c7/710d59b5a35b0f1f0a0399386643a0bd94c929 +0 -0
  97. package/skills/cm-content-factory/.git 2/objects/d1/fe58237112e953e5fec52da22cf38e08be3df9 +5 -0
  98. package/skills/cm-content-factory/.git 2/objects/d2/2bbe9fd2f74c95bc5583e803f5e435f1e2cd86 +0 -0
  99. package/skills/cm-content-factory/.git 2/objects/d7/e72852ea2bff74581dbf247d400120086229f4 +0 -0
  100. package/skills/cm-content-factory/.git 2/objects/d8/d4c3b5553e4fd72807e1d4b49ef07d9ef3ac35 +0 -0
  101. package/skills/cm-content-factory/.git 2/objects/dc/75050c2876f6a02ae2a53a3c886f395b622977 +0 -0
  102. package/skills/cm-content-factory/.git 2/objects/ee/e8546f95acec500187c08a28a8b9ee02db0dec +0 -0
  103. package/skills/cm-content-factory/.git 2/objects/ef/263c059208b416c2146434f10cb2b9fabcba16 +0 -0
  104. package/skills/cm-content-factory/.git 2/objects/f3/ae597e84d9a59b88acd21c99bde2eaf686d785 +0 -0
  105. package/skills/cm-content-factory/.git 2/objects/f3/f6f5673c821d3d8e76fa267a9e882e7a5387ea +0 -0
  106. package/skills/cm-content-factory/.git 2/objects/f9/6e6d0ad02624dd11d5848594d056caef7a5e8b +0 -0
  107. package/skills/cm-content-factory/.git 2/objects/ff/278988fc1edf0db3abcf18de795f4cc0b4f3e1 +0 -0
  108. package/skills/cm-content-factory/.git 2/refs/heads/main +1 -0
  109. package/skills/cm-content-factory/.git 2/refs/remotes/origin/main +1 -0
  110. package/skills/cm-content-factory/.pytest_cache 2/v/cache/nodeids +76 -0
  111. package/skills/cm-content-factory/.pytest_cache 2/v/cache/stepwise +1 -0
  112. package/skills/cm-content-factory/AGENTS.md +61 -0
  113. package/skills/cm-content-factory/CLAUDE.md +63 -0
  114. package/skills/cm-content-factory/CURSOR.md +43 -0
  115. package/skills/cm-content-factory/Content Factory.zip +0 -0
  116. package/skills/cm-content-factory/SKILL.md +416 -0
  117. package/skills/cm-content-factory/cf +313 -0
  118. package/skills/cm-content-factory/config.schema.json +397 -0
  119. package/skills/cm-content-factory/dashboard/app.js +556 -0
  120. package/skills/cm-content-factory/dashboard/index.html +397 -0
  121. package/skills/cm-content-factory/dashboard/style.css +1211 -0
  122. package/skills/cm-content-factory/examples/01-real-estate.config.json +146 -0
  123. package/skills/cm-content-factory/examples/02-personal-finance.config.json +146 -0
  124. package/skills/cm-content-factory/examples/03-health-wellness.config.json +147 -0
  125. package/skills/cm-content-factory/examples/04-saas-software.config.json +147 -0
  126. package/skills/cm-content-factory/examples/05-legal-services.config.json +147 -0
  127. package/skills/cm-content-factory/examples/06-insurance.config.json +146 -0
  128. package/skills/cm-content-factory/examples/07-ecommerce-dropship.config.json +146 -0
  129. package/skills/cm-content-factory/examples/08-online-education.config.json +147 -0
  130. package/skills/cm-content-factory/examples/09-crypto-defi.config.json +147 -0
  131. package/skills/cm-content-factory/examples/10-beauty-skincare.config.json +147 -0
  132. package/skills/cm-content-factory/examples/11-home-services.config.json +146 -0
  133. package/skills/cm-content-factory/examples/12-dental-clinic.config.json +147 -0
  134. package/skills/cm-content-factory/examples/13-pet-care.config.json +147 -0
  135. package/skills/cm-content-factory/examples/14-travel-hospitality.config.json +147 -0
  136. package/skills/cm-content-factory/examples/15-ai-automation.config.json +147 -0
  137. package/skills/cm-content-factory/examples/16-wedding-events.config.json +147 -0
  138. package/skills/cm-content-factory/examples/17-fitness-coaching.config.json +148 -0
  139. package/skills/cm-content-factory/examples/18-cybersecurity.config.json +147 -0
  140. package/skills/cm-content-factory/examples/19-food-restaurant.config.json +148 -0
  141. package/skills/cm-content-factory/examples/20-solar-energy.config.json +147 -0
  142. package/skills/cm-content-factory/examples/fitness-blog.config.json +116 -0
  143. package/skills/cm-content-factory/examples/tech-blog.config.json +107 -0
  144. package/skills/cm-content-factory/extensions/EXTENSION_GUIDE.md +72 -0
  145. package/skills/cm-content-factory/extensions/hooks.py +126 -0
  146. package/skills/cm-content-factory/extensions/openclaw_adapter.py +132 -0
  147. package/skills/cm-content-factory/landing/docs/content/changelog.md +36 -0
  148. package/skills/cm-content-factory/landing/docs/content/deployment.md +46 -0
  149. package/skills/cm-content-factory/landing/docs/content/execution-flow.md +67 -0
  150. package/skills/cm-content-factory/landing/docs/content/openspace.md +27 -0
  151. package/skills/cm-content-factory/landing/docs/content/openviking.md +33 -0
  152. package/skills/cm-content-factory/landing/docs/content/use-cases.md +26 -0
  153. package/skills/cm-content-factory/landing/docs/content/v5-intro.md +28 -0
  154. package/skills/cm-content-factory/landing/docs/index.html +240 -0
  155. package/skills/cm-content-factory/landing/index.html +680 -0
  156. package/skills/cm-content-factory/landing/script.js +143 -0
  157. package/skills/cm-content-factory/landing/style.css +1216 -0
  158. package/skills/cm-content-factory/landing/translations.js +508 -0
  159. package/skills/cm-content-factory/logs/events.jsonl +11 -0
  160. package/skills/cm-content-factory/profiles/_template.profile.json +231 -0
  161. package/skills/cm-content-factory/profiles/finance.profile.json +278 -0
  162. package/skills/cm-content-factory/profiles/legal.profile.json +263 -0
  163. package/skills/cm-content-factory/profiles/medical-research.profile.json +321 -0
  164. package/skills/cm-content-factory/profiles/technology.profile.json +275 -0
  165. package/skills/cm-content-factory/scripts/agent_dispatcher.py +266 -0
  166. package/skills/cm-content-factory/scripts/audit.py +106 -0
  167. package/skills/cm-content-factory/scripts/dashboard_server.py +225 -0
  168. package/skills/cm-content-factory/scripts/deploy.py +146 -0
  169. package/skills/cm-content-factory/scripts/extract.py +132 -0
  170. package/skills/cm-content-factory/scripts/landing_generator.py +459 -0
  171. package/skills/cm-content-factory/scripts/memory.py +521 -0
  172. package/skills/cm-content-factory/scripts/monetize.py +239 -0
  173. package/skills/cm-content-factory/scripts/pipeline.py +357 -0
  174. package/skills/cm-content-factory/scripts/plan.py +163 -0
  175. package/skills/cm-content-factory/scripts/publish.py +145 -0
  176. package/skills/cm-content-factory/scripts/research.py +337 -0
  177. package/skills/cm-content-factory/scripts/scaffold.py +464 -0
  178. package/skills/cm-content-factory/scripts/scoreboard.py +336 -0
  179. package/skills/cm-content-factory/scripts/seo.py +90 -0
  180. package/skills/cm-content-factory/scripts/state_manager.py +320 -0
  181. package/skills/cm-content-factory/scripts/token_manager.py +268 -0
  182. package/skills/cm-content-factory/scripts/validate.py +221 -0
  183. package/skills/cm-content-factory/scripts/wizard.py +329 -0
  184. package/skills/cm-content-factory/scripts/write.py +93 -0
  185. package/skills/cm-content-factory/sites/docs-site/src/assets/houston.webp +0 -0
  186. package/skills/cm-content-factory/sites/docs-site/src/content/docs/architecture.md +90 -0
  187. package/skills/cm-content-factory/sites/docs-site/src/content/docs/data-flow.md +54 -0
  188. package/skills/cm-content-factory/sites/docs-site/src/content/docs/deployment.md +38 -0
  189. package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/index.md +65 -0
  190. package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/lc-content-lifecycle.md +48 -0
  191. package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/seq-write-mode.md +39 -0
  192. package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/uj-first-batch.md +42 -0
  193. package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/wf-content-pipeline.md +51 -0
  194. package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/wf-learning-cycle.md +52 -0
  195. package/skills/cm-content-factory/sites/docs-site/src/content/docs/getting-started/configuration.md +86 -0
  196. package/skills/cm-content-factory/sites/docs-site/src/content/docs/getting-started/installation.md +80 -0
  197. package/skills/cm-content-factory/sites/docs-site/src/content/docs/getting-started/intro.md +58 -0
  198. package/skills/cm-content-factory/sites/docs-site/src/content/docs/index.md +102 -0
  199. package/skills/cm-content-factory/sites/docs-site/src/content/docs/jtbd/index.md +45 -0
  200. package/skills/cm-content-factory/sites/docs-site/src/content/docs/jtbd/optimize-seo.md +29 -0
  201. package/skills/cm-content-factory/sites/docs-site/src/content/docs/jtbd/scale-content-production.md +55 -0
  202. package/skills/cm-content-factory/sites/docs-site/src/content/docs/jtbd/standardize-quality.md +29 -0
  203. package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/buyer-cmo-huong.md +41 -0
  204. package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/buyer-content-lead-khoa.md +40 -0
  205. package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/index.md +56 -0
  206. package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/user-content-manager-lan.md +46 -0
  207. package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/user-seo-minh.md +45 -0
  208. package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/user-writer-tu.md +45 -0
  209. package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/content-pipeline.md +108 -0
  210. package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/index.md +22 -0
  211. package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/memory-system.md +52 -0
  212. package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/seo-optimization.md +58 -0
  213. package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/troubleshooting-guide.md +92 -0
  214. package/skills/cm-content-factory/sites/docs-site/src/styles/custom.css +575 -0
  215. package/skills/cm-content-factory/tests/conftest.py +66 -0
  216. package/skills/cm-content-factory/tests/test_agent_dispatcher.py +125 -0
  217. package/skills/cm-content-factory/tests/test_memory.py +128 -0
  218. package/skills/cm-content-factory/tests/test_pipeline.py +107 -0
  219. package/skills/cm-content-factory/tests/test_research.py +56 -0
  220. package/skills/cm-content-factory/tests/test_state_manager.py +131 -0
  221. package/skills/cm-content-factory/tests/test_token_manager.py +110 -0
  222. package/skills/cm-content-factory/tests/test_wizard.py +121 -0
  223. package/skills/cm-continuity/SKILL.md +49 -480
  224. package/skills/cm-continuity/references/cm-uri-scheme.md +23 -0
  225. package/skills/cm-continuity/references/continuity-template.md +48 -0
  226. package/skills/cm-continuity/references/mcp-context-server.md +27 -0
  227. package/skills/cm-continuity/references/memory-architecture.md +26 -0
  228. package/skills/cm-continuity/references/memory-audit.md +18 -0
  229. package/skills/cm-continuity/references/session-protocol.md +31 -0
  230. package/skills/cm-continuity/references/storage-formats.md +20 -0
  231. package/skills/cm-cro-methodology/SKILL.md +290 -0
  232. package/skills/cm-cro-methodology/references/COPYWRITING.md +178 -0
  233. package/skills/cm-cro-methodology/references/OBJECTIONS.md +135 -0
  234. package/skills/cm-cro-methodology/references/PERSUASION.md +158 -0
  235. package/skills/cm-cro-methodology/references/RESEARCH.md +220 -0
  236. package/skills/cm-cro-methodology/references/funnel-analysis.md +365 -0
  237. package/skills/cm-cro-methodology/references/testing-methodology.md +330 -0
  238. package/skills/cm-design-system/SKILL.md +5 -6
  239. package/skills/cm-execution/SKILL.md +61 -379
  240. package/skills/cm-execution/references/mode-a-batch.md +28 -0
  241. package/skills/cm-execution/references/mode-b-subagent.md +46 -0
  242. package/skills/cm-execution/references/mode-c-parallel.md +39 -0
  243. package/skills/cm-execution/references/mode-d-rarv.md +62 -0
  244. package/skills/cm-execution/references/mode-e-triz-parallel.md +53 -0
  245. package/skills/cm-execution/references/mode-f-party.md +61 -0
  246. package/skills/cm-execution/references/persona-dispatch.md +22 -0
  247. package/skills/cm-execution/references/security-rules.md +47 -0
  248. package/skills/cm-google-form/SKILL.md +266 -0
  249. package/skills/cm-google-form/templates/apps-script.js +55 -0
  250. package/skills/cm-google-form/templates/form-markup.html +110 -0
  251. package/skills/cm-google-form/templates/form-submit.js +201 -0
  252. package/skills/cm-google-form/templates/toast.css +152 -0
  253. package/skills/cm-growth-hacking/SKILL.md +282 -0
  254. package/skills/cm-growth-hacking/bottom-sheet-engine.md +261 -0
  255. package/skills/cm-growth-hacking/calendar-integration.md +264 -0
  256. package/skills/cm-growth-hacking/references/engagement-patterns.md +346 -0
  257. package/skills/cm-growth-hacking/templates/bottom-sheet.css +528 -0
  258. package/skills/cm-growth-hacking/templates/bottom-sheet.js +269 -0
  259. package/skills/cm-growth-hacking/templates/calendar-cta.js +213 -0
  260. package/skills/cm-growth-hacking/templates/tracking-events.js +211 -0
  261. package/skills/cm-growth-hacking/templates/trigger-manager.js +254 -0
  262. package/skills/cm-growth-hacking/tracking-events.md +246 -0
  263. package/skills/cm-growth-hacking/trigger-system.md +342 -0
  264. package/skills/cm-how-it-work/SKILL.md +8 -9
  265. package/skills/cm-identity-guard/SKILL.md +4 -4
  266. package/skills/cm-jtbd/SKILL.md +98 -0
  267. package/skills/cm-notebooklm/SKILL.md +156 -0
  268. package/skills/cm-notebooklm/references/command_reference.md +94 -0
  269. package/skills/cm-notebooklm/references/workflows.md +60 -0
  270. package/skills/cm-notebooklm/resources/knowledge_sources.md +106 -0
  271. package/skills/cm-notebooklm/scripts/brain-sync.sh +453 -0
  272. package/skills/cm-notebooklm/scripts/graduate_wisdom.py +101 -0
  273. package/skills/cm-planning/SKILL.md +3 -3
  274. package/skills/cm-project-bootstrap/SKILL.md +2 -2
  275. package/skills/cm-quality-gate/SKILL.md +1 -1
  276. package/skills/cm-readit/SKILL.md +289 -0
  277. package/skills/cm-readit/audio-player.md +206 -0
  278. package/skills/cm-readit/examples/blog-reader.js +352 -0
  279. package/skills/cm-readit/examples/voice-cro.js +390 -0
  280. package/skills/cm-readit/tts-engine.md +262 -0
  281. package/skills/cm-readit/ui-patterns.md +362 -0
  282. package/skills/cm-readit/voice-cro.md +223 -0
  283. package/skills/cm-safe-deploy/SKILL.md +80 -510
  284. package/skills/cm-safe-deploy/references/gate-0-5-security-scan.md +31 -0
  285. package/skills/cm-safe-deploy/references/gate-0-secret-hygiene.md +68 -0
  286. package/skills/cm-safe-deploy/references/gate-1-syntax.md +23 -0
  287. package/skills/cm-safe-deploy/references/gate-2-test-suite.md +28 -0
  288. package/skills/cm-safe-deploy/references/gate-3-i18n.md +19 -0
  289. package/skills/cm-safe-deploy/references/gate-4-5-build-dist.md +16 -0
  290. package/skills/cm-safe-deploy/references/gate-6-deploy-smoke.md +18 -0
  291. package/skills/cm-safe-deploy/references/rollback.md +17 -0
  292. package/skills/cm-safe-deploy/references/setup-new-project.md +20 -0
  293. package/skills/cm-skill-index/SKILL.md +15 -15
  294. package/skills/cm-start/SKILL.md +1 -1
  295. package/skills/cm-tdd/SKILL.md +51 -356
  296. package/skills/cm-tdd/references/bugfix-example.md +15 -0
  297. package/skills/cm-tdd/references/rationalizations.md +20 -0
  298. package/skills/cm-tdd/references/red-green-refactor.md +33 -0
  299. package/skills/cm-tdd/references/stuck-debugging.md +18 -0
  300. package/skills/cm-tdd/references/test-quality.md +19 -0
  301. package/skills/cm-ux-master/SKILL.md +368 -115
  302. package/skills/profiles/core.txt +1 -4
  303. package/skills/profiles/design.txt +1 -2
  304. package/skills/profiles/full.txt +10 -16
  305. package/skills/profiles/growth.txt +9 -9
  306. package/skills/profiles/top35.json +13 -13
  307. package/skills/cm-conductor-worktrees/SKILL.archive.md +0 -28
  308. package/skills/cm-conductor-worktrees/SKILL.md +0 -26
  309. package/skills/cm-dashboard/SKILL.archive.md +0 -15
  310. package/skills/cm-dashboard/SKILL.md +0 -26
  311. package/skills/cm-dashboard/ui/app.js +0 -1278
  312. package/skills/cm-dashboard/ui/index.html +0 -206
  313. package/skills/cm-dashboard/ui/style.css +0 -440
  314. package/skills/cm-design-studio/SKILL.archive.md +0 -34
  315. package/skills/cm-design-studio/SKILL.md +0 -26
  316. package/skills/cm-engineering-meta/SKILL.archive.md +0 -73
  317. package/skills/cm-engineering-meta/SKILL.md +0 -26
  318. package/skills/cm-git-worktrees/SKILL.archive.md +0 -157
  319. package/skills/cm-git-worktrees/SKILL.md +0 -26
  320. package/skills/cm-post-deploy-canary/SKILL.archive.md +0 -22
  321. package/skills/cm-post-deploy-canary/SKILL.md +0 -26
  322. package/skills/cm-qa-visual-cli/SKILL.archive.md +0 -22
  323. package/skills/cm-qa-visual-cli/SKILL.md +0 -26
  324. package/skills/cm-second-opinion-cli/SKILL.archive.md +0 -23
  325. package/skills/cm-second-opinion-cli/SKILL.md +0 -26
  326. package/skills/cm-secret-shield/SKILL.archive.md +0 -580
  327. package/skills/cm-secret-shield/SKILL.md +0 -26
  328. package/skills/cm-security-gate/SKILL.archive.md +0 -239
  329. package/skills/cm-security-gate/SKILL.md +0 -26
  330. package/skills/cm-skill-health/SKILL.archive.md +0 -83
  331. package/skills/cm-skill-health/SKILL.md +0 -26
  332. package/skills/cm-skill-mastery/SKILL.archive.md +0 -156
  333. package/skills/cm-skill-mastery/SKILL.md +0 -26
  334. package/skills/cm-skill-search/SKILL.archive.md +0 -49
  335. package/skills/cm-skill-search/SKILL.md +0 -26
  336. package/skills/cm-skill-share/SKILL.archive.md +0 -58
  337. package/skills/cm-skill-share/SKILL.md +0 -26
  338. package/skills/cm-test-gate/SKILL.archive.md +0 -245
  339. package/skills/cm-test-gate/SKILL.md +0 -26
  340. package/skills/cm-ui-preview/SKILL.archive.md +0 -153
  341. package/skills/cm-ui-preview/SKILL.md +0 -26
package/dist/judge.js CHANGED
@@ -16,11 +16,10 @@ const SKILL_DOMAIN = {
16
16
  'cm-tdd': 'engineering',
17
17
  'cm-debugging': 'engineering',
18
18
  'cm-quality-gate': 'engineering',
19
- 'cm-test-gate': 'engineering',
20
19
  'cm-code-review': 'engineering',
21
20
  'cm-safe-deploy': 'operations',
22
21
  'cm-identity-guard': 'operations',
23
- 'cm-git-worktrees': 'operations',
22
+ 'cm-codeintell': 'operations',
24
23
  'cm-terminal': 'operations',
25
24
  'cm-planning': 'product',
26
25
  'cm-ux-master': 'product',
@@ -28,30 +27,32 @@ const SKILL_DOMAIN = {
28
27
  'cm-project-bootstrap': 'product',
29
28
  'cm-content-factory': 'growth',
30
29
  'cm-ads-tracker': 'growth',
31
- 'cro-methodology': 'growth',
32
- 'booking-calendar': 'growth',
30
+ 'cm-cro-methodology': 'growth',
31
+ 'cm-booking-calendar': 'growth',
33
32
  'cm-execution': 'orchestration',
34
33
  'cm-continuity': 'orchestration',
35
- 'cm-skill-mastery': 'orchestration',
34
+ 'cm-skill-index': 'orchestration',
36
35
  'cm-safe-i18n': 'orchestration',
37
36
  };
38
37
  // ─── Agent Affinity ─────────────────────────────────────────────────────────
39
38
  const AGENT_AFFINITY = {
40
- engineering: ['claude-code', 'cursor', 'antigravity'],
41
- operations: ['claude-code', 'antigravity', 'cursor'],
42
- product: ['antigravity', 'claude-code', 'cursor'],
43
- growth: ['antigravity', 'claude-code', 'cursor'],
44
- orchestration: ['antigravity', 'claude-code', 'cursor'],
45
- specialized: ['antigravity', 'claude-code', 'cursor'],
46
- debugging: ['claude-code', 'cursor', 'antigravity'],
47
- review: ['antigravity', 'claude-code'],
48
- documentation: ['antigravity', 'claude-code'],
49
- design: ['cursor', 'antigravity'],
39
+ engineering: ['claude-code', 'codex', 'opencode', 'cursor', 'antigravity'],
40
+ operations: ['claude-code', 'codex', 'opencode', 'antigravity', 'cursor'],
41
+ product: ['antigravity', 'claude-code', 'cursor', 'gemini-cli'],
42
+ growth: ['antigravity', 'gemini-cli', 'claude-code', 'cursor'],
43
+ orchestration: ['antigravity', 'claude-code', 'cursor', 'gemini-cli'],
44
+ specialized: ['antigravity', 'claude-code', 'codex', 'opencode', 'cursor'],
45
+ debugging: ['claude-code', 'codex', 'opencode', 'cursor', 'antigravity'],
46
+ review: ['antigravity', 'claude-code', 'codex', 'opencode'],
47
+ documentation: ['antigravity', 'claude-code', 'gemini-cli'],
48
+ design: ['cursor', 'antigravity', 'gemini-cli'],
50
49
  };
51
50
  // ─── Agent Display ──────────────────────────────────────────────────────────
52
51
  const AGENT_DISPLAY = {
53
52
  'antigravity': 'Google Antigravity',
54
53
  'claude-code': 'Claude Code',
54
+ 'codex': 'OpenAI Codex',
55
+ 'opencode': 'OpenCode',
55
56
  'cursor': 'Cursor',
56
57
  'gemini-cli': 'Gemini CLI',
57
58
  'windsurf': 'Windsurf',
@@ -562,11 +562,19 @@ const TOOLS = [
562
562
  },
563
563
  },
564
564
  ];
565
- // ─── MCP stdio protocol (JSON-RPC 2.0, Content-Length framing) ───────────────
565
+ // ─── MCP stdio protocol (JSON-RPC 2.0, auto-detect framing) ─────────────────
566
+ // Supports both NDJSON (MCP spec) and Content-Length framing (LSP-style).
567
+ // Auto-detects based on the first message received from the client.
568
+ let useContentLengthFraming = false;
566
569
  function sendMessage(msg) {
567
570
  const json = JSON.stringify(msg);
568
- const header = `Content-Length: ${Buffer.byteLength(json)}\r\n\r\n`;
569
- process.stdout.write(header + json);
571
+ if (useContentLengthFraming) {
572
+ const header = `Content-Length: ${Buffer.byteLength(json)}\r\n\r\n`;
573
+ process.stdout.write(header + json);
574
+ }
575
+ else {
576
+ process.stdout.write(json + '\n');
577
+ }
570
578
  }
571
579
  function respond(id, result) {
572
580
  sendMessage({ jsonrpc: '2.0', id, result });
@@ -576,10 +584,11 @@ function respondError(id, code, message) {
576
584
  }
577
585
  function handleRequest(msg) {
578
586
  return __awaiter(this, void 0, void 0, function* () {
587
+ var _a;
579
588
  const { id, method, params } = msg;
580
589
  if (method === 'initialize') {
581
590
  respond(id, {
582
- protocolVersion: '2024-11-05',
591
+ protocolVersion: (_a = params === null || params === void 0 ? void 0 : params.protocolVersion) !== null && _a !== void 0 ? _a : '2024-11-05',
583
592
  capabilities: { tools: {} },
584
593
  serverInfo: { name: SERVER_NAME, version: SERVER_VERSION },
585
594
  });
@@ -651,31 +660,44 @@ function handleRequest(msg) {
651
660
  }
652
661
  });
653
662
  }
654
- // ─── Stdin reader (Content-Length framed) ────────────────────────────────────
655
- let buffer = Buffer.alloc(0);
663
+ // ─── Stdin reader (supports both NDJSON and Content-Length framing) ─────────
664
+ let stdinBuffer = '';
665
+ process.stdin.setEncoding('utf8');
656
666
  process.stdin.on('data', (chunk) => __awaiter(void 0, void 0, void 0, function* () {
657
- buffer = Buffer.concat([buffer, chunk]);
658
- while (true) {
659
- const sep = buffer.indexOf('\r\n\r\n');
660
- if (sep === -1)
661
- break;
662
- const header = buffer.slice(0, sep).toString();
663
- const match = header.match(/Content-Length:\s*(\d+)/i);
664
- if (!match) {
665
- buffer = buffer.slice(sep + 4);
666
- break;
667
+ stdinBuffer += chunk;
668
+ while (stdinBuffer.length > 0) {
669
+ // Check for Content-Length framing (LSP-style)
670
+ const clMatch = stdinBuffer.match(/^Content-Length:\s*(\d+)\r\n\r\n/i);
671
+ if (clMatch) {
672
+ useContentLengthFraming = true;
673
+ const contentLength = parseInt(clMatch[1], 10);
674
+ const headerEnd = clMatch[0].length;
675
+ if (stdinBuffer.length < headerEnd + contentLength)
676
+ break; // wait for more data
677
+ const body = stdinBuffer.slice(headerEnd, headerEnd + contentLength);
678
+ stdinBuffer = stdinBuffer.slice(headerEnd + contentLength);
679
+ try {
680
+ const msg = JSON.parse(body);
681
+ yield handleRequest(msg);
682
+ }
683
+ catch (_a) {
684
+ // ignore malformed messages
685
+ }
686
+ continue;
667
687
  }
668
- const contentLength = parseInt(match[1], 10);
669
- const bodyStart = sep + 4;
670
- if (buffer.length < bodyStart + contentLength)
688
+ // NDJSON: newline-delimited JSON
689
+ const nl = stdinBuffer.indexOf('\n');
690
+ if (nl === -1)
671
691
  break;
672
- const body = buffer.slice(bodyStart, bodyStart + contentLength).toString('utf8');
673
- buffer = buffer.slice(bodyStart + contentLength);
692
+ const line = stdinBuffer.slice(0, nl).trim();
693
+ stdinBuffer = stdinBuffer.slice(nl + 1);
694
+ if (!line)
695
+ continue;
674
696
  try {
675
- const msg = JSON.parse(body);
697
+ const msg = JSON.parse(line);
676
698
  yield handleRequest(msg);
677
699
  }
678
- catch (_a) {
700
+ catch (_b) {
679
701
  // ignore malformed messages
680
702
  }
681
703
  }
@@ -49,8 +49,8 @@ function cmReviewTool(projectPath) {
49
49
  function cmQaTool(projectPath) {
50
50
  return {
51
51
  browse_daemon: 'Run: cm browse start --token <secret> then POST /session/start',
52
- visual: 'cm qa-visual --url http://localhost:3000',
53
- gates: ['cm-quality-gate', 'cm-test-gate'],
52
+ visual: 'Use the cm-browse workflow against http://localhost:3000 for visual QA',
53
+ gates: ['cm-quality-gate'],
54
54
  };
55
55
  }
56
56
  function cmDeployTool(projectPath) {
@@ -21,6 +21,7 @@ const builtin_1 = require("./chains/builtin");
21
21
  const context_bus_1 = require("./context-bus");
22
22
  const execution_analyzer_1 = require("./execution-analyzer");
23
23
  const storage_backend_1 = require("./storage-backend");
24
+ const skill_execution_cache_1 = require("./skill-execution-cache");
24
25
  // ─── Chain Matching ─────────────────────────────────────────────────────────
25
26
  // TRIZ #10: Preliminary Action — analyze task BEFORE dispatching
26
27
  /**
@@ -114,15 +115,36 @@ function findChain(chainId) {
114
115
  function createChainExecution(chain, projectId, taskTitle, agent, projectPath) {
115
116
  const now = new Date().toISOString();
116
117
  const backend = projectPath ? (0, storage_backend_1.getBackend)(projectPath) : undefined;
118
+ const cache = projectPath ? new skill_execution_cache_1.SkillExecutionCache(projectPath) : undefined;
117
119
  let selectedSteps;
120
+ let cacheHit = false;
118
121
  backend === null || backend === void 0 ? void 0 : backend.initialize();
122
+ cache === null || cache === void 0 ? void 0 : cache.initialize();
119
123
  try {
120
- selectedSteps = selectTopSkills(taskTitle, chain, 3, {
121
- getSkillMetric: backend ? (skill) => backend.getSkillMetric(skill) : undefined,
122
- });
124
+ const cachedChain = cache === null || cache === void 0 ? void 0 : cache.findCachedChain(taskTitle);
125
+ if (cachedChain === null || cachedChain === void 0 ? void 0 : cachedChain.skillChain.length) {
126
+ const selectedSkills = new Set(cachedChain.skillChain);
127
+ const cachedSteps = chain.steps.filter(step => selectedSkills.has(step.skill));
128
+ if (cachedSteps.length > 0) {
129
+ selectedSteps = cachedSteps;
130
+ cache === null || cache === void 0 ? void 0 : cache.recordHit(cachedChain.taskPattern);
131
+ cacheHit = true;
132
+ }
133
+ else {
134
+ selectedSteps = selectTopSkills(taskTitle, chain, 3, {
135
+ getSkillMetric: backend ? (skill) => backend.getSkillMetric(skill) : undefined,
136
+ });
137
+ }
138
+ }
139
+ else {
140
+ selectedSteps = selectTopSkills(taskTitle, chain, 3, {
141
+ getSkillMetric: backend ? (skill) => backend.getSkillMetric(skill) : undefined,
142
+ });
143
+ }
123
144
  }
124
145
  finally {
125
146
  backend === null || backend === void 0 ? void 0 : backend.close();
147
+ cache === null || cache === void 0 ? void 0 : cache.close();
126
148
  }
127
149
  const steps = selectedSteps.map((step, index) => ({
128
150
  index,
@@ -149,6 +171,7 @@ function createChainExecution(chain, projectId, taskTitle, agent, projectPath) {
149
171
  steps,
150
172
  startedAt: now,
151
173
  updatedAt: now,
174
+ cacheHit,
152
175
  };
153
176
  // Init context bus for this chain execution
154
177
  if (projectPath) {
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.analyzeSkillTokenFootprint = analyzeSkillTokenFootprint;
7
+ exports.formatSkillTokenReport = formatSkillTokenReport;
8
+ const fs_1 = __importDefault(require("fs"));
9
+ const path_1 = __importDefault(require("path"));
10
+ const token_budget_1 = require("./token-budget");
11
+ function fileStat(filePath) {
12
+ const content = fs_1.default.readFileSync(filePath, 'utf-8');
13
+ return {
14
+ path: filePath,
15
+ bytes: Buffer.byteLength(content, 'utf-8'),
16
+ lines: content === '' ? 0 : content.split('\n').length,
17
+ tokens: (0, token_budget_1.estimateTokens)(content),
18
+ };
19
+ }
20
+ function addStats(pathLabel, stats) {
21
+ return stats.reduce((acc, stat) => ({
22
+ path: pathLabel,
23
+ bytes: acc.bytes + stat.bytes,
24
+ lines: acc.lines + stat.lines,
25
+ tokens: acc.tokens + stat.tokens,
26
+ }), { path: pathLabel, bytes: 0, lines: 0, tokens: 0 });
27
+ }
28
+ function delta(from, to) {
29
+ return {
30
+ bytes: from.bytes - to.bytes,
31
+ lines: from.lines - to.lines,
32
+ tokens: from.tokens - to.tokens,
33
+ };
34
+ }
35
+ function analyzeSkillTokenFootprint(skillName, opts = {}) {
36
+ var _a;
37
+ const projectPath = path_1.default.resolve((_a = opts.projectPath) !== null && _a !== void 0 ? _a : process.cwd());
38
+ const skillPath = path_1.default.join(projectPath, 'skills', skillName);
39
+ const skillMdPath = path_1.default.join(skillPath, 'SKILL.md');
40
+ if (!fs_1.default.existsSync(skillMdPath)) {
41
+ throw new Error(`Skill "${skillName}" not found at ${skillMdPath}`);
42
+ }
43
+ const core = fileStat(skillMdPath);
44
+ const referencesDir = path_1.default.join(skillPath, 'references');
45
+ const references = fs_1.default.existsSync(referencesDir)
46
+ ? fs_1.default.readdirSync(referencesDir, { withFileTypes: true })
47
+ .filter((entry) => entry.isFile())
48
+ .map((entry) => path_1.default.join(referencesDir, entry.name))
49
+ .sort((a, b) => a.localeCompare(b))
50
+ .map(fileStat)
51
+ : [];
52
+ const progressiveMin = Object.assign(Object.assign({}, core), { path: 'progressive_min' });
53
+ const progressiveMax = addStats('progressive_max', [core, ...references]);
54
+ const report = {
55
+ skill: skillName,
56
+ project_path: projectPath,
57
+ skill_path: skillPath,
58
+ core,
59
+ references,
60
+ progressive_min: progressiveMin,
61
+ progressive_max: progressiveMax,
62
+ };
63
+ if (opts.baselinePath) {
64
+ const baselinePath = path_1.default.resolve(projectPath, opts.baselinePath);
65
+ if (!fs_1.default.existsSync(baselinePath)) {
66
+ throw new Error(`Baseline file not found: ${baselinePath}`);
67
+ }
68
+ const baseline = fileStat(baselinePath);
69
+ report.baseline = {
70
+ path: baseline.path,
71
+ bytes: baseline.bytes,
72
+ lines: baseline.lines,
73
+ tokens: baseline.tokens,
74
+ delta_vs_progressive_min: delta(baseline, progressiveMin),
75
+ delta_vs_progressive_max: delta(baseline, progressiveMax),
76
+ };
77
+ }
78
+ return report;
79
+ }
80
+ function formatSkillTokenReport(report) {
81
+ const lines = [
82
+ `Skill Token Report: ${report.skill}`,
83
+ `Project: ${report.project_path}`,
84
+ `Skill path: ${report.skill_path}`,
85
+ '',
86
+ `core: ${report.core.tokens} tok · ${report.core.lines} lines · ${report.core.bytes} bytes`,
87
+ `progressive_min: ${report.progressive_min.tokens} tok · ${report.progressive_min.lines} lines · ${report.progressive_min.bytes} bytes`,
88
+ `progressive_max: ${report.progressive_max.tokens} tok · ${report.progressive_max.lines} lines · ${report.progressive_max.bytes} bytes`,
89
+ `references: ${report.references.length}`,
90
+ ];
91
+ if (report.references.length > 0) {
92
+ lines.push('');
93
+ lines.push('Reference files:');
94
+ for (const ref of report.references) {
95
+ lines.push(`- ${path_1.default.basename(ref.path)}: ${ref.tokens} tok · ${ref.lines} lines · ${ref.bytes} bytes`);
96
+ }
97
+ }
98
+ if (report.baseline) {
99
+ lines.push('');
100
+ lines.push(`baseline: ${report.baseline.tokens} tok · ${report.baseline.lines} lines · ${report.baseline.bytes} bytes`);
101
+ lines.push(`baseline delta vs progressive_min: ${report.baseline.delta_vs_progressive_min.tokens} tok · ${report.baseline.delta_vs_progressive_min.lines} lines · ${report.baseline.delta_vs_progressive_min.bytes} bytes`);
102
+ lines.push(`baseline delta vs progressive_max: ${report.baseline.delta_vs_progressive_max.tokens} tok · ${report.baseline.delta_vs_progressive_max.lines} lines · ${report.baseline.delta_vs_progressive_max.bytes} bytes`);
103
+ }
104
+ return lines.join('\n');
105
+ }
@@ -240,12 +240,12 @@ function skillMappingForStep(step) {
240
240
  const map = {
241
241
  brainstorm: 'cm-brainstorm-idea',
242
242
  plan: 'cm-planning',
243
- design: 'cm-ui-preview / cm-design-system',
243
+ design: 'cm-design-system',
244
244
  tdd: 'cm-tdd',
245
245
  build: 'cm-execution',
246
246
  review: 'cm-code-review',
247
- qa: 'cm-quality-gate / cm-test-gate',
248
- security: 'cm-secret-shield / cm-security-gate',
247
+ qa: 'cm-quality-gate',
248
+ security: 'cm-safe-deploy / cm-identity-guard',
249
249
  ship: 'cm-safe-deploy',
250
250
  monitor: 'cm-canary (post-deploy)',
251
251
  retro: 'cm-retro',
@@ -280,13 +280,12 @@ function runOnboarding(version) {
280
280
  ] },
281
281
  { domain: '🚀 Operations', skills: [
282
282
  { name: 'cm-safe-deploy', desc: 'Multi-gate deploy' },
283
- { name: 'cm-secret-shield', desc: 'Secret scanning' },
284
- { name: 'cm-git-worktrees', desc: 'Isolated branches' },
283
+ { name: 'cm-execution', desc: 'Parallel execution + isolation' },
285
284
  { name: 'cm-identity-guard', desc: 'Account & project safety' },
286
285
  ] },
287
286
  { domain: '🎨 Product & Design', skills: [
288
287
  { name: 'cm-planning', desc: 'Plan before you code' },
289
- { name: 'cm-ui-preview', desc: 'AI-powered UI design' },
288
+ { name: 'cm-design-system', desc: 'AI-powered design generation' },
290
289
  { name: 'cm-ux-master', desc: '48 UX Laws + design system' },
291
290
  { name: 'cm-design-system', desc: 'Design token intelligence' },
292
291
  ] },
@@ -300,7 +299,7 @@ function runOnboarding(version) {
300
299
  { name: 'cm-execution', desc: 'Parallel agent dispatch' },
301
300
  { name: 'cm-skill-chain', desc: 'Multi-skill pipelines' },
302
301
  { name: 'cm-continuity', desc: 'Working memory protocol' },
303
- { name: 'cm-skill-mastery', desc: 'Meta-skill kit discipline' },
302
+ { name: 'cm-skill-index', desc: 'Meta-skill discovery discipline' },
304
303
  ] },
305
304
  { domain: '🔧 Workflow', skills: [
306
305
  { name: 'cm-start', desc: 'Idea → production code' },
@@ -6,7 +6,7 @@
6
6
  *
7
7
  * Storage: `.cm/design-taste.json` (JSON, not JSONL — small file, full rewrite).
8
8
  *
9
- * Consumed by cm-design-system and cm-ui-preview to bias token / prompt
9
+ * Consumed by cm-design-system to bias token / prompt
10
10
  * generation toward what the user has already approved.
11
11
  */
12
12
  var __importDefault = (this && this.__importDefault) || function (mod) {
@@ -11,6 +11,7 @@ exports.compressNpmTest = compressNpmTest;
11
11
  exports.collapseRepeatedLines = collapseRepeatedLines;
12
12
  exports.summarizeBuildLog = summarizeBuildLog;
13
13
  exports.compressFor = compressFor;
14
+ exports.compressMaybe = compressMaybe;
14
15
  const STATUS_LINE = /^(?:\s*)([MADRCU?!]{1,2}|\?\?)\s+(.+)$/;
15
16
  function compressGitStatus(stdout) {
16
17
  const lines = stdout.split('\n');
@@ -141,3 +142,10 @@ function compressFor(command, stdout) {
141
142
  }
142
143
  return collapseRepeatedLines(stdout, 3);
143
144
  }
145
+ function compressMaybe(command, stdout, maxLines = 50) {
146
+ const lines = stdout.split('\n');
147
+ if (lines.length <= maxLines && stdout.length <= 4000) {
148
+ return stdout;
149
+ }
150
+ return compressFor(command, stdout);
151
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codymaster",
3
- "version": "7.0.2",
3
+ "version": "7.0.3",
4
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": {
@@ -37,6 +37,7 @@
37
37
  "check:platforms": "node scripts/build-skills.mjs --platforms cursor,codex,opencode --check",
38
38
  "sync:all": "node scripts/build-skills.mjs --all-platforms",
39
39
  "sync:all:check": "node scripts/build-skills.mjs --all-platforms --check",
40
+ "pack:plugin": "node scripts/pack-plugin.mjs",
40
41
  "changelog": "bash scripts/update-changelog.sh",
41
42
  "changelog:dry": "bash scripts/update-changelog.sh --dry-run",
42
43
  "update": "cm update --full",
@@ -1,4 +1,4 @@
1
- /* CodyMaster Mission Control v4 — Multi-Project, History, Deploy, Changelog, Auto-Sync */
1
+ /* opencode Mission Control v4 — Multi-Project, History, Deploy, Changelog, Auto-Sync */
2
2
 
3
3
  (function () {
4
4
  'use strict';
@@ -34,14 +34,14 @@
34
34
  });
35
35
  const API = '/api';
36
36
  const AGENT_COLORS = {
37
- 'antigravity': '#3fb950', 'claude-code': '#bc8cff', 'cursor': '#58a6ff',
38
- 'gemini-cli': '#d29922', 'windsurf': '#f97316', 'cline': '#a1887f',
39
- 'copilot': '#8b949e', 'manual': '#e6edf3',
37
+ 'antigravity': '#3fb950', 'claude-code': '#bc8cff', 'codex': '#10a37f',
38
+ 'cursor': '#58a6ff', 'gemini-cli': '#d29922', 'opencode': '#ff6b6b', 'windsurf': '#f97316',
39
+ 'cline': '#a1887f', 'copilot': '#8b949e', 'manual': '#e6edf3',
40
40
  };
41
41
  const AGENT_LABELS = {
42
- 'antigravity': 'Antigravity', 'claude-code': 'Claude Code', 'cursor': 'Cursor',
43
- 'gemini-cli': 'Gemini CLI', 'windsurf': 'Windsurf', 'cline': 'Cline',
44
- 'copilot': 'Copilot', 'manual': 'Manual',
42
+ 'antigravity': 'Antigravity', 'claude-code': 'Claude Code', 'codex': 'Codex',
43
+ 'cursor': 'Cursor', 'gemini-cli': 'Gemini CLI', 'opencode': 'OpenCode', 'windsurf': 'Windsurf',
44
+ 'cline': 'Cline', 'copilot': 'Copilot', 'manual': 'Manual',
45
45
  };
46
46
  const ACTIVITY_ICONS = {
47
47
  'task_created': '✨', 'task_moved': '↔️', 'task_done': '✅', 'task_deleted': '🗑️', 'task_updated': '✏️',
@@ -314,12 +314,11 @@
314
314
  });
315
315
 
316
316
  // Agents
317
- const allAgents = {};
318
- tasks.forEach(t => { if (t.agent) allAgents[t.agent] = (allAgents[t.agent] || 0) + 1; });
319
- if (Object.keys(allAgents).length === 0) {
317
+ const visibleAgents = getVisibleAgents();
318
+ if (visibleAgents.length === 0) {
320
319
  agentListEl.innerHTML = '<div class="agent-empty">No active agents</div>';
321
320
  } else {
322
- agentListEl.innerHTML = Object.entries(allAgents).sort((a, b) => b[1] - a[1]).map(([agent, count]) => {
321
+ agentListEl.innerHTML = visibleAgents.map(({ agent, count }) => {
323
322
  const color = AGENT_COLORS[agent] || '#8b949e';
324
323
  return `<div class="agent-badge"><span class="agent-dot" style="background:${color}"></span><span>${esc(AGENT_LABELS[agent] || agent)}</span><span class="agent-task-count">${count}</span></div>`;
325
324
  }).join('');
@@ -330,6 +329,34 @@
330
329
 
331
330
  function countAllTasks() { return projects.reduce((s, p) => s + (p.taskCount || 0), 0); }
332
331
 
332
+ function getVisibleAgents() {
333
+ const taskCounts = {};
334
+ tasks.forEach(t => {
335
+ if (t.agent) taskCounts[t.agent] = (taskCounts[t.agent] || 0) + 1;
336
+ });
337
+
338
+ const visibleAgents = new Set();
339
+ const sourceProjects = selectedProjectId
340
+ ? projects.filter(p => p.id === selectedProjectId)
341
+ : projects;
342
+
343
+ sourceProjects.forEach(project => {
344
+ (project.activeAgents || project.agents || []).forEach(agent => {
345
+ if (agent) visibleAgents.add(agent);
346
+ });
347
+ });
348
+
349
+ Object.keys(taskCounts).forEach(agent => visibleAgents.add(agent));
350
+
351
+ return Array.from(visibleAgents)
352
+ .sort((a, b) => {
353
+ const countDiff = (taskCounts[b] || 0) - (taskCounts[a] || 0);
354
+ if (countDiff !== 0) return countDiff;
355
+ return String(AGENT_LABELS[a] || a).localeCompare(String(AGENT_LABELS[b] || b));
356
+ })
357
+ .map(agent => ({ agent, count: taskCounts[agent] || 0 }));
358
+ }
359
+
333
360
  // ── Board Rendering ────────────────────────
334
361
  function renderBoard() {
335
362
  const colNames = ['backlog', 'in-progress', 'review', 'done'];
@@ -469,7 +496,7 @@
469
496
  function renderDeploys() {
470
497
  const container = document.getElementById('deploy-list');
471
498
  if (deployments.length === 0) {
472
- container.innerHTML = '<div class="deploy-empty">No deployments yet. Deploy from CLI with: <code>codymaster deploy staging</code></div>';
499
+ container.innerHTML = '<div class="deploy-empty">No deployments yet. Deploy from CLI with: <code>opencode deploy staging</code></div>';
473
500
  return;
474
501
  }
475
502
 
@@ -515,7 +542,7 @@
515
542
  function renderChangelog() {
516
543
  const container = document.getElementById('changelog-list');
517
544
  if (changelog.length === 0) {
518
- container.innerHTML = '<div class="changelog-empty">No changelog entries yet. Add one with the button above or CLI: <code>codymaster changelog add</code></div>';
545
+ container.innerHTML = '<div class="changelog-empty">No changelog entries yet. Add one with the button above or CLI: <code>opencode changelog add</code></div>';
519
546
  return;
520
547
  }
521
548