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/CHANGELOG.md CHANGED
@@ -6,6 +6,70 @@ Categories: 🚀 **Improvements** | 🐛 **Bug Fixes** | 🔒 **Security**
6
6
 
7
7
  ---
8
8
 
9
+ ## [7.0.3] - 2026-05-13
10
+
11
+ ### 🚀 Improvements — Codex Runtime + Token-Efficient Handoffs
12
+
13
+ Focused compatibility and cleanup release. Align CodyMaster with the current Codex CLI, reduce agent handoff noise, and remove dead references to deprecated skills across docs, profiles, and runtime hints.
14
+
15
+ ### 🚀 Improvements — Skill Token Auditing + Progressive Disclosure
16
+
17
+ Added first-class skill token footprint auditing and used it to refactor the heaviest always-on skills into lazy-loaded `references/` packs.
18
+
19
+ **Skill Token Auditing:**
20
+ - Added `cm token skill <skillName>` under the existing `cm token` namespace
21
+ - New `--project`, `--json`, and `--baseline` options for repo-scoped reports, machine-readable output, and before/after comparisons
22
+ - New `src/skill-token-report.ts` analyzer for `SKILL.md`, direct `references/`, `progressive_min`, `progressive_max`, and baseline deltas
23
+ - Added `test/skill-token-report.test.ts` and `test/brain-token-skill.test.ts`
24
+
25
+ **Progressive Disclosure Refactors:**
26
+ - Split `skills/cm-execution/` into a short router `SKILL.md` plus mode-specific references
27
+ - Split `skills/cm-codeintell/` by intelligence layer: skeleton, codegraph, architecture, context builder, integration workflows
28
+ - Split `skills/cm-safe-deploy/` by deploy path: individual gates, setup, and rollback
29
+ - Split `skills/cm-continuity/` by concern: session protocol, template, memory model, MCP bridge, URI scheme, storage, audit
30
+ - Split `skills/cm-tdd/` by workflow/support: red-green-refactor, test quality, rationalizations, bugfix example, stuck/debugging
31
+ - Preserved existing skill names, compressed frontmatter style, and distribution compatibility with flat `references/`
32
+
33
+ **Measured Token Wins (`progressive_min`):**
34
+ - `cm-execution`: `3990 → 963` tokens
35
+ - `cm-codeintell`: `4981 → 685` tokens
36
+ - `cm-safe-deploy`: `4268 → 780` tokens
37
+ - `cm-continuity`: `4157 → 652` tokens
38
+ - `cm-tdd`: `2953 → 554` tokens
39
+
40
+ **Codex Compatibility:**
41
+ - Updated `src/agent/codex.ts` to use `codex exec --json`
42
+ - Added proper `codex exec resume` support for resumed sessions
43
+ - Parse real Codex JSONL events (`thread.started`, `item.completed`, `turn.completed`)
44
+ - Preserve `sessionId` and token `usage` from Codex runtime output
45
+
46
+ **Token Efficiency + Runtime Reuse:**
47
+ - Refactored `src/agent-dispatch.ts` to emit compact structured JSON task envelopes instead of verbose Markdown task files
48
+ - Fixed generated CLI handoff commands for Codex and Claude Code to match current CLIs
49
+ - Wired `SkillExecutionCache` into `src/skill-chain.ts` for real cached skill-chain reuse during execution
50
+ - Wired successful execution write-back into `src/execution-analyzer.ts`
51
+ - Added `compressMaybe()` helper in `src/utils/output-compress.ts` for safer runtime log compression
52
+
53
+ **Docs, Profiles, and Naming Cleanup:**
54
+ - Synced skill install manifests in `skills/profiles/{core,design,growth,full}.txt` and `skills/profiles/top35.json`
55
+ - Updated skill library docs under `docs/skills/` to remove broken links to deleted/deprecated skill folders
56
+ - Cleaned workflow and operations docs to point at current skills like `cm-safe-deploy`, `cm-design-system`, `cm-quality-gate`, `cm-execution`, and `cm-skill-index`
57
+ - Reduced deprecation-heavy copywriting in user-facing docs so new users see the current path first
58
+ - Kept migration-specific references only where they still serve version-upgrade guidance (`docs/migration-v2.md`) or advisory protocol compatibility
59
+
60
+ **Tests Added:**
61
+ - `test/codex-backend.test.ts`
62
+ - `test/agent-dispatch.test.ts`
63
+ - `test/skill-chain-cache.test.ts`
64
+ - `test/skill-token-report.test.ts`
65
+ - `test/brain-token-skill.test.ts`
66
+
67
+ **Verification:**
68
+ - `npm run test:gate:kit`
69
+ - Result: 54 test files passed, 422 tests passed
70
+
71
+ ---
72
+
9
73
  ## [7.0.0] - 2026-05-11
