codymaster 4.8.0 → 7.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (416) hide show
  1. package/CHANGELOG.md +331 -7
  2. package/README.md +226 -296
  3. package/dist/advisory-handoff.js +89 -0
  4. package/dist/advisory-report.js +105 -0
  5. package/dist/agent/antigravity.js +152 -0
  6. package/dist/agent/backend.js +2 -0
  7. package/dist/agent/claude.js +196 -0
  8. package/dist/agent/codex.js +204 -0
  9. package/dist/agent/copilot.js +284 -0
  10. package/dist/agent/cursor.js +211 -0
  11. package/dist/agent/factory.js +30 -0
  12. package/dist/agent/gemini.js +142 -0
  13. package/dist/agent/opencode.js +205 -0
  14. package/dist/agent/spawn-helper.js +237 -0
  15. package/dist/agent/version.js +25 -0
  16. package/dist/browse/adapter-factory.js +69 -0
  17. package/dist/browse/adapters/agent-browser-adapter.js +305 -0
  18. package/dist/browse/adapters/playwright-adapter.js +309 -0
  19. package/dist/browse/adapters/types.js +6 -0
  20. package/dist/browse/error-collector.js +132 -0
  21. package/dist/browse/event-log.js +109 -0
  22. package/dist/browse/index.js +17 -0
  23. package/dist/browse-server.js +204 -120
  24. package/dist/cli/command-registry.js +20 -0
  25. package/dist/cli/commands/bench.js +69 -0
  26. package/dist/cli/commands/brain.js +108 -0
  27. package/dist/cli/commands/dashboard.js +76 -2
  28. package/dist/cli/commands/engineering.js +326 -4
  29. package/dist/cli/commands/evolve.js +123 -0
  30. package/dist/cli/commands/install.js +160 -0
  31. package/dist/cli/commands/learn.js +181 -0
  32. package/dist/cli/commands/mcp-serve.js +104 -0
  33. package/dist/cli/commands/parallel.js +138 -0
  34. package/dist/cli/commands/quality.js +105 -0
  35. package/dist/cli/commands/stack.js +49 -0
  36. package/dist/cli/commands/update.js +159 -0
  37. package/dist/cli/update-check.js +94 -10
  38. package/dist/cm-config.js +0 -18
  39. package/dist/codybench/judges/automated.js +31 -0
  40. package/dist/codybench/runners/claude-code.js +32 -0
  41. package/dist/codybench/suites/memory-retention.js +85 -0
  42. package/dist/codybench/suites/tdd-regression.js +35 -0
  43. package/dist/codybench/suites/token-efficiency.js +55 -0
  44. package/dist/codybench/types.js +2 -0
  45. package/dist/context-db.js +157 -0
  46. package/dist/continuity.js +5 -7
  47. package/dist/dashboard.js +47 -6
  48. package/dist/data.js +35 -0
  49. package/dist/execution/tdd-gate.js +113 -0
  50. package/dist/execution-analyzer.js +138 -0
  51. package/dist/executor/cancel.js +34 -0
  52. package/dist/executor/gc.js +74 -0
  53. package/dist/executor/index.js +14 -0
  54. package/dist/executor/runner.js +70 -0
  55. package/dist/executor/workdir.js +31 -0
  56. package/dist/handoff/contracts.js +22 -0
  57. package/dist/handoff/index.js +18 -0
  58. package/dist/handoff/io.js +121 -0
  59. package/dist/index.js +7 -3
  60. package/dist/indexer/skills-lib.js +533 -0
  61. package/dist/indexer/skills-map.js +1374 -0
  62. package/dist/indexer/skills.js +16 -0
  63. package/dist/indexer/stack-detect.js +219 -0
  64. package/dist/install/copy.js +98 -0
  65. package/dist/install/engine.js +42 -0
  66. package/dist/install/paths.js +70 -0
  67. package/dist/install/platforms/_simple.js +85 -0
  68. package/dist/install/platforms/antigravity.js +91 -0
  69. package/dist/install/platforms/claude-code.js +107 -0
  70. package/dist/install/platforms/cursor.js +77 -0
  71. package/dist/install/platforms/index.js +27 -0
  72. package/dist/install/platforms/simple.js +163 -0
  73. package/dist/install/profiles.js +75 -0
  74. package/dist/install/types.js +2 -0
  75. package/dist/learning-promoter.js +246 -0
  76. package/dist/learnings.js +208 -0
  77. package/dist/mcp-context-server.js +230 -1
  78. package/dist/middleware/metrics.js +30 -0
  79. package/dist/middleware/security-headers.js +14 -0
  80. package/dist/realtime/event-bus.js +29 -0
  81. package/dist/realtime/ws-hub.js +91 -0
  82. package/dist/schemas/task-schema.js +48 -0
  83. package/dist/schemas/validate.js +18 -0
  84. package/dist/skill-chain.js +63 -1
  85. package/dist/skill-evolver.js +456 -0
  86. package/dist/skill-execution-cache.js +254 -0
  87. package/dist/skills-lock.js +96 -0
  88. package/dist/smart-brain-router.js +184 -0
  89. package/dist/sprint-pipeline.js +26 -0
  90. package/dist/storage/index.js +21 -0
  91. package/dist/storage/repos/activity-repo.js +46 -0
  92. package/dist/storage/repos/message-repo.js +39 -0
  93. package/dist/storage/repos/project-repo.js +56 -0
  94. package/dist/storage/repos/task-repo.js +142 -0
  95. package/dist/storage/services/project-service.js +49 -0
  96. package/dist/storage/services/task-service.js +97 -0
  97. package/dist/storage/sqlite.js +113 -0
  98. package/dist/storage-backend.js +10 -8
  99. package/dist/tier-classify.js +131 -0
  100. package/dist/token-budget.js +88 -0
  101. package/dist/ui/onboarding.js +51 -15
  102. package/dist/utils/cli-utils.js +7 -2
  103. package/dist/utils/design-taste.js +108 -0
  104. package/dist/utils/output-compress.js +143 -0
  105. package/dist/vibecoding-index.js +126 -0
  106. package/package.json +20 -6
  107. package/public/dashboard/app.js +52 -1
  108. package/scripts/build-skills-lock.mjs +88 -0
  109. package/scripts/build-skills.mjs +187 -28
  110. package/scripts/compress-skill.mjs +73 -0
  111. package/scripts/deprecate-skill.mjs +72 -0
  112. package/scripts/install.sh +170 -0
  113. package/scripts/mcp-bridge.js +2 -2
  114. package/scripts/postinstall.js +53 -335
  115. package/scripts/update-changelog.sh +88 -0
  116. package/scripts/validate-skills.mjs +101 -4
  117. package/skills/CLAUDE.md +0 -5
  118. package/skills/_shared/SKILL_TEMPLATE.md +62 -0
  119. package/skills/_shared/helpers.md +2 -8
  120. package/skills/cm-autopilot/scripts/autopilot.py +19 -2
  121. package/skills/cm-brainstorm-idea/SKILL.md +9 -0
  122. package/skills/cm-browse/SKILL.md +6 -0
  123. package/skills/cm-clean-code/SKILL.md +20 -0
  124. package/skills/cm-code-review/SKILL.md +21 -0
  125. package/skills/cm-codeintell/SKILL.md +9 -0
  126. package/skills/cm-conductor-worktrees/SKILL.archive.md +28 -0
  127. package/skills/cm-conductor-worktrees/SKILL.md +20 -18
  128. package/skills/cm-continuity/SKILL.md +41 -33
  129. package/skills/cm-dashboard/SKILL.archive.md +15 -0
  130. package/skills/cm-dashboard/SKILL.md +20 -9
  131. package/skills/cm-dashboard/ui/app.js +9 -1
  132. package/skills/cm-debugging/SKILL.md +9 -0
  133. package/skills/cm-design-studio/SKILL.archive.md +34 -0
  134. package/skills/cm-design-studio/SKILL.md +20 -24
  135. package/skills/cm-design-system/SKILL.md +1 -0
  136. package/skills/cm-ecosystem-roadmap/SKILL.md +4 -0
  137. package/skills/cm-engineering-meta/SKILL.archive.md +73 -0
  138. package/skills/cm-engineering-meta/SKILL.md +19 -62
  139. package/skills/cm-execution/SKILL.md +98 -0
  140. package/skills/cm-git-worktrees/SKILL.archive.md +157 -0
  141. package/skills/cm-git-worktrees/SKILL.md +15 -146
  142. package/skills/cm-guardian-runtime/SKILL.md +5 -1
  143. package/skills/cm-identity-guard/SKILL.md +8 -0
  144. package/skills/cm-mcp-engineering/SKILL.md +4 -0
  145. package/skills/cm-planning/SKILL.md +63 -92
  146. package/skills/cm-post-deploy-canary/SKILL.archive.md +22 -0
  147. package/skills/cm-post-deploy-canary/SKILL.md +20 -12
  148. package/skills/cm-project-bootstrap/SKILL.md +11 -0
  149. package/skills/cm-qa-visual-cli/SKILL.archive.md +22 -0
  150. package/skills/cm-qa-visual-cli/SKILL.md +19 -11
  151. package/skills/cm-quality-gate/SKILL.md +38 -0
  152. package/skills/cm-retro-cli/SKILL.md +4 -0
  153. package/skills/cm-safe-deploy/SKILL.md +9 -0
  154. package/skills/cm-second-opinion-cli/SKILL.archive.md +23 -0
  155. package/skills/cm-second-opinion-cli/SKILL.md +20 -13
  156. package/skills/cm-secret-shield/SKILL.archive.md +580 -0
  157. package/skills/cm-secret-shield/SKILL.md +15 -569
  158. package/skills/cm-security-gate/SKILL.archive.md +239 -0
  159. package/skills/cm-security-gate/SKILL.md +16 -228
  160. package/skills/cm-skill-chain/SKILL.md +25 -4
  161. package/skills/cm-skill-evolution/SKILL.md +83 -0
  162. package/skills/cm-skill-health/SKILL.archive.md +83 -0
  163. package/skills/cm-skill-health/SKILL.md +26 -0
  164. package/skills/cm-skill-index/SKILL.md +19 -3
  165. package/skills/cm-skill-mastery/SKILL.archive.md +156 -0
  166. package/skills/cm-skill-mastery/SKILL.md +16 -146
  167. package/skills/cm-skill-search/SKILL.archive.md +49 -0
  168. package/skills/cm-skill-search/SKILL.md +26 -0
  169. package/skills/cm-skill-share/SKILL.archive.md +58 -0
  170. package/skills/cm-skill-share/SKILL.md +26 -0
  171. package/skills/cm-sprint-bus/SKILL.md +13 -0
  172. package/skills/cm-start/SKILL.md +17 -10
  173. package/skills/cm-tdd/SKILL.md +21 -2
  174. package/skills/cm-terminal/SKILL.md +15 -0
  175. package/skills/cm-test-gate/SKILL.archive.md +245 -0
  176. package/skills/cm-test-gate/SKILL.md +15 -234
  177. package/skills/cm-ui-preview/SKILL.archive.md +153 -0
  178. package/skills/cm-ui-preview/SKILL.md +16 -143
  179. package/skills/cm-ux-master/cli/uxmaster/commands/mcp.py +1 -1
  180. package/skills/cm-ux-master/mcp/mcp-config.json +1 -1
  181. package/skills/cm-ux-master/mcp/server.py +2 -2
  182. package/skills/profiles/design.txt +1 -1
  183. package/skills/profiles/full.txt +4 -10
  184. package/skills/profiles/growth.txt +8 -8
  185. package/skills/profiles/knowledge.txt +1 -1
  186. package/skills/profiles/top35.json +41 -0
  187. package/adapters/antigravity.js +0 -15
  188. package/adapters/claude-code.js +0 -17
  189. package/adapters/cursor.js +0 -16
  190. package/install.sh +0 -1125
  191. package/scripts/viking-demo.ts +0 -105
  192. package/skills/cm-ads-tracker/SKILL.md +0 -401
  193. package/skills/cm-ads-tracker/evals/evals.json +0 -55
  194. package/skills/cm-ads-tracker/references/gtm-architecture.md +0 -321
  195. package/skills/cm-ads-tracker/references/industry-events.md +0 -294
  196. package/skills/cm-ads-tracker/references/platforms-api.md +0 -238
  197. package/skills/cm-ads-tracker/templates/capi-payload.md +0 -79
  198. package/skills/cm-ads-tracker/templates/datalayer-push.js +0 -104
  199. package/skills/cm-ads-tracker/templates/gtm-variables.js +0 -56
  200. package/skills/cm-auto-publisher/SKILL.md +0 -81
  201. package/skills/cm-booking-calendar/SKILL.md +0 -521
  202. package/skills/cm-booking-calendar/references/industry-patterns.md +0 -527
  203. package/skills/cm-booking-calendar/templates/booking-form.css +0 -626
  204. package/skills/cm-booking-calendar/templates/booking-form.html +0 -477
  205. package/skills/cm-booking-calendar/templates/calendar-engine.js +0 -419
  206. package/skills/cm-booking-calendar/templates/calendar-export.js +0 -395
  207. package/skills/cm-booking-calendar/templates/reminder-config.js +0 -629
  208. package/skills/cm-content-factory/.content-factory-state.json +0 -132
  209. package/skills/cm-content-factory/.git 2/logs/refs/heads/main +0 -1
  210. package/skills/cm-content-factory/.git 2/logs/refs/remotes/origin/main +0 -1
  211. package/skills/cm-content-factory/.git 2/objects/02/fb0956734b5f8ba3f918b7defd04a89cfe0076 +0 -0
  212. package/skills/cm-content-factory/.git 2/objects/08/1e129d75dc6feac6c02037272e6bd1a04e3324 +0 -0
  213. package/skills/cm-content-factory/.git 2/objects/0c/5393416f3c5e01c9a655a802bff0dd52f76f0a +0 -0
  214. package/skills/cm-content-factory/.git 2/objects/10/0b9be46978a946a77188f68be725098a122001 +0 -0
  215. package/skills/cm-content-factory/.git 2/objects/10/cf041167fc9843610eb3d90259ef3396315fdc +0 -0
  216. package/skills/cm-content-factory/.git 2/objects/12/5e19538dd6e1338ffe74f6c4c165b00435bf48 +0 -0
  217. package/skills/cm-content-factory/.git 2/objects/16/a9b9d0088d5c1347628b45a2620b479d8ad57c +0 -0
  218. package/skills/cm-content-factory/.git 2/objects/17/8c2a9ef93c33ae4eec9d58e82321f9229843a1 +0 -0
  219. package/skills/cm-content-factory/.git 2/objects/25/397ae41d09104d763bdcac2695209d85cdea89 +0 -0
  220. package/skills/cm-content-factory/.git 2/objects/2f/a836b7947f2d458e1f639788bf4bb0983a3305 +0 -0
  221. package/skills/cm-content-factory/.git 2/objects/3a/baaaf0a1c0909c0828335791557125fba911e0 +0 -0
  222. package/skills/cm-content-factory/.git 2/objects/42/2924221b81f5ce3c4e4daac9a64a24f9b01f9a +0 -0
  223. package/skills/cm-content-factory/.git 2/objects/42/ec0ce707447dc11446a34c9995fb8533801731 +0 -0
  224. package/skills/cm-content-factory/.git 2/objects/46/e43ce92866d56ce74b1d750db307cfe6154a15 +0 -0
  225. package/skills/cm-content-factory/.git 2/objects/48/5e41b633c63f55b8277bcc59f44f67681f671a +0 -0
  226. package/skills/cm-content-factory/.git 2/objects/49/49c596a3a89fa240642acd95dd3258e261eb09 +0 -0
  227. package/skills/cm-content-factory/.git 2/objects/50/9d42d8412ef8eaf7f7e138476bac2e4d10ce60 +0 -0
  228. package/skills/cm-content-factory/.git 2/objects/55/0c8c389d981b463ef849aeb792d8be3ccb6ec8 +0 -0
  229. package/skills/cm-content-factory/.git 2/objects/5d/82d3b18410cdda3ace3677436f0cb599dbe2d2 +0 -0
  230. package/skills/cm-content-factory/.git 2/objects/60/0617c58e871a38b33bf29e282d132bb3c381ad +0 -0
  231. package/skills/cm-content-factory/.git 2/objects/6a/8369a99c687b7245c92ffaf0e0f0dab9014504 +0 -0
  232. package/skills/cm-content-factory/.git 2/objects/79/bea435d40ab531c1aaf6be0432c6a5b7aaed21 +0 -0
  233. package/skills/cm-content-factory/.git 2/objects/7e/5ebd79251c2f14e4aceb86c74b6b6daae6b500 +0 -0
  234. package/skills/cm-content-factory/.git 2/objects/81/98a822a60178d6d5023ddb3e222cddf048742e +0 -0
  235. package/skills/cm-content-factory/.git 2/objects/86/0a0e1943dfe53411d2e499a1f16f46a96ef758 +0 -0
  236. package/skills/cm-content-factory/.git 2/objects/86/971fb55fdc081fdbae52376f0f13e57a4e9b04 +0 -0
  237. package/skills/cm-content-factory/.git 2/objects/88/b89dd609a0a03f8d4fe8bfde20d5b8fc1d326d +0 -0
  238. package/skills/cm-content-factory/.git 2/objects/90/8737edb6b7809e32cc01590b4e08ba42a9d40d +0 -0
  239. package/skills/cm-content-factory/.git 2/objects/93/d5a8a9a7d4fb7f11491cb596a6880528725118 +0 -0
  240. package/skills/cm-content-factory/.git 2/objects/98/46a2ab81d0c3b3eb00ef88fc56989aa7e9f316 +0 -0
  241. package/skills/cm-content-factory/.git 2/objects/9b/d8dd1e49cf274eaf9c555f3ab39dce7af5715e +0 -0
  242. package/skills/cm-content-factory/.git 2/objects/a1/13329fb0cec96ae78b222d33a24c3b5bc7fa1f +0 -0
  243. package/skills/cm-content-factory/.git 2/objects/a9/e6effe626e8a3aea3a8fc3364b492191c6e7d0 +0 -0
  244. package/skills/cm-content-factory/.git 2/objects/ad/6de7e48d9782cca9353d1ff0aa1aab7fe1df85 +0 -0
  245. package/skills/cm-content-factory/.git 2/objects/af/54ae316f771ff692e299ffcd8bf2f06b413b59 +0 -0
  246. package/skills/cm-content-factory/.git 2/objects/b0/4cb8b0b00dad633e731c1472161419e738d674 +0 -0
  247. package/skills/cm-content-factory/.git 2/objects/b3/094abb0b9ed46419b269e4a4e36a459690e3b0 +0 -0
  248. package/skills/cm-content-factory/.git 2/objects/b9/435c5d4baac2cfc5c83009ddd27b46b60db5f1 +0 -0
  249. package/skills/cm-content-factory/.git 2/objects/ba/5da17dbaec5ec2dcfdfd126aead518d1171d5c +0 -0
  250. package/skills/cm-content-factory/.git 2/objects/c0/bf58703aa258ba5dd63083bebaec8f223d844c +0 -0
  251. package/skills/cm-content-factory/.git 2/objects/c4/701a34edf1fc1bad58ccc57bd03f9426acb59a +0 -0
  252. package/skills/cm-content-factory/.git 2/objects/c7/5ccce9a4e5cc74d9b3174550cf6d993ca43638 +0 -0
  253. package/skills/cm-content-factory/.git 2/objects/c7/710d59b5a35b0f1f0a0399386643a0bd94c929 +0 -0
  254. package/skills/cm-content-factory/.git 2/objects/d1/fe58237112e953e5fec52da22cf38e08be3df9 +0 -5
  255. package/skills/cm-content-factory/.git 2/objects/d2/2bbe9fd2f74c95bc5583e803f5e435f1e2cd86 +0 -0
  256. package/skills/cm-content-factory/.git 2/objects/d7/e72852ea2bff74581dbf247d400120086229f4 +0 -0
  257. package/skills/cm-content-factory/.git 2/objects/d8/d4c3b5553e4fd72807e1d4b49ef07d9ef3ac35 +0 -0
  258. package/skills/cm-content-factory/.git 2/objects/dc/75050c2876f6a02ae2a53a3c886f395b622977 +0 -0
  259. package/skills/cm-content-factory/.git 2/objects/ee/e8546f95acec500187c08a28a8b9ee02db0dec +0 -0
  260. package/skills/cm-content-factory/.git 2/objects/ef/263c059208b416c2146434f10cb2b9fabcba16 +0 -0
  261. package/skills/cm-content-factory/.git 2/objects/f3/ae597e84d9a59b88acd21c99bde2eaf686d785 +0 -0
  262. package/skills/cm-content-factory/.git 2/objects/f3/f6f5673c821d3d8e76fa267a9e882e7a5387ea +0 -0
  263. package/skills/cm-content-factory/.git 2/objects/f9/6e6d0ad02624dd11d5848594d056caef7a5e8b +0 -0
  264. package/skills/cm-content-factory/.git 2/objects/ff/278988fc1edf0db3abcf18de795f4cc0b4f3e1 +0 -0
  265. package/skills/cm-content-factory/.git 2/refs/heads/main +0 -1
  266. package/skills/cm-content-factory/.git 2/refs/remotes/origin/main +0 -1
  267. package/skills/cm-content-factory/.pytest_cache 2/v/cache/nodeids +0 -76
  268. package/skills/cm-content-factory/.pytest_cache 2/v/cache/stepwise +0 -1
  269. package/skills/cm-content-factory/AGENTS.md +0 -61
  270. package/skills/cm-content-factory/CLAUDE.md +0 -63
  271. package/skills/cm-content-factory/CURSOR.md +0 -43
  272. package/skills/cm-content-factory/Content Factory.zip +0 -0
  273. package/skills/cm-content-factory/SKILL.md +0 -416
  274. package/skills/cm-content-factory/cf +0 -313
  275. package/skills/cm-content-factory/config.schema.json +0 -397
  276. package/skills/cm-content-factory/dashboard/app.js +0 -556
  277. package/skills/cm-content-factory/dashboard/index.html +0 -397
  278. package/skills/cm-content-factory/dashboard/style.css +0 -1211
  279. package/skills/cm-content-factory/examples/01-real-estate.config.json +0 -146
  280. package/skills/cm-content-factory/examples/02-personal-finance.config.json +0 -146
  281. package/skills/cm-content-factory/examples/03-health-wellness.config.json +0 -147
  282. package/skills/cm-content-factory/examples/04-saas-software.config.json +0 -147
  283. package/skills/cm-content-factory/examples/05-legal-services.config.json +0 -147
  284. package/skills/cm-content-factory/examples/06-insurance.config.json +0 -146
  285. package/skills/cm-content-factory/examples/07-ecommerce-dropship.config.json +0 -146
  286. package/skills/cm-content-factory/examples/08-online-education.config.json +0 -147
  287. package/skills/cm-content-factory/examples/09-crypto-defi.config.json +0 -147
  288. package/skills/cm-content-factory/examples/10-beauty-skincare.config.json +0 -147
  289. package/skills/cm-content-factory/examples/11-home-services.config.json +0 -146
  290. package/skills/cm-content-factory/examples/12-dental-clinic.config.json +0 -147
  291. package/skills/cm-content-factory/examples/13-pet-care.config.json +0 -147
  292. package/skills/cm-content-factory/examples/14-travel-hospitality.config.json +0 -147
  293. package/skills/cm-content-factory/examples/15-ai-automation.config.json +0 -147
  294. package/skills/cm-content-factory/examples/16-wedding-events.config.json +0 -147
  295. package/skills/cm-content-factory/examples/17-fitness-coaching.config.json +0 -148
  296. package/skills/cm-content-factory/examples/18-cybersecurity.config.json +0 -147
  297. package/skills/cm-content-factory/examples/19-food-restaurant.config.json +0 -148
  298. package/skills/cm-content-factory/examples/20-solar-energy.config.json +0 -147
  299. package/skills/cm-content-factory/examples/fitness-blog.config.json +0 -116
  300. package/skills/cm-content-factory/examples/tech-blog.config.json +0 -107
  301. package/skills/cm-content-factory/extensions/EXTENSION_GUIDE.md +0 -72
  302. package/skills/cm-content-factory/extensions/hooks.py +0 -126
  303. package/skills/cm-content-factory/extensions/openclaw_adapter.py +0 -132
  304. package/skills/cm-content-factory/landing/docs/content/changelog.md +0 -36
  305. package/skills/cm-content-factory/landing/docs/content/deployment.md +0 -46
  306. package/skills/cm-content-factory/landing/docs/content/execution-flow.md +0 -67
  307. package/skills/cm-content-factory/landing/docs/content/openspace.md +0 -27
  308. package/skills/cm-content-factory/landing/docs/content/openviking.md +0 -33
  309. package/skills/cm-content-factory/landing/docs/content/use-cases.md +0 -26
  310. package/skills/cm-content-factory/landing/docs/content/v5-intro.md +0 -28
  311. package/skills/cm-content-factory/landing/docs/index.html +0 -240
  312. package/skills/cm-content-factory/landing/index.html +0 -680
  313. package/skills/cm-content-factory/landing/script.js +0 -143
  314. package/skills/cm-content-factory/landing/style.css +0 -1216
  315. package/skills/cm-content-factory/landing/translations.js +0 -508
  316. package/skills/cm-content-factory/logs/events.jsonl +0 -11
  317. package/skills/cm-content-factory/profiles/_template.profile.json +0 -231
  318. package/skills/cm-content-factory/profiles/finance.profile.json +0 -278
  319. package/skills/cm-content-factory/profiles/legal.profile.json +0 -263
  320. package/skills/cm-content-factory/profiles/medical-research.profile.json +0 -321
  321. package/skills/cm-content-factory/profiles/technology.profile.json +0 -275
  322. package/skills/cm-content-factory/scripts/agent_dispatcher.py +0 -266
  323. package/skills/cm-content-factory/scripts/audit.py +0 -106
  324. package/skills/cm-content-factory/scripts/dashboard_server.py +0 -225
  325. package/skills/cm-content-factory/scripts/deploy.py +0 -146
  326. package/skills/cm-content-factory/scripts/extract.py +0 -132
  327. package/skills/cm-content-factory/scripts/landing_generator.py +0 -459
  328. package/skills/cm-content-factory/scripts/memory.py +0 -521
  329. package/skills/cm-content-factory/scripts/monetize.py +0 -239
  330. package/skills/cm-content-factory/scripts/pipeline.py +0 -357
  331. package/skills/cm-content-factory/scripts/plan.py +0 -163
  332. package/skills/cm-content-factory/scripts/publish.py +0 -145
  333. package/skills/cm-content-factory/scripts/research.py +0 -337
  334. package/skills/cm-content-factory/scripts/scaffold.py +0 -464
  335. package/skills/cm-content-factory/scripts/scoreboard.py +0 -336
  336. package/skills/cm-content-factory/scripts/seo.py +0 -90
  337. package/skills/cm-content-factory/scripts/state_manager.py +0 -320
  338. package/skills/cm-content-factory/scripts/token_manager.py +0 -268
  339. package/skills/cm-content-factory/scripts/validate.py +0 -221
  340. package/skills/cm-content-factory/scripts/wizard.py +0 -329
  341. package/skills/cm-content-factory/scripts/write.py +0 -93
  342. package/skills/cm-content-factory/sites/docs-site/src/assets/houston.webp +0 -0
  343. package/skills/cm-content-factory/sites/docs-site/src/content/docs/architecture.md +0 -90
  344. package/skills/cm-content-factory/sites/docs-site/src/content/docs/data-flow.md +0 -54
  345. package/skills/cm-content-factory/sites/docs-site/src/content/docs/deployment.md +0 -38
  346. package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/index.md +0 -65
  347. package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/lc-content-lifecycle.md +0 -48
  348. package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/seq-write-mode.md +0 -39
  349. package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/uj-first-batch.md +0 -42
  350. package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/wf-content-pipeline.md +0 -51
  351. package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/wf-learning-cycle.md +0 -52
  352. package/skills/cm-content-factory/sites/docs-site/src/content/docs/getting-started/configuration.md +0 -86
  353. package/skills/cm-content-factory/sites/docs-site/src/content/docs/getting-started/installation.md +0 -80
  354. package/skills/cm-content-factory/sites/docs-site/src/content/docs/getting-started/intro.md +0 -58
  355. package/skills/cm-content-factory/sites/docs-site/src/content/docs/index.md +0 -102
  356. package/skills/cm-content-factory/sites/docs-site/src/content/docs/jtbd/index.md +0 -45
  357. package/skills/cm-content-factory/sites/docs-site/src/content/docs/jtbd/optimize-seo.md +0 -29
  358. package/skills/cm-content-factory/sites/docs-site/src/content/docs/jtbd/scale-content-production.md +0 -55
  359. package/skills/cm-content-factory/sites/docs-site/src/content/docs/jtbd/standardize-quality.md +0 -29
  360. package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/buyer-cmo-huong.md +0 -41
  361. package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/buyer-content-lead-khoa.md +0 -40
  362. package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/index.md +0 -56
  363. package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/user-content-manager-lan.md +0 -46
  364. package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/user-seo-minh.md +0 -45
  365. package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/user-writer-tu.md +0 -45
  366. package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/content-pipeline.md +0 -108
  367. package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/index.md +0 -22
  368. package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/memory-system.md +0 -52
  369. package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/seo-optimization.md +0 -58
  370. package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/troubleshooting-guide.md +0 -92
  371. package/skills/cm-content-factory/sites/docs-site/src/styles/custom.css +0 -575
  372. package/skills/cm-content-factory/tests/conftest.py +0 -66
  373. package/skills/cm-content-factory/tests/test_agent_dispatcher.py +0 -125
  374. package/skills/cm-content-factory/tests/test_memory.py +0 -128
  375. package/skills/cm-content-factory/tests/test_pipeline.py +0 -107
  376. package/skills/cm-content-factory/tests/test_research.py +0 -56
  377. package/skills/cm-content-factory/tests/test_state_manager.py +0 -131
  378. package/skills/cm-content-factory/tests/test_token_manager.py +0 -110
  379. package/skills/cm-content-factory/tests/test_wizard.py +0 -121
  380. package/skills/cm-cro-methodology/SKILL.md +0 -290
  381. package/skills/cm-cro-methodology/references/COPYWRITING.md +0 -178
  382. package/skills/cm-cro-methodology/references/OBJECTIONS.md +0 -135
  383. package/skills/cm-cro-methodology/references/PERSUASION.md +0 -158
  384. package/skills/cm-cro-methodology/references/RESEARCH.md +0 -220
  385. package/skills/cm-cro-methodology/references/funnel-analysis.md +0 -365
  386. package/skills/cm-cro-methodology/references/testing-methodology.md +0 -330
  387. package/skills/cm-google-form/SKILL.md +0 -266
  388. package/skills/cm-google-form/templates/apps-script.js +0 -55
  389. package/skills/cm-google-form/templates/form-markup.html +0 -110
  390. package/skills/cm-google-form/templates/form-submit.js +0 -201
  391. package/skills/cm-google-form/templates/toast.css +0 -152
  392. package/skills/cm-growth-hacking/SKILL.md +0 -282
  393. package/skills/cm-growth-hacking/bottom-sheet-engine.md +0 -261
  394. package/skills/cm-growth-hacking/calendar-integration.md +0 -264
  395. package/skills/cm-growth-hacking/references/engagement-patterns.md +0 -346
  396. package/skills/cm-growth-hacking/templates/bottom-sheet.css +0 -528
  397. package/skills/cm-growth-hacking/templates/bottom-sheet.js +0 -269
  398. package/skills/cm-growth-hacking/templates/calendar-cta.js +0 -213
  399. package/skills/cm-growth-hacking/templates/tracking-events.js +0 -211
  400. package/skills/cm-growth-hacking/templates/trigger-manager.js +0 -254
  401. package/skills/cm-growth-hacking/tracking-events.md +0 -246
  402. package/skills/cm-growth-hacking/trigger-system.md +0 -342
  403. package/skills/cm-jtbd/SKILL.md +0 -98
  404. package/skills/cm-notebooklm/SKILL.md +0 -156
  405. package/skills/cm-notebooklm/references/command_reference.md +0 -94
  406. package/skills/cm-notebooklm/references/workflows.md +0 -60
  407. package/skills/cm-notebooklm/resources/knowledge_sources.md +0 -106
  408. package/skills/cm-notebooklm/scripts/brain-sync.sh +0 -453
  409. package/skills/cm-notebooklm/scripts/graduate_wisdom.py +0 -101
  410. package/skills/cm-readit/SKILL.md +0 -289
  411. package/skills/cm-readit/audio-player.md +0 -206
  412. package/skills/cm-readit/examples/blog-reader.js +0 -352
  413. package/skills/cm-readit/examples/voice-cro.js +0 -390
  414. package/skills/cm-readit/tts-engine.md +0 -262
  415. package/skills/cm-readit/ui-patterns.md +0 -362
  416. package/skills/cm-readit/voice-cro.md +0 -223