10
74
 
11
75
  ### 🚀 Improvements — Browse Hybrid Bridge
package/README.md CHANGED
@@ -20,7 +20,6 @@
20
20
  [![npm version](https://img.shields.io/npm/v/codymaster.svg)](https://www.npmjs.com/package/codymaster)
21
21
  [![npm downloads](https://img.shields.io/npm/dm/codymaster.svg)](https://www.npmjs.com/package/codymaster)
22
22
  [![license](https://img.shields.io/npm/l/codymaster.svg)](https://github.com/tody-agent/codymaster/blob/main/LICENSE)
23
- [![Discord](https://img.shields.io/badge/Discord-Join-7289da?logo=discord&logoColor=white)](https://discord.gg/codymaster)
24
23
 
25
24
  ---
26
25
 
@@ -246,6 +245,44 @@ cm status # See your tasks and progress
246
245
  cm dashboard # Open the visual dashboard
247
246
  ```
248
247
 
248
+ ### For OpenCode users
249
+
250
+ OpenCode supports both skills and plugins:
251
+
252
+ ```bash
253
+ git clone https://github.com/tody-agent/codymaster.git ~/.cody-master
254
+
255
+ # Skills (auto-load)
256
+ ln -s ~/.cody-master/.opencode/skills ~/.opencode/skills
257
+
258
+ # Plugins (optional — adds custom tools)
259
+ mkdir -p ~/.opencode/plugins
260
+ ln -s ~/.cody-master/.opencode/plugins/cm-brainstorm-idea.ts ~/.opencode/plugins/
261
+ ```
262
+
263
+ Restart OpenCode to activate. The `cm-brainstorm-idea` plugin adds a strategic analysis tool with auto-detection for brainstorm keywords.
264
+
265
+ 📖 [Full OpenCode installation guide →](.opencode/INSTALL.md)
266
+
267
+ ### For Codex users
268
+
269
+ Fastest path:
270
+
271
+ ```bash
272
+ git clone https://github.com/tody-agent/codymaster.git ~/.cody-master
273
+ cd ~/.cody-master
274
+ npm ci
275
+ npm run build:platforms
276
+ ```
277
+
278
+ Then tell Codex:
279
+
280
+ ```text
281
+ Fetch and follow instructions from https://raw.githubusercontent.com/tody-agent/codymaster/main/.codex/INSTALL.md
282
+ ```
283
+
284
+ Or use the local Codex skill tree directly at `.codex/skills/`.
285
+
249
286
  ### No Node.js?
250
287
 
251
288
  ```bash
@@ -30,32 +30,79 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar
30
30
  };
31
31
  Object.defineProperty(exports, "__esModule", { value: true });
32
32
  exports.CodexBackend = void 0;
33
+ exports.buildCodexPrompt = buildCodexPrompt;
34
+ exports.buildCodexArgs = buildCodexArgs;
33
35
  const spawn_helper_1 = require("./spawn-helper");
36
+ function buildCodexPrompt(prompt, opts) {
37
+ var _a;
38
+ if (!((_a = opts.systemPrompt) === null || _a === void 0 ? void 0 : _a.trim()))
39
+ return prompt;
40
+ return [
41
+ '<system_prompt>',
42
+ opts.systemPrompt.trim(),
43
+ '</system_prompt>',
44
+ '',
45
+ prompt,
46
+ ].join('\n');
47
+ }
48
+ function buildCodexArgs(prompt, opts) {
49
+ const baseArgs = ['--json', '--skip-git-repo-check'];
50
+ if (opts.model)
51
+ baseArgs.push('--model', opts.model);
52
+ if (opts.customArgs)
53
+ baseArgs.push(...opts.customArgs);
54
+ const finalPrompt = buildCodexPrompt(prompt, opts);
55
+ if (opts.resumeSessionId) {
56
+ return ['exec', 'resume', ...baseArgs, opts.resumeSessionId, finalPrompt];
57
+ }
58
+ return ['exec', ...baseArgs, finalPrompt];
59
+ }
34
60
  class AgentMessageTransformer {
35
61
  constructor() {
36
62
  this.output = [];
37
63
  }
38
64
  transform(msg) {
39
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v;
65
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0;
66
+ const codexEvent = msg;
67
+ if (codexEvent.thread_id) {
68
+ this.lastThreadId = codexEvent.thread_id;
69
+ }
70
+ if (codexEvent.type === 'item.completed' && ((_a = codexEvent.item) === null || _a === void 0 ? void 0 : _a.type) === 'agent_message') {
71
+ const content = (_b = codexEvent.item.text) !== null && _b !== void 0 ? _b : '';
72
+ if (content) {
73
+ this.output.push(content);
74
+ return [{ type: 'text', content, sessionId: this.lastThreadId }];
75
+ }
76
+ }
77
+ if (codexEvent.type === 'turn.completed' && codexEvent.usage) {
78
+ this.usage = {
79
+ codex: {
80
+ input: (_c = codexEvent.usage.input_tokens) !== null && _c !== void 0 ? _c : 0,
81
+ output: (_d = codexEvent.usage.output_tokens) !== null && _d !== void 0 ? _d : 0,
82
+ cacheRead: (_e = codexEvent.usage.cached_input_tokens) !== null && _e !== void 0 ? _e : 0,
83
+ },
84
+ };
85
+ return [];
86
+ }
40
87
  const t = msg.type;
41
88
  if (t === 'message' || t === 'text' || t === 'assistant') {
42
- const content = (_b = (_a = msg.content) !== null && _a !== void 0 ? _a : msg.text) !== null && _b !== void 0 ? _b : '';
89
+ const content = (_g = (_f = msg.content) !== null && _f !== void 0 ? _f : msg.text) !== null && _g !== void 0 ? _g : '';
43
90
  if (content) {
44
91
  this.output.push(content);
45
- return [{ type: 'text', content }];
92
+ return [{ type: 'text', content, sessionId: this.lastThreadId }];
46
93
  }
47
94
  }
48
95
  if (t === 'thinking') {
49
- return [{ type: 'thinking', content: (_c = msg.content) !== null && _c !== void 0 ? _c : '' }];
96
+ return [{ type: 'thinking', content: (_h = msg.content) !== null && _h !== void 0 ? _h : '' }];
50
97
  }
51
98
  if (t === 'tool_use' || t === 'tool-use') {
52
99
  return [
53
100
  {
54
101
  type: 'tool-use',
55
- tool: (_e = (_d = msg.tool) !== null && _d !== void 0 ? _d : msg.name) !== null && _e !== void 0 ? _e : 'unknown',
56
- callId: (_g = (_f = msg.callId) !== null && _f !== void 0 ? _f : msg.id) !== null && _g !== void 0 ? _g : '',
57
- input: (_j = (_h = msg.input) !== null && _h !== void 0 ? _h : msg.arguments) !== null && _j !== void 0 ? _j : {},
58
- attempt: (_k = msg.attempt) !== null && _k !== void 0 ? _k : 1,
102
+ tool: (_k = (_j = msg.tool) !== null && _j !== void 0 ? _j : msg.name) !== null && _k !== void 0 ? _k : 'unknown',
103
+ callId: (_m = (_l = msg.callId) !== null && _l !== void 0 ? _l : msg.id) !== null && _m !== void 0 ? _m : '',
104
+ input: (_p = (_o = msg.input) !== null && _o !== void 0 ? _o : msg.arguments) !== null && _p !== void 0 ? _p : {},
105
+ attempt: (_q = msg.attempt) !== null && _q !== void 0 ? _q : 1,
59
106
  parentCallId: msg.parentCallId,
60
107
  },
61
108
  ];
@@ -64,26 +111,26 @@ class AgentMessageTransformer {
64
111
  return [
65
112
  {
66
113
  type: 'tool-result',
67
- callId: (_m = (_l = msg.callId) !== null && _l !== void 0 ? _l : msg.id) !== null && _m !== void 0 ? _m : '',
68
- output: (_p = (_o = msg.output) !== null && _o !== void 0 ? _o : msg.content) !== null && _p !== void 0 ? _p : '',
69
- isError: (_q = msg.isError) !== null && _q !== void 0 ? _q : false,
114
+ callId: (_s = (_r = msg.callId) !== null && _r !== void 0 ? _r : msg.id) !== null && _s !== void 0 ? _s : '',
115
+ output: (_u = (_t = msg.output) !== null && _t !== void 0 ? _t : msg.content) !== null && _u !== void 0 ? _u : '',
116
+ isError: (_v = msg.isError) !== null && _v !== void 0 ? _v : false,
70
117
  },
71
118
  ];
72
119
  }
73
120
  if (t === 'status') {
74
- return [{ type: 'status', status: (_r = msg.status) !== null && _r !== void 0 ? _r : '' }];
121
+ return [{ type: 'status', status: (_w = msg.status) !== null && _w !== void 0 ? _w : '' }];
75
122
  }
76
123
  if (t === 'log') {
77
124
  return [
78
125
  {
79
126
  type: 'log',
80
- level: (_s = msg.level) !== null && _s !== void 0 ? _s : 'info',
81
- content: (_t = msg.content) !== null && _t !== void 0 ? _t : '',
127
+ level: (_x = msg.level) !== null && _x !== void 0 ? _x : 'info',
128
+ content: (_y = msg.content) !== null && _y !== void 0 ? _y : '',
82
129
  },
83
130
  ];
84
131
  }
85
132
  if (t === 'error') {
86
- return [{ type: 'error', content: (_v = (_u = msg.content) !== null && _u !== void 0 ? _u : msg.message) !== null && _v !== void 0 ? _v : '' }];
133
+ return [{ type: 'error', content: (_0 = (_z = msg.content) !== null && _z !== void 0 ? _z : msg.message) !== null && _0 !== void 0 ? _0 : '' }];
87
134
  }
88
135
  // Unknown message types are surfaced as status
89
136
  return [{ type: 'status', status: JSON.stringify(msg) }];
@@ -91,6 +138,12 @@ class AgentMessageTransformer {
91
138
  getOutput() {
92
139
  return this.output.join('');
93
140
  }
141
+ getSessionId() {
142
+ return this.lastThreadId;
143
+ }
144
+ getUsage() {
145
+ return this.usage;
146
+ }
94
147
  }
95
148
  function transformMessages(raw, transformer) {
96
149
  return __asyncGenerator(this, arguments, function* transformMessages_1() {
@@ -134,6 +187,8 @@ function collectResult(proc, transformer, startTime) {
134
187
  output: transformer.getOutput(),
135
188
  durationMs,
136
189
  failureReason,
190
+ sessionId: transformer.getSessionId(),
191
+ usage: transformer.getUsage(),
137
192
  });
138
193
  });
139
194
  proc.child.on('error', (err) => {
@@ -144,6 +199,8 @@ function collectResult(proc, transformer, startTime) {
144
199
  error: err instanceof Error ? err.message : String(err),
145
200
  failureReason: 'agent_crash',
146
201
  durationMs,
202
+ sessionId: transformer.getSessionId(),
203
+ usage: transformer.getUsage(),
147
204
  });
148
205
  });
149
206
  });
@@ -177,12 +234,7 @@ class CodexBackend {
177
234
  }
178
235
  execute(prompt, opts) {
179
236
  return __awaiter(this, void 0, void 0, function* () {
180
- const args = ['--full-auto'];
181
- if (opts.model)
182
- args.push('--model', opts.model);
183
- if (opts.customArgs)
184
- args.push(...opts.customArgs);
185
- args.push(prompt);
237
+ const args = buildCodexArgs(prompt, opts);
186
238
  const proc = (0, spawn_helper_1.spawnProcess)({
187
239
  command: 'codex',
188
240
  args,
@@ -4,6 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.validateDispatch = validateDispatch;
7
+ exports.generateTaskEnvelope = generateTaskEnvelope;
7
8
  exports.dispatchTaskToAgent = dispatchTaskToAgent;
8
9
  const fs_1 = __importDefault(require("fs"));
9
10
  const path_1 = __importDefault(require("path"));
@@ -11,6 +12,8 @@ const path_1 = __importDefault(require("path"));
11
12
  const AGENT_SKILL_PREFIX = {
12
13
  'antigravity': '@[/',
13
14
  'claude-code': '/',
15
+ 'codex': '/',
16
+ 'opencode': '/',
14
17
  'cursor': '@',
15
18
  'gemini-cli': '@[/',
16
19
  'windsurf': '@',
@@ -20,6 +23,8 @@ const AGENT_SKILL_PREFIX = {
20
23
  const AGENT_DISPLAY = {
21
24
  'antigravity': 'Google Antigravity',
22
25
  'claude-code': 'Claude Code',
26
+ 'codex': 'OpenAI Codex',
27
+ 'opencode': 'OpenCode',
23
28
  'cursor': 'Cursor',
24
29
  'gemini-cli': 'Gemini CLI',
25
30
  'windsurf': 'Windsurf',
@@ -56,58 +61,60 @@ function validateDispatch(task, project, force = false) {
56
61
  return null; // All validations passed
57
62
  }
58
63
  // ─── Task File Generation ───────────────────────────────────────────────────
59
- function generateTaskFileContent(task, project, dashboardPort = 6969) {
64
+ function buildDoneCriteria(task) {
65
+ const criteria = [
66
+ 'Complete the requested scope only.',
67
+ 'Preserve unrelated existing changes.',
68
+ 'Report verification evidence before claiming completion.',
69
+ ];
70
+ if (task.skill) {
71
+ criteria.unshift(`Follow the workflow guidance from skill "${task.skill}" when it applies.`);
72
+ }
73
+ return criteria;
74
+ }
75
+ function generateTaskEnvelope(task, project, dashboardPort = 6969) {
60
76
  const agentName = AGENT_DISPLAY[task.agent] || task.agent;
61
77
  const skillPrefix = AGENT_SKILL_PREFIX[task.agent] || '';
62
78
  const skillSuffix = task.agent === 'antigravity' || task.agent === 'gemini-cli' ? ']' : '';
63
79
  const skillRef = task.skill ? `${skillPrefix}${task.skill}${skillSuffix}` : 'None';
64
- const now = new Date().toISOString();
65
- const priorityEmoji = {
66
- 'low': '🟢', 'medium': '🟡', 'high': '🟠', 'urgent': '🔴',
80
+ return {
81
+ schema: 'codymaster-task@2',
82
+ task: {
83
+ id: task.id,
84
+ title: task.title,
85
+ description: task.description || '',
86
+ priority: task.priority,
87
+ createdAt: task.createdAt,
88
+ dispatchedAt: new Date().toISOString(),
89
+ },
90
+ execution: {
91
+ agent: agentName,
92
+ workspace: project.path,
93
+ skill: task.skill || null,
94
+ skillInvocation: task.skill ? skillRef : null,
95
+ doneCriteria: buildDoneCriteria(task),
96
+ },
97
+ project: {
98
+ id: project.id,
99
+ name: project.name,
100
+ },
101
+ progressReporting: {
102
+ baseUrl: `http://localhost:${dashboardPort}`,
103
+ inProgress: {
104
+ method: 'PUT',
105
+ path: `/api/tasks/${task.id}/move`,
106
+ body: { column: 'in-progress' },
107
+ },
108
+ done: {
109
+ method: 'PUT',
110
+ path: `/api/tasks/${task.id}/move`,
111
+ body: { column: 'done' },
112
+ },
113
+ },
67
114
  };
68
- let content = `# Task: ${task.title}
69
-
70
- | Field | Value |
71
- |-------|-------|
72
- | Agent | ${agentName} |
73
- | Skill | ${skillRef} |
74
- | Priority | ${priorityEmoji[task.priority] || '🟡'} ${task.priority} |
75
- | Project | ${project.name} |
76
- | Created | ${task.createdAt} |
77
- | Dispatched | ${now} |
78
- | Task ID | ${task.id} |
79
-
80
- ## Description
81
-
82
- ${task.description || 'No additional description provided.'}
83
-
84
- ## Instructions
85
-
86
- Execute this task in the project workspace at: \`${project.path}\`
87
- `;
88
- if (task.skill) {
89
- content += `
90
- Use the skill \`${task.skill}\` to guide execution. Invoke it with: ${skillRef}
91
- `;
92
- }
93
- content += `
94
- ## Progress Reporting
95
-
96
- After completing the task, update the status via CodyMaster API:
97
-
98
- \`\`\`bash
99
- # Mark as in-progress
100
- curl -s -X PUT http://localhost:${dashboardPort}/api/tasks/${task.id}/move \\
101
- -H "Content-Type: application/json" \\
102
- -d '{"column": "in-progress"}'
103
-
104
- # Mark as done when complete
105
- curl -s -X PUT http://localhost:${dashboardPort}/api/tasks/${task.id}/move \\
106
- -H "Content-Type: application/json" \\
107
- -d '{"column": "done"}'
108
- \`\`\`
109
- `;
110
- return content;
115
+ }
116
+ function generateTaskFileContent(task, project, dashboardPort = 6969) {
117
+ return JSON.stringify(generateTaskEnvelope(task, project, dashboardPort), null, 2);
111
118
  }
112
119
  // ─── Dispatcher ─────────────────────────────────────────────────────────────
113
120
  function dispatchTaskToAgent(task, project, force = false) {
@@ -156,6 +163,14 @@ function dispatchTaskToAgent(task, project, force = false) {
156
163
  }
157
164
  // Generate CLI command
158
165
  const relativePath = path_1.default.relative(project.path, filePath);
159
- const cliCommand = `gemini run --task "${relativePath}"`;
166
+ const AGENT_CLI = {
167
+ 'antigravity': `antigravity -p "$(cat \\"${relativePath}\\")"`,
168
+ 'codex': `codex exec "$(cat \\"${relativePath}\\")"`,
169
+ 'opencode': `opencode --task "${relativePath}"`,
170
+ 'cursor': `cursor --task "${relativePath}"`,
171
+ 'gemini-cli': `gemini run --task "${relativePath}"`,
172
+ 'claude-code': `claude -p "$(cat \\"${relativePath}\\")"`,
173
+ };
174
+ const cliCommand = AGENT_CLI[task.agent] || `# Open and run: ${relativePath}`;
160
175
  return { success: true, filePath, prompt: content, cliCommand };
161
176
  }
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.registerBrainCommands = registerBrainCommands;
4
4
  const smart_brain_router_1 = require("../../smart-brain-router");
5
5
  const skill_execution_cache_1 = require("../../skill-execution-cache");
6
+ const skill_token_report_1 = require("../../skill-token-report");
6
7
  const token_budget_1 = require("../../token-budget");
7
8
  // ─── Brain & Token CLI Commands ──────────────────────────────────────────────
8
9
  function registerBrainCommands(program) {
@@ -27,6 +28,23 @@ function registerBrainCommands(program) {
27
28
  const token = program
28
29
  .command('token')
29
30
  .description('Token usage analysis and savings tracking');
31
+ token
32
+ .command('skill <skillName>')
33
+ .description('Show token footprint for a skill SKILL.md and direct references/')
34
+ .option('-p, --project <path>', 'Project path', process.cwd())
35
+ .option('--json', 'Emit stable JSON output', false)
36
+ .option('--baseline <file>', 'Compare against a legacy monolithic file')
37
+ .action((skillName, opts) => {
38
+ const report = (0, skill_token_report_1.analyzeSkillTokenFootprint)(skillName, {
39
+ projectPath: opts.project,
40
+ baselinePath: opts.baseline,
41
+ });
42
+ if (opts.json) {
43
+ console.log(JSON.stringify(report, null, 2));
44
+ return;
45
+ }
46
+ console.log((0, skill_token_report_1.formatSkillTokenReport)(report));
47
+ });
30
48
  token
31
49
  .command('report')
32
50
  .description('Show current token budget allocation')
@@ -44,7 +44,7 @@ Implement the chosen variant using existing design system tokens. …
44
44
  `;
45
45
  const README = `# .cm/design-studio
46
46
 
47
- Local artifact folder for **cm-design-studio**: variants, checklist, handoff.
47
+ Local artifact folder for the **design-studio** flow: variants, checklist, handoff.
48
48
 
49
49
  Happy path:
50
50
 
@@ -50,13 +50,13 @@ function suggestFromContext(projectPath) {
50
50
  out.push({ skill: 'cm-dockit', reason: 'Markdown/docs paths changed.' });
51
51
  }
52
52
  if (/(package\.json|package-lock\.json|pnpm-lock|yarn\.lock)/m.test(joined)) {
53
- out.push({ skill: 'cm-test-gate', reason: 'Dependency lockfiles changed; run the test gate.' });
53
+ out.push({ skill: 'cm-quality-gate', reason: 'Dependency lockfiles changed; run the verification gate.' });
54
54
  }
55
55
  if (/(\.github\/workflows\/|Dockerfile|fly\.toml|wrangler)/m.test(joined)) {
56
56
  out.push({ skill: 'cm-safe-deploy', reason: 'CI or deploy config changed.' });
57
57
  }
58
58
  if (lines.length > 8) {
59
- out.push({ skill: 'cm-git-worktrees', reason: 'Many working-tree changes; consider an isolated worktree.' });
59
+ out.push({ skill: 'cm-execution', reason: 'Many working-tree changes; consider isolated execution or a clean workspace.' });
60
60
  }
61
61
  const sprint = (0, sprint_pipeline_1.readSprintState)(root);
62
62
  if (sprint && sprint.current_index >= 0 && sprint.current_index < sprint.pipeline.length) {
@@ -69,7 +69,7 @@ function suggestFromContext(projectPath) {
69
69
  }
70
70
  if (fs_1.default.existsSync(path_1.default.join(root, '.cm', 'config.yaml'))) {
71
71
  out.push({
72
- skill: 'cm-engineering-meta',
72
+ skill: 'cm-mcp-engineering',
73
73
  reason: '`.cm/config.yaml` present; engineering commands honor shared config.',
74
74
  });
75
75
  }
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getProjectActiveAgents = getProjectActiveAgents;
4
+ function getProjectActiveAgents(project, tasks) {
5
+ return [...new Set([
6
+ ...(Array.isArray(project.agents) ? project.agents : []),
7
+ ...tasks.map(t => t.agent).filter(Boolean),
8
+ ])];
9
+ }
package/dist/dashboard.js CHANGED
@@ -22,13 +22,15 @@ const skill_chain_1 = require("./skill-chain");
22
22
  const validate_1 = require("./schemas/validate");
23
23
  const task_schema_1 = require("./schemas/task-schema");
24
24
  const security_headers_1 = require("./middleware/security-headers");
25
+ const dashboard_project_summary_1 = require("./dashboard-project-summary");
25
26
  // ─── Dashboard Server ───────────────────────────────────────────────────────
26
27
  function launchDashboard(port = data_1.DEFAULT_PORT, silent = false) {
27
28
  const app = (0, express_1.default)();
28
29
  app.disable('x-powered-by');
29
30
  app.use((0, security_headers_1.securityHeaders)());
30
31
  app.use(express_1.default.json({ limit: '1mb' }));
31
- const logger = (0, pino_1.default)({ level: 'info' });
32
+ // Default to 'warn' to keep CLI clean; opt-in verbose via CM_LOG_LEVEL=info|debug|trace
33
+ const logger = (0, pino_1.default)({ level: process.env.CM_LOG_LEVEL || 'warn' });
32
34
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
33
35
  app.use((0, pino_http_1.default)({ logger: logger }));
34
36
  const publicDir = path_1.default.join(__dirname, '..', 'public', 'dashboard');
@@ -38,7 +40,7 @@ function launchDashboard(port = data_1.DEFAULT_PORT, silent = false) {
38
40
  const data = (0, data_1.loadData)();
39
41
  const enriched = data.projects.map(p => {
40
42
  const pt = data.tasks.filter(t => t.projectId === p.id);
41
- return Object.assign(Object.assign({}, p), { taskCount: pt.length, doneCount: pt.filter(t => t.column === 'done').length, activeAgents: [...new Set(pt.map(t => t.agent).filter(Boolean))] });
43
+ return Object.assign(Object.assign({}, p), { taskCount: pt.length, doneCount: pt.filter(t => t.column === 'done').length, activeAgents: (0, dashboard_project_summary_1.getProjectActiveAgents)(p, pt) });
42
44
  });
43
45
  res.json(enriched);
44
46
  });
@@ -939,7 +941,11 @@ function launchDashboard(port = data_1.DEFAULT_PORT, silent = false) {
939
941
  res.status(404).json({ error: 'not found' });
940
942
  });
941
943
  app.get('/{*path}', (_req, res) => {
942
- res.sendFile(path_1.default.join(publicDir, 'index.html'));
944
+ res.sendFile(path_1.default.join(publicDir, 'index.html'), (err) => {
945
+ if (err && !res.headersSent) {
946
+ res.status(500).send('Internal Server Error');
947
+ }
948
+ });
943
949
  });
944
950
  // ─── Start Server ─────────────────────────────────────────────────────
945
951
  const server = app.listen(port, '127.0.0.1', () => {
@@ -948,13 +954,13 @@ function launchDashboard(port = data_1.DEFAULT_PORT, silent = false) {
948
954
  }
949
955
  catch (_a) { }
950
956
  if (!silent) {
951
- console.log(chalk_1.default.cyan(`\n🚀 Mission Control at http://codymaster.localhost:${port}`));
957
+ console.log(chalk_1.default.cyan(`\n🚀 Mission Control at http://localhost:${port}`));
952
958
  console.log(chalk_1.default.gray(` Data: ${data_1.DATA_FILE}`));
953
959
  console.log(chalk_1.default.gray(` Press Ctrl+C to stop.\n`));
954
960
  }
955
961
  else {
956
962
  // Silent auto-start: just a subtle hint
957
- console.log(chalk_1.default.gray(` 📊 Dashboard auto-started → http://codymaster.localhost:${port}`));
963
+ console.log(chalk_1.default.gray(` 📊 Dashboard auto-started → http://localhost:${port}`));
958
964
  }
959
965
  });
960
966
  (0, ws_hub_1.initWsHub)(server);
@@ -10,6 +10,7 @@ const path_1 = __importDefault(require("path"));
10
10
  const context_bus_1 = require("./context-bus");
11
11
  const storage_backend_1 = require("./storage-backend");
12
12
  const retro_summary_1 = require("./retro-summary");
13
+ const skill_execution_cache_1 = require("./skill-execution-cache");
13
14
  function bucketLatency(latencyMs) {
14
15
  if (latencyMs === undefined || latencyMs < 0)
15
16
  return undefined;
@@ -106,9 +107,11 @@ class ExecutionAnalyzer {
106
107
  this.projectPath = projectPath;
107
108
  this.backend = backend !== null && backend !== void 0 ? backend : (0, storage_backend_1.getBackend)(projectPath);
108
109
  this.backend.initialize();
110
+ this.cache = new skill_execution_cache_1.SkillExecutionCache(projectPath);
111
+ this.cache.initialize();
109
112
  }
110
113
  analyzeExecution(input) {
111
- var _a, _b, _c;
114
+ var _a, _b, _c, _d, _e, _f, _g;
112
115
  const judgments = normalizeJudgments(input);
113
116
  const bus = (0, context_bus_1.readBus)(this.projectPath);
114
117
  const retroSummary = buildRetroSummary(this.projectPath);
@@ -132,6 +135,11 @@ class ExecutionAnalyzer {
132
135
  created_at: new Date().toISOString(),
133
136
  };
134
137
  this.backend.recordExecutionAnalysis(analysis);
138
+ if (input.taskStatus === 'completed' && ((_e = (_d = input.selectedSkills) === null || _d === void 0 ? void 0 : _d.length) !== null && _e !== void 0 ? _e : 0) > 0) {
139
+ const effectiveSkills = (_f = input.selectedSkills) !== null && _f !== void 0 ? _f : [];
140
+ const effectiveness = effectiveSkills.length > 0 ? 0.9 : 0;
141
+ this.cache.cacheExecution(input.taskTitle, effectiveSkills, effectiveness, (_g = input.tokenEstimate) !== null && _g !== void 0 ? _g : 0);
142
+ }
135
143
  return analysis;
136
144
  }
137
145
  }