@@ -14,7 +14,7 @@ function registerDashboardCommands(program) {
14
14
  program
15
15
  .command('dashboard [cmd]')
16
16
  .alias('dash')
17
- .description('Dashboard server (start|stop|status|open)')
17
+ .description('Dashboard server (start|stop|status|open|tail)')
18
18
  .option('-p, --port <port>', 'Port number', String(data_1.DEFAULT_PORT))
19
19
  .action((cmd, opts) => {
20
20
  const port = parseInt(opts.port) || data_1.DEFAULT_PORT;
@@ -40,10 +40,84 @@ function registerDashboardCommands(program) {
40
40
  case 'url':
41
41
  console.log(`http://localhost:${port}`);
42
42
  break;
43
- default: console.log((0, box_1.renderResult)('error', `Unknown: ${cmd}`, [(0, theme_1.dim)('Available: start, stop, status, open, url')]));
43
+ case 'tail':
44
+ tailDashboard(port);
45
+ break;
46
+ default: console.log((0, box_1.renderResult)('error', `Unknown: ${cmd}`, [(0, theme_1.dim)('Available: start, stop, status, open, url, tail')]));
44
47
  }
45
48
  });
46
49
  }
50
+ function tailDashboard(port) {
51
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
52
+ const chalk = require('chalk');
53
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
54
+ const WebSocket = require('ws');
55
+ const url = `ws://127.0.0.1:${port}/ws`;
56
+ console.log((0, theme_1.dim)(`Connecting to ${url} ...`));
57
+ let ws;
58
+ try {
59
+ ws = new WebSocket(url);
60
+ }
61
+ catch (err) {
62
+ console.log((0, box_1.renderResult)('error', `Cannot connect: ${err.message}`, [(0, theme_1.dim)('Is the dashboard running? cm dashboard start')]));
63
+ process.exit(1);
64
+ }
65
+ ws.on('open', () => {
66
+ console.log((0, theme_1.brand)('✓ Connected — listening for all events. Ctrl+C to stop.\n'));
67
+ // Subscribe to all projects (no filter)
68
+ ws.send(JSON.stringify({ action: 'unsubscribe' }));
69
+ });
70
+ ws.on('message', (raw) => {
71
+ var _a, _b;
72
+ try {
73
+ const msg = JSON.parse(raw.toString());
74
+ if (msg.type === 'subscribed' || msg.type === 'unsubscribed')
75
+ return;
76
+ const ts = new Date().toLocaleTimeString();
77
+ const prefix = chalk.gray(`[${ts}]`);
78
+ if (msg.type && msg.type.startsWith('task.')) {
79
+ const typeColor = msg.type === 'task.created' ? chalk.green
80
+ : msg.type === 'task.deleted' ? chalk.red
81
+ : msg.type === 'task.transitioned' ? chalk.yellow
82
+ : chalk.cyan;
83
+ console.log(`${prefix} ${typeColor(msg.type.padEnd(20))} task=${chalk.white(((_a = msg.taskId) === null || _a === void 0 ? void 0 : _a.substring(0, 8)) || '?')} project=${chalk.gray(((_b = msg.projectId) === null || _b === void 0 ? void 0 : _b.substring(0, 8)) || '?')}`);
84
+ if (msg.data) {
85
+ if (msg.data.from && msg.data.to) {
86
+ console.log(`${chalk.gray(' └─')} ${msg.data.from} → ${msg.data.to}`);
87
+ }
88
+ else if (msg.data.title) {
89
+ console.log(`${chalk.gray(' └─')} ${msg.data.title}`);
90
+ }
91
+ }
92
+ }
93
+ else if (msg.type === 'activity.added') {
94
+ const a = msg.activity || {};
95
+ console.log(`${prefix} ${chalk.magenta('activity.added'.padEnd(20))} ${a.type || '?'}: ${chalk.white(a.message || '')}`);
96
+ }
97
+ else if (msg.type === 'agent.heartbeat') {
98
+ console.log(`${prefix} ${chalk.blue('agent.heartbeat'.padEnd(20))} tasks=${(msg.runningTaskIds || []).length}`);
99
+ }
100
+ else {
101
+ console.log(`${prefix} ${chalk.gray(JSON.stringify(msg).substring(0, 120))}`);
102
+ }
103
+ }
104
+ catch (_c) {
105
+ // ignore parse errors
106
+ }
107
+ });
108
+ ws.on('error', (err) => {
109
+ console.log((0, box_1.renderResult)('error', `WebSocket error: ${err.message}`));
110
+ });
111
+ ws.on('close', () => {
112
+ console.log((0, box_1.renderResult)('warning', 'Connection closed.'));
113
+ process.exit(0);
114
+ });
115
+ process.on('SIGINT', () => {
116
+ console.log((0, theme_1.dim)('\nStopped.'));
117
+ ws.close();
118
+ process.exit(0);
119
+ });
120
+ }
47
121
  function isDashboardRunning() {
48
122
  try {
49
123
  if (!fs_1.default.existsSync(data_1.PID_FILE))
@@ -1,4 +1,37 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
2
35
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
36
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
37
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -25,17 +58,21 @@ const second_opinion_providers_1 = require("../../second-opinion-providers");
25
58
  const sprint_pipeline_1 = require("../../sprint-pipeline");
26
59
  const retro_summary_1 = require("../../retro-summary");
27
60
  const cm_suggest_1 = require("../../cm-suggest");
61
+ const storage_backend_1 = require("../../storage-backend");
62
+ const advisory_report_1 = require("../../advisory-report");
63
+ const advisory_handoff_1 = require("../../advisory-handoff");
28
64
  function projectPath(opt) {
29
65
  return path_1.default.resolve(opt || process.cwd());
30
66
  }
31
67
  function registerEngineeringCommands(program) {
32
- const browse = program.command('browse').description('Playwright browse daemon (local QA / screenshots)');
68
+ const browse = program.command('browse').description('Browse daemon (Hybrid Bridge: agent-browser + Playwright)');
33
69
  browse
34
70
  .command('start')
35
71
  .option('-p, --port <n>', 'port (default: .cm/config.yaml browse.port or 17395)')
36
72
  .option('-H, --host <h>', 'bind host (default: config or 127.0.0.1)')
37
73
  .option('--token <t>', 'bearer token (or env CM_BROWSE_TOKEN or config browse.token)')
38
74
  .option('--headed', 'headed browser', false)
75
+ .option('--engine <e>', 'browser engine: auto (default), agent-browser, playwright', 'auto')
39
76
  .action((opts) => __awaiter(this, void 0, void 0, function* () {
40
77
  var _a, _b, _c, _d, _e, _f, _g;
41
78
  const root = process.cwd();
@@ -51,16 +88,168 @@ function registerEngineeringCommands(program) {
51
88
  port,
52
89
  token,
53
90
  headless: !opts.headed,
91
+ engine: opts.engine,
54
92
  });
55
93
  yield daemon.listen();
56
94
  console.log(chalk_1.default.green(`cm-browse listening http://${host}:${port}`));
57
95
  console.log(chalk_1.default.dim(`Authorization: Bearer ${token.slice(0, 8)}…`));
58
- console.log(chalk_1.default.dim('POST /session/start, /navigate, /refs/refresh, /click, /fill, GET /screenshot'));
96
+ console.log(chalk_1.default.dim(`Engine: ${opts.engine}`));
97
+ console.log(chalk_1.default.dim('Endpoints: POST /session/start, /navigate, /refs/refresh, /click, /fill'));
98
+ console.log(chalk_1.default.dim(' GET /screenshot, /console, /network, /errors, /a11y-snapshot, /engine'));
99
+ console.log(chalk_1.default.dim(' POST /record/start, /record/stop'));
59
100
  process.on('SIGINT', () => __awaiter(this, void 0, void 0, function* () {
60
101
  yield daemon.close();
61
102
  process.exit(0);
62
103
  }));
63
104
  }));
105
+ browse
106
+ .command('doctor')
107
+ .description('Check browser engine availability')
108
+ .action(() => __awaiter(this, void 0, void 0, function* () {
109
+ const { checkEngines } = yield Promise.resolve().then(() => __importStar(require('../../browse/adapter-factory')));
110
+ const engines = yield checkEngines();
111
+ console.log(chalk_1.default.bold('Browser engine status:'));
112
+ console.log(` agent-browser: ${engines['agent-browser'] ? chalk_1.default.green('available') : chalk_1.default.red('not found')}`);
113
+ console.log(` playwright: ${engines.playwright ? chalk_1.default.green('available') : chalk_1.default.red('not found')}`);
114
+ if (!engines['agent-browser'] && !engines.playwright) {
115
+ console.log(chalk_1.default.yellow('\nInstall one:'));
116
+ console.log(' npm i -g agent-browser && agent-browser install');
117
+ console.log(' npx playwright install chromium');
118
+ }
119
+ else if (!engines['agent-browser']) {
120
+ console.log(chalk_1.default.dim('\nTip: Install agent-browser for better performance + a11y tree:'));
121
+ console.log(' npm i -g agent-browser && agent-browser install');
122
+ }
123
+ }));
124
+ browse
125
+ .command('errors')
126
+ .description('List collected browser errors')
127
+ .option('--port <n>', 'browse daemon port (default: config or 17395)')
128
+ .option('--token <t>', 'or env CM_BROWSE_TOKEN or config browse.token')
129
+ .option('--type <t>', 'filter by type: js-error, network-fail, console-error, timeout, crash')
130
+ .option('--severity <s>', 'filter by severity: critical, error, warning, info')
131
+ .action((opts) => __awaiter(this, void 0, void 0, function* () {
132
+ var _a, _b, _c, _d;
133
+ const cfg = (0, cm_config_1.loadCmConfig)(process.cwd());
134
+ const token = opts.token || process.env.CM_BROWSE_TOKEN || ((_a = cfg.browse) === null || _a === void 0 ? void 0 : _a.token) || 'dev-token-change-me';
135
+ const port = parseInt(String((_d = (_b = opts.port) !== null && _b !== void 0 ? _b : (_c = cfg.browse) === null || _c === void 0 ? void 0 : _c.port) !== null && _d !== void 0 ? _d : 17395), 10);
136
+ const auth = `Bearer ${token}`;
137
+ try {
138
+ let path = '/errors';
139
+ const params = new URLSearchParams();
140
+ if (opts.type)
141
+ params.set('type', opts.type);
142
+ if (opts.severity)
143
+ params.set('severity', opts.severity);
144
+ if (params.toString())
145
+ path += `?${params.toString()}`;
146
+ const raw = yield browseRaw(port, path, auth);
147
+ const data = JSON.parse(raw);
148
+ if (data.errors.length === 0) {
149
+ console.log(chalk_1.default.green('No errors collected'));
150
+ }
151
+ else {
152
+ console.log(chalk_1.default.bold(`Found ${data.errors.length} errors (total: ${data.total}):`));
153
+ for (const e of data.errors) {
154
+ const icon = e.severity === 'critical' ? '🔴' : e.severity === 'error' ? '🟠' : '🟡';
155
+ console.log(` ${icon} [${e.type}] ${e.message.slice(0, 120)}`);
156
+ }
157
+ }
158
+ }
159
+ catch (e) {
160
+ console.error(chalk_1.default.red(e.message));
161
+ process.exit(1);
162
+ }
163
+ }));
164
+ browse
165
+ .command('snapshot')
166
+ .description('Get a11y tree snapshot with @eN refs')
167
+ .option('--port <n>', 'browse daemon port')
168
+ .option('--token <t>', 'or env CM_BROWSE_TOKEN or config')
169
+ .action((opts) => __awaiter(this, void 0, void 0, function* () {
170
+ var _a, _b, _c, _d;
171
+ const cfg = (0, cm_config_1.loadCmConfig)(process.cwd());
172
+ const token = opts.token || process.env.CM_BROWSE_TOKEN || ((_a = cfg.browse) === null || _a === void 0 ? void 0 : _a.token) || 'dev-token-change-me';
173
+ const port = parseInt(String((_d = (_b = opts.port) !== null && _b !== void 0 ? _b : (_c = cfg.browse) === null || _c === void 0 ? void 0 : _c.port) !== null && _d !== void 0 ? _d : 17395), 10);
174
+ const auth = `Bearer ${token}`;
175
+ try {
176
+ const raw = yield browseRaw(port, '/a11y-snapshot', auth);
177
+ const snap = JSON.parse(raw);
178
+ console.log(chalk_1.default.bold('A11y Snapshot:'));
179
+ console.log(chalk_1.default.dim(` Timestamp: ${snap.timestamp}`));
180
+ console.log(chalk_1.default.dim(` Refs: ${Object.keys(snap.refs).length} elements`));
181
+ for (const [ref, desc] of Object.entries(snap.refs)) {
182
+ console.log(` @${ref}: ${desc}`);
183
+ }
184
+ }
185
+ catch (e) {
186
+ console.error(chalk_1.default.red(e.message));
187
+ process.exit(1);
188
+ }
189
+ }));
190
+ browse
191
+ .command('engine')
192
+ .description('Show current browser engine info')
193
+ .option('--port <n>', 'browse daemon port')
194
+ .option('--token <t>', 'or env CM_BROWSE_TOKEN or config')
195
+ .action((opts) => __awaiter(this, void 0, void 0, function* () {
196
+ var _a, _b, _c, _d;
197
+ const cfg = (0, cm_config_1.loadCmConfig)(process.cwd());
198
+ const token = opts.token || process.env.CM_BROWSE_TOKEN || ((_a = cfg.browse) === null || _a === void 0 ? void 0 : _a.token) || 'dev-token-change-me';
199
+ const port = parseInt(String((_d = (_b = opts.port) !== null && _b !== void 0 ? _b : (_c = cfg.browse) === null || _c === void 0 ? void 0 : _c.port) !== null && _d !== void 0 ? _d : 17395), 10);
200
+ const auth = `Bearer ${token}`;
201
+ try {
202
+ const raw = yield browseRaw(port, '/engine', auth);
203
+ const info = JSON.parse(raw);
204
+ console.log(chalk_1.default.bold('Engine:'), info.name);
205
+ console.log(chalk_1.default.dim(` Version: ${info.version}`));
206
+ console.log(chalk_1.default.dim(` Active: ${info.active}`));
207
+ if (info.capabilities) {
208
+ console.log(chalk_1.default.dim(' Capabilities:'));
209
+ for (const [k, v] of Object.entries(info.capabilities)) {
210
+ console.log(` ${k}: ${v ? '✅' : '❌'}`);
211
+ }
212
+ }
213
+ }
214
+ catch (e) {
215
+ console.error(chalk_1.default.red(e.message));
216
+ process.exit(1);
217
+ }
218
+ }));
219
+ browse
220
+ .command('record')
221
+ .description('Video recording control')
222
+ .argument('<action>', 'start or stop')
223
+ .option('--port <n>', 'browse daemon port')
224
+ .option('--token <t>', 'or env CM_BROWSE_TOKEN or config')
225
+ .action((action, opts) => __awaiter(this, void 0, void 0, function* () {
226
+ var _a, _b, _c, _d;
227
+ const cfg = (0, cm_config_1.loadCmConfig)(process.cwd());
228
+ const token = opts.token || process.env.CM_BROWSE_TOKEN || ((_a = cfg.browse) === null || _a === void 0 ? void 0 : _a.token) || 'dev-token-change-me';
229
+ const port = parseInt(String((_d = (_b = opts.port) !== null && _b !== void 0 ? _b : (_c = cfg.browse) === null || _c === void 0 ? void 0 : _c.port) !== null && _d !== void 0 ? _d : 17395), 10);
230
+ const auth = `Bearer ${token}`;
231
+ try {
232
+ if (action === 'start') {
233
+ yield browseRequest(port, '/record/start', 'POST', auth, {});
234
+ console.log(chalk_1.default.green('Recording started'));
235
+ }
236
+ else if (action === 'stop') {
237
+ const raw = yield browseRequestRaw(port, '/record/stop', 'POST', auth);
238
+ const data = JSON.parse(raw);
239
+ console.log(chalk_1.default.green('Recording stopped'));
240
+ if (data.path)
241
+ console.log(chalk_1.default.dim(` Video: ${data.path}`));
242
+ }
243
+ else {
244
+ console.error(chalk_1.default.red('Usage: cm browse record <start|stop>'));
245
+ process.exit(1);
246
+ }
247
+ }
248
+ catch (e) {
249
+ console.error(chalk_1.default.red(e.message));
250
+ process.exit(1);
251
+ }
252
+ }));
64
253
  const guardian = program.command('guardian').description('Runtime safety: destructive command patterns + path freeze');
65
254
  guardian
66
255
  .command('check')
@@ -100,6 +289,83 @@ function registerEngineeringCommands(program) {
100
289
  }
101
290
  console.log(chalk_1.default.green('OK'), opts.file);
102
291
  });
292
+ const advisory = program
293
+ .command('advisory')
294
+ .description('Operator-facing execution analysis and skill quality reports');
295
+ advisory
296
+ .command('report')
297
+ .description('Show recent execution analyses with recommended actions')
298
+ .option('--project <dir>')
299
+ .option('--limit <n>', 'number of analyses to show', '10')
300
+ .action((opts) => {
301
+ var _a;
302
+ const root = projectPath(opts.project);
303
+ const backend = (0, storage_backend_1.getBackend)(root);
304
+ backend.initialize();
305
+ try {
306
+ const limit = Math.max(1, parseInt(String((_a = opts.limit) !== null && _a !== void 0 ? _a : '10'), 10) || 10);
307
+ console.log((0, advisory_report_1.formatAdvisoryReport)(backend, { limit }));
308
+ }
309
+ finally {
310
+ backend.close();
311
+ }
312
+ });
313
+ advisory
314
+ .command('metrics')
315
+ .description('Show aggregated skill metrics with quality weights')
316
+ .option('--project <dir>')
317
+ .option('--limit <n>', 'number of skills to show', '10')
318
+ .action((opts) => {
319
+ var _a;
320
+ const root = projectPath(opts.project);
321
+ const backend = (0, storage_backend_1.getBackend)(root);
322
+ backend.initialize();
323
+ try {
324
+ const limit = Math.max(1, parseInt(String((_a = opts.limit) !== null && _a !== void 0 ? _a : '10'), 10) || 10);
325
+ console.log((0, advisory_report_1.formatAdvisoryMetrics)(backend, { limit }));
326
+ }
327
+ finally {
328
+ backend.close();
329
+ }
330
+ });
331
+ advisory
332
+ .command('handoff')
333
+ .description('Build a structured advisory handoff for cm-skill-health or cm-skill-evolution')
334
+ .requiredOption('--for <consumer>', 'cm-skill-health | cm-skill-evolution')
335
+ .option('--analysis <id>', 'analysis id prefix (default: latest)')
336
+ .option('--skill <name>', 'override target skill')
337
+ .option('--format <f>', 'md | json', 'md')
338
+ .option('--project <dir>')
339
+ .action((opts) => {
340
+ var _a;
341
+ const consumer = String(opts.for);
342
+ if (consumer !== 'cm-skill-health' && consumer !== 'cm-skill-evolution') {
343
+ console.error(chalk_1.default.red('Invalid --for value. Use cm-skill-health or cm-skill-evolution.'));
344
+ process.exit(1);
345
+ }
346
+ const root = projectPath(opts.project);
347
+ const backend = (0, storage_backend_1.getBackend)(root);
348
+ backend.initialize();
349
+ try {
350
+ const handoff = (0, advisory_handoff_1.buildAdvisoryHandoff)(backend, {
351
+ consumer,
352
+ analysisId: opts.analysis,
353
+ skill: opts.skill,
354
+ });
355
+ const format = String((_a = opts.format) !== null && _a !== void 0 ? _a : 'md').toLowerCase();
356
+ if (format === 'json')
357
+ console.log(JSON.stringify(handoff, null, 2));
358
+ else
359
+ console.log((0, advisory_handoff_1.formatAdvisoryHandoffMarkdown)(handoff));
360
+ }
361
+ catch (error) {
362
+ console.error(chalk_1.default.red(error.message));
363
+ process.exit(1);
364
+ }
365
+ finally {
366
+ backend.close();
367
+ }
368
+ });
103
369
  const sprint = program.command('sprint').description('Opinionated pipeline + .cm/sprint Context Bus');
104
370
  sprint
105
371
  .command('init')
@@ -333,14 +599,14 @@ function registerEngineeringCommands(program) {
333
599
  .requiredOption('--branch <b>', 'branch name')
334
600
  .option('--base <b>', 'start from branch', 'main')
335
601
  .action((opts) => {
336
- (0, child_process_1.execSync)(`git worktree add -b ${opts.branch} ${opts.at} ${opts.base}`, {
602
+ (0, child_process_1.execFileSync)('git', ['worktree', 'add', '-b', opts.branch, opts.at, opts.base], {
337
603
  stdio: 'inherit',
338
604
  cwd: process.cwd(),
339
605
  });
340
606
  console.log(chalk_1.default.green('Worktree created'));
341
607
  });
342
608
  conductor.command('list').action(() => {
343
- (0, child_process_1.execSync)('git worktree list', { stdio: 'inherit', cwd: process.cwd() });
609
+ (0, child_process_1.execFileSync)('git', ['worktree', 'list'], { stdio: 'inherit', cwd: process.cwd() });
344
610
  });
345
611
  const retro = program
346
612
  .command('retro')
@@ -413,6 +679,34 @@ function registerEngineeringCommands(program) {
413
679
  console.log(chalk_1.default.dim(` ${s.reason}`));
414
680
  }
415
681
  });
682
+ const indexer = program.command('index').description('Project intelligence indexing');
683
+ indexer
684
+ .command('skills')
685
+ .description('Detect tech stack and build .cm/project-skills.md')
686
+ .option('--project <dir>')
687
+ .action((opts) => {
688
+ const root = projectPath(opts.project);
689
+ // Lazy load to avoid module compilation issues at boot if not used
690
+ const { generateProjectSkillsIndex } = require('../../indexer/skills');
691
+ const idx = generateProjectSkillsIndex(root);
692
+ const dotCm = path_1.default.join(root, '.cm');
693
+ if (!fs_1.default.existsSync(dotCm)) {
694
+ fs_1.default.mkdirSync(dotCm, { recursive: true });
695
+ }
696
+ const out = path_1.default.join(dotCm, 'project-skills.md');
697
+ const md = [
698
+ '# Local Project Skills Index',
699
+ '',
700
+ `Detected Technologies: **${idx.detectedTechnologies.join(', ') || 'None'}**`,
701
+ '',
702
+ '## Recommended Community Skills',
703
+ ...idx.recommendedSkills.map((s) => `- \`${s}\``),
704
+ '',
705
+ '> Autogenerated by `cm index skills`. Agents should run `npx skills add <skill>` if needed.'
706
+ ].join('\n');
707
+ fs_1.default.writeFileSync(out, md, 'utf-8');
708
+ console.log(chalk_1.default.green(`Indexed ${idx.detectedTechnologies.length} technologies and ${idx.recommendedSkills.length} skills to ${out}`));
709
+ });
416
710
  }
417
711
  function browseRequest(port, pathname, method, auth, body) {
418
712
  return new Promise((resolve, reject) => {
@@ -477,6 +771,34 @@ function browseRaw(port, pathname, auth) {
477
771
  }).on('error', reject);
478
772
  });
479
773
  }
774
+ function browseRequestRaw(port, pathname, method, auth, body = {}) {
775
+ return new Promise((resolve, reject) => {
776
+ const data = Buffer.from(JSON.stringify(body));
777
+ const req = http_1.default.request({
778
+ hostname: '127.0.0.1',
779
+ port,
780
+ path: pathname,
781
+ method,
782
+ headers: {
783
+ 'Content-Type': 'application/json',
784
+ 'Content-Length': data.length,
785
+ Authorization: auth,
786
+ },
787
+ }, (res) => {
788
+ let s = '';
789
+ res.on('data', (c) => (s += c));
790
+ res.on('end', () => {
791
+ if (res.statusCode && res.statusCode >= 400)
792
+ reject(new Error(`HTTP ${res.statusCode}: ${s}`));
793
+ else
794
+ resolve(s);
795
+ });
796
+ });
797
+ req.on('error', reject);
798
+ req.write(data);
799
+ req.end();
800
+ });
801
+ }
480
802
  function httpProbeUrl(url) {
481
803
  return __awaiter(this, void 0, void 0, function* () {
482
804
  const t0 = performance.now();
@@ -0,0 +1,123 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerEvolveCommands = registerEvolveCommands;
4
+ const skill_evolver_1 = require("../../skill-evolver");
5
+ const learning_promoter_1 = require("../../learning-promoter");
6
+ const advisory_handoff_1 = require("../../advisory-handoff");
7
+ const storage_backend_1 = require("../../storage-backend");
8
+ // ─── Evolution CLI Commands ─────────────────────────────────────────────────
9
+ function registerEvolveCommands(program) {
10
+ const evolve = program
11
+ .command('evolve')
12
+ .description('Skill Evolution Engine — self-improving skills via FIX/DERIVED/CAPTURED modes');
13
+ evolve
14
+ .command('status')
15
+ .description('Show skill evolution status and records')
16
+ .option('-p, --project <path>', 'Project path', process.cwd())
17
+ .action((opts) => {
18
+ var _a;
19
+ const evolver = new skill_evolver_1.SkillEvolver(opts.project);
20
+ const records = evolver.listSkillRecords();
21
+ if (records.length === 0) {
22
+ console.log('🧬 No skill evolution records yet. Skills will begin evolving after task executions.');
23
+ return;
24
+ }
25
+ console.log('🧬 Skill Evolution Records');
26
+ console.log('─'.repeat(70));
27
+ console.log(`${'Skill'.padEnd(30)} ${'Origin'.padEnd(10)} ${'Gen'.padEnd(5)} ${'Evolutions'.padEnd(12)} Last Mode`);
28
+ console.log('─'.repeat(70));
29
+ for (const record of records) {
30
+ console.log(`${record.skill_name.padEnd(30)} ${record.origin.padEnd(10)} ${String(record.generation).padEnd(5)} ${String(record.evolution_count).padEnd(12)} ${(_a = record.last_evolution_mode) !== null && _a !== void 0 ? _a : '-'}`);
31
+ }
32
+ });
33
+ evolve
34
+ .command('run <mode> <skill>')
35
+ .description('Execute evolution on a skill (modes: FIX, DERIVED, CAPTURED)')
36
+ .option('-p, --project <path>', 'Project path', process.cwd())
37
+ .option('-c, --confidence <n>', 'Override confidence threshold', '0.85')
38
+ .action((mode, skill, opts) => {
39
+ const upperMode = mode.toUpperCase();
40
+ if (!['FIX', 'DERIVED', 'CAPTURED'].includes(upperMode)) {
41
+ console.error(`❌ Invalid mode: ${mode}. Must be FIX, DERIVED, or CAPTURED.`);
42
+ process.exit(1);
43
+ }
44
+ const evolver = new skill_evolver_1.SkillEvolver(opts.project);
45
+ const result = evolver.evolve(upperMode, skill, parseFloat(opts.confidence));
46
+ console.log((0, skill_evolver_1.formatEvolutionResult)(result));
47
+ });
48
+ evolve
49
+ .command('auto')
50
+ .description('Auto-evolve based on latest advisory handoff')
51
+ .option('-p, --project <path>', 'Project path', process.cwd())
52
+ .action((opts) => {
53
+ try {
54
+ const backend = (0, storage_backend_1.getBackend)(opts.project);
55
+ backend.initialize();
56
+ const handoff = (0, advisory_handoff_1.buildAdvisoryHandoff)(backend, { consumer: 'cm-skill-evolution' });
57
+ const evolver = new skill_evolver_1.SkillEvolver(opts.project, backend);
58
+ const result = evolver.evolveFromAdvisory(handoff);
59
+ console.log((0, skill_evolver_1.formatEvolutionResult)(result));
60
+ }
61
+ catch (err) {
62
+ console.error(`❌ Auto-evolve failed: ${err instanceof Error ? err.message : err}`);
63
+ }
64
+ });
65
+ evolve
66
+ .command('history')
67
+ .description('Show evolution history')
68
+ .option('-p, --project <path>', 'Project path', process.cwd())
69
+ .option('-s, --skill <name>', 'Filter by skill name')
70
+ .option('-n, --limit <n>', 'Max entries', '20')
71
+ .action((opts) => {
72
+ const evolver = new skill_evolver_1.SkillEvolver(opts.project);
73
+ const history = evolver.getHistory(opts.skill, parseInt(opts.limit));
74
+ console.log((0, skill_evolver_1.formatEvolutionHistory)(history));
75
+ });
76
+ evolve
77
+ .command('rollback <skill>')
78
+ .description('Rollback a skill to its pre-evolution backup')
79
+ .option('-p, --project <path>', 'Project path', process.cwd())
80
+ .action((skill, opts) => {
81
+ const evolver = new skill_evolver_1.SkillEvolver(opts.project);
82
+ const result = evolver.rollback(skill);
83
+ console.log((0, skill_evolver_1.formatEvolutionResult)(result));
84
+ });
85
+ // ─── Learning Promotion ─────────────────────────────────────────────────
86
+ evolve
87
+ .command('candidates')
88
+ .description('Show learnings that qualify for promotion to skills')
89
+ .option('-p, --project <path>', 'Project path', process.cwd())
90
+ .action((opts) => {
91
+ const promoter = new learning_promoter_1.LearningPromoter(opts.project);
92
+ const candidates = promoter.findCandidates();
93
+ console.log((0, learning_promoter_1.formatPromotionCandidates)(candidates));
94
+ });
95
+ evolve
96
+ .command('promote <learningId>')
97
+ .description('Promote a specific learning to a reusable skill')
98
+ .option('-p, --project <path>', 'Project path', process.cwd())
99
+ .action((learningId, opts) => {
100
+ const promoter = new learning_promoter_1.LearningPromoter(opts.project);
101
+ const result = promoter.promote(learningId);
102
+ const icon = result.promoted ? '✅' : '❌';
103
+ console.log(`${icon} ${result.reason}`);
104
+ if (result.promoted) {
105
+ console.log(` Skill: ${result.skillName}`);
106
+ console.log(` Path: ${result.skillPath}`);
107
+ }
108
+ });
109
+ evolve
110
+ .command('auto-promote')
111
+ .description('Auto-promote the top learning candidate to a skill')
112
+ .option('-p, --project <path>', 'Project path', process.cwd())
113
+ .action((opts) => {
114
+ const promoter = new learning_promoter_1.LearningPromoter(opts.project);
115
+ const result = promoter.autoPromote();
116
+ if (!result) {
117
+ console.log('📚 No learnings qualify for auto-promotion yet.');
118
+ return;
119
+ }
120
+ const icon = result.promoted ? '✅' : '❌';
121
+ console.log(`${icon} ${result.reason}`);
122
+ });
123
+ }