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
@@ -0,0 +1,533 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AGENT_FOLDER_MAP = exports.WEB_FRONTEND_EXTENSIONS = exports.FRONTEND_BONUS_SKILLS = exports.FRONTEND_PACKAGES = exports.COMBO_SKILLS_MAP = exports.SKILLS_MAP = void 0;
4
+ exports.parseSettingsGradleModules = parseSettingsGradleModules;
5
+ exports.hasWebFrontendFiles = hasWebFrontendFiles;
6
+ exports.resolveWorkspaces = resolveWorkspaces;
7
+ exports.readGemfile = readGemfile;
8
+ exports.readPackageJson = readPackageJson;
9
+ exports.readDenoJson = readDenoJson;
10
+ exports.getDenoImportNames = getDenoImportNames;
11
+ exports.getAllPackageNames = getAllPackageNames;
12
+ exports.detectTechnologies = detectTechnologies;
13
+ exports.detectCombos = detectCombos;
14
+ exports.detectAgents = detectAgents;
15
+ exports.parseSkillPath = parseSkillPath;
16
+ exports.getInstalledSkillNames = getInstalledSkillNames;
17
+ exports.collectSkills = collectSkills;
18
+ const node_fs_1 = require("node:fs");
19
+ const node_path_1 = require("node:path");
20
+ const node_os_1 = require("node:os");
21
+ var skills_map_1 = require("./skills-map");
22
+ Object.defineProperty(exports, "SKILLS_MAP", { enumerable: true, get: function () { return skills_map_1.SKILLS_MAP; } });
23
+ Object.defineProperty(exports, "COMBO_SKILLS_MAP", { enumerable: true, get: function () { return skills_map_1.COMBO_SKILLS_MAP; } });
24
+ Object.defineProperty(exports, "FRONTEND_PACKAGES", { enumerable: true, get: function () { return skills_map_1.FRONTEND_PACKAGES; } });
25
+ Object.defineProperty(exports, "FRONTEND_BONUS_SKILLS", { enumerable: true, get: function () { return skills_map_1.FRONTEND_BONUS_SKILLS; } });
26
+ Object.defineProperty(exports, "WEB_FRONTEND_EXTENSIONS", { enumerable: true, get: function () { return skills_map_1.WEB_FRONTEND_EXTENSIONS; } });
27
+ Object.defineProperty(exports, "AGENT_FOLDER_MAP", { enumerable: true, get: function () { return skills_map_1.AGENT_FOLDER_MAP; } });
28
+ const skills_map_2 = require("./skills-map");
29
+ // ── Internal Constants ───────────────────────────────────────
30
+ const AGENT_FOLDER_ENTRIES = Object.entries(skills_map_2.AGENT_FOLDER_MAP);
31
+ const SCAN_SKIP_DIRS = new Set([
32
+ "node_modules",
33
+ ".git",
34
+ "vendor",
35
+ ".next",
36
+ "dist",
37
+ "build",
38
+ ".output",
39
+ ".nuxt",
40
+ ".svelte-kit",
41
+ "__pycache__",
42
+ ".cache",
43
+ "coverage",
44
+ ".turbo",
45
+ ".terraform",
46
+ "var",
47
+ "bin",
48
+ "obj",
49
+ ".vs",
50
+ ]);
51
+ const GRADLE_SCAN_ROOT_FILES = [
52
+ "build.gradle.kts",
53
+ "build.gradle",
54
+ "settings.gradle.kts",
55
+ "settings.gradle",
56
+ "gradle/libs.versions.toml",
57
+ ];
58
+ const DOTNET_SCAN_ROOT_FILES = [
59
+ "global.json",
60
+ "NuGet.Config",
61
+ "Directory.Build.props",
62
+ "Directory.Packages.props",
63
+ ];
64
+ // ── Gradle Scanning ──────────────────────────────────────────
65
+ function parseSettingsGradleModules(content) {
66
+ const modules = [];
67
+ const includeRe = /include\s*\(?\s*([^)]+)/g;
68
+ let includeMatch;
69
+ while ((includeMatch = includeRe.exec(content)) !== null) {
70
+ const args = includeMatch[1];
71
+ const quotedRe = /['"]([^'"]+)['"]/g;
72
+ let quotedMatch;
73
+ while ((quotedMatch = quotedRe.exec(args)) !== null) {
74
+ modules.push(quotedMatch[1].replace(/^:/, "").replace(/:/g, "/"));
75
+ }
76
+ }
77
+ return modules;
78
+ }
79
+ const _gradleCache = new Map();
80
+ function gradleLayoutCandidatePaths(projectDir) {
81
+ const cached = _gradleCache.get(projectDir);
82
+ if (cached)
83
+ return cached;
84
+ const candidates = [];
85
+ const seen = new Set();
86
+ function add(filePath) {
87
+ if (!seen.has(filePath)) {
88
+ candidates.push(filePath);
89
+ seen.add(filePath);
90
+ }
91
+ }
92
+ for (const f of GRADLE_SCAN_ROOT_FILES) {
93
+ add((0, node_path_1.join)(projectDir, f));
94
+ }
95
+ let entries;
96
+ try {
97
+ entries = (0, node_fs_1.readdirSync)(projectDir, { withFileTypes: true });
98
+ }
99
+ catch (_a) {
100
+ entries = [];
101
+ }
102
+ for (const e of entries) {
103
+ if (!e.isDirectory() || e.name.startsWith(".") || SCAN_SKIP_DIRS.has(e.name))
104
+ continue;
105
+ for (const g of ["build.gradle.kts", "build.gradle"]) {
106
+ add((0, node_path_1.join)(projectDir, e.name, g));
107
+ }
108
+ }
109
+ for (const settingsFile of ["settings.gradle.kts", "settings.gradle"]) {
110
+ const settingsPath = (0, node_path_1.join)(projectDir, settingsFile);
111
+ let content;
112
+ try {
113
+ content = (0, node_fs_1.readFileSync)(settingsPath, "utf-8");
114
+ }
115
+ catch (_b) {
116
+ continue;
117
+ }
118
+ for (const modulePath of parseSettingsGradleModules(content)) {
119
+ for (const g of ["build.gradle.kts", "build.gradle"]) {
120
+ add((0, node_path_1.join)(projectDir, modulePath, g));
121
+ }
122
+ }
123
+ break;
124
+ }
125
+ _gradleCache.set(projectDir, candidates);
126
+ return candidates;
127
+ }
128
+ // ── .NET Scanning ────────────────────────────────────────────
129
+ const _dotNetCache = new Map();
130
+ function dotNetLayoutCandidatePaths(projectDir) {
131
+ const cached = _dotNetCache.get(projectDir);
132
+ if (cached)
133
+ return cached;
134
+ const candidates = [];
135
+ const seen = new Set();
136
+ function add(filePath) {
137
+ if (!seen.has(filePath)) {
138
+ candidates.push(filePath);
139
+ seen.add(filePath);
140
+ }
141
+ }
142
+ for (const f of DOTNET_SCAN_ROOT_FILES) {
143
+ add((0, node_path_1.join)(projectDir, f));
144
+ }
145
+ function scan(dir, depth) {
146
+ if (depth > 2)
147
+ return;
148
+ let entries;
149
+ try {
150
+ entries = (0, node_fs_1.readdirSync)(dir, { withFileTypes: true });
151
+ }
152
+ catch (_a) {
153
+ return;
154
+ }
155
+ for (const e of entries) {
156
+ if (e.isFile()) {
157
+ const lower = e.name.toLowerCase();
158
+ if (lower.endsWith(".sln") || lower.endsWith(".csproj") || lower.endsWith(".fsproj")) {
159
+ add((0, node_path_1.join)(dir, e.name));
160
+ }
161
+ }
162
+ else if (e.isDirectory() && !e.name.startsWith(".") && !SCAN_SKIP_DIRS.has(e.name)) {
163
+ scan((0, node_path_1.join)(dir, e.name), depth + 1);
164
+ }
165
+ }
166
+ }
167
+ scan(projectDir, 0);
168
+ _dotNetCache.set(projectDir, candidates);
169
+ return candidates;
170
+ }
171
+ function resolveConfigFileContentPaths(projectDir, config) {
172
+ if (config.scanGradleLayout) {
173
+ return gradleLayoutCandidatePaths(projectDir);
174
+ }
175
+ if (config.scanDotNetLayout) {
176
+ return dotNetLayoutCandidatePaths(projectDir);
177
+ }
178
+ return (config.files || []).map((f) => (0, node_path_1.join)(projectDir, f));
179
+ }
180
+ // ── Frontend File Scanning ───────────────────────────────────
181
+ function hasWebFrontendFiles(projectDir, maxDepth = 3) {
182
+ function scan(dir, depth) {
183
+ let entries;
184
+ try {
185
+ entries = (0, node_fs_1.readdirSync)(dir, { withFileTypes: true });
186
+ }
187
+ catch (_a) {
188
+ return false;
189
+ }
190
+ for (const entry of entries) {
191
+ if (entry.isFile()) {
192
+ const name = entry.name;
193
+ if (name.endsWith(".blade.php"))
194
+ return true;
195
+ const dot = name.lastIndexOf(".");
196
+ if (dot !== -1 && skills_map_2.WEB_FRONTEND_EXTENSIONS.has(name.slice(dot)))
197
+ return true;
198
+ }
199
+ else if (entry.isDirectory() && depth < maxDepth) {
200
+ if (SCAN_SKIP_DIRS.has(entry.name) || entry.name.startsWith("."))
201
+ continue;
202
+ if (scan((0, node_path_1.join)(dir, entry.name), depth + 1))
203
+ return true;
204
+ }
205
+ }
206
+ return false;
207
+ }
208
+ return scan(projectDir, 0);
209
+ }
210
+ // ── Workspace Resolution ──────────────────────────────────────
211
+ function parsePnpmWorkspaceYaml(content) {
212
+ const lines = content.split("\n");
213
+ const patterns = [];
214
+ let inPackages = false;
215
+ for (const raw of lines) {
216
+ const line = raw.trim();
217
+ if (line === "packages:" || line === "packages :") {
218
+ inPackages = true;
219
+ continue;
220
+ }
221
+ if (inPackages) {
222
+ if (line.startsWith("- ")) {
223
+ patterns.push(line
224
+ .slice(2)
225
+ .trim()
226
+ .replace(/^['"]|['"]$/g, ""));
227
+ }
228
+ else if (line !== "" && !line.startsWith("#")) {
229
+ break;
230
+ }
231
+ }
232
+ }
233
+ return patterns;
234
+ }
235
+ function expandWorkspacePatterns(projectDir, patterns) {
236
+ const dirs = [];
237
+ for (const pattern of patterns) {
238
+ if (pattern.includes("*")) {
239
+ const parent = (0, node_path_1.join)(projectDir, pattern.replace(/\/?\*.*$/, ""));
240
+ let entries;
241
+ try {
242
+ entries = (0, node_fs_1.readdirSync)(parent, { withFileTypes: true });
243
+ }
244
+ catch (_a) {
245
+ continue;
246
+ }
247
+ for (const entry of entries) {
248
+ if (!entry.isDirectory() || SCAN_SKIP_DIRS.has(entry.name) || entry.name.startsWith("."))
249
+ continue;
250
+ const wsDir = (0, node_path_1.join)(parent, entry.name);
251
+ if ((0, node_fs_1.existsSync)((0, node_path_1.join)(wsDir, "package.json")) ||
252
+ (0, node_fs_1.existsSync)((0, node_path_1.join)(wsDir, "deno.json")) ||
253
+ (0, node_fs_1.existsSync)((0, node_path_1.join)(wsDir, "deno.jsonc"))) {
254
+ dirs.push(wsDir);
255
+ }
256
+ }
257
+ }
258
+ else {
259
+ const wsDir = (0, node_path_1.join)(projectDir, pattern);
260
+ if ((0, node_fs_1.existsSync)((0, node_path_1.join)(wsDir, "package.json")) ||
261
+ (0, node_fs_1.existsSync)((0, node_path_1.join)(wsDir, "deno.json")) ||
262
+ (0, node_fs_1.existsSync)((0, node_path_1.join)(wsDir, "deno.jsonc"))) {
263
+ dirs.push(wsDir);
264
+ }
265
+ }
266
+ }
267
+ return dirs;
268
+ }
269
+ function resolveWorkspaces(projectDir, preloaded) {
270
+ const pnpmPath = (0, node_path_1.join)(projectDir, "pnpm-workspace.yaml");
271
+ if ((0, node_fs_1.existsSync)(pnpmPath)) {
272
+ try {
273
+ const content = (0, node_fs_1.readFileSync)(pnpmPath, "utf-8");
274
+ const patterns = parsePnpmWorkspaceYaml(content);
275
+ if (patterns.length > 0) {
276
+ return expandWorkspacePatterns(projectDir, patterns).filter((d) => (0, node_path_1.resolve)(d) !== (0, node_path_1.resolve)(projectDir));
277
+ }
278
+ }
279
+ catch (_a) { }
280
+ }
281
+ const pkg = (preloaded === null || preloaded === void 0 ? void 0 : preloaded.pkg) !== undefined ? preloaded.pkg : readPackageJson(projectDir);
282
+ if (pkg) {
283
+ const ws = pkg.workspaces;
284
+ const patterns = Array.isArray(ws)
285
+ ? ws
286
+ : Array.isArray(ws === null || ws === void 0 ? void 0 : ws.packages)
287
+ ? ws.packages
288
+ : null;
289
+ if (patterns && patterns.length > 0) {
290
+ return expandWorkspacePatterns(projectDir, patterns).filter((d) => (0, node_path_1.resolve)(d) !== (0, node_path_1.resolve)(projectDir));
291
+ }
292
+ }
293
+ const denoJson = (preloaded === null || preloaded === void 0 ? void 0 : preloaded.denoJson) !== undefined ? preloaded.denoJson : readDenoJson(projectDir);
294
+ if (denoJson === null || denoJson === void 0 ? void 0 : denoJson.workspace) {
295
+ const members = Array.isArray(denoJson.workspace) ? denoJson.workspace : [];
296
+ if (members.length > 0) {
297
+ return expandWorkspacePatterns(projectDir, members).filter((d) => (0, node_path_1.resolve)(d) !== (0, node_path_1.resolve)(projectDir));
298
+ }
299
+ }
300
+ return [];
301
+ }
302
+ // ── Detection ─────────────────────────────────────────────────
303
+ function readGemfile(dir) {
304
+ const gemfilePath = (0, node_path_1.join)(dir, "Gemfile");
305
+ if (!(0, node_fs_1.existsSync)(gemfilePath))
306
+ return [];
307
+ try {
308
+ const content = (0, node_fs_1.readFileSync)(gemfilePath, "utf-8");
309
+ const gems = [];
310
+ const gemRegex = /^\s*gem\s+['"]([^'"]+)['"]/gm;
311
+ let match;
312
+ while ((match = gemRegex.exec(content)) !== null) {
313
+ gems.push(match[1]);
314
+ }
315
+ return gems;
316
+ }
317
+ catch (_a) {
318
+ return [];
319
+ }
320
+ }
321
+ function readPackageJson(dir) {
322
+ try {
323
+ return JSON.parse((0, node_fs_1.readFileSync)((0, node_path_1.join)(dir, "package.json"), "utf-8"));
324
+ }
325
+ catch (_a) {
326
+ return null;
327
+ }
328
+ }
329
+ function readDenoJson(dir) {
330
+ for (const name of ["deno.json", "deno.jsonc"]) {
331
+ try {
332
+ return JSON.parse((0, node_fs_1.readFileSync)((0, node_path_1.join)(dir, name), "utf-8"));
333
+ }
334
+ catch (_a) {
335
+ continue;
336
+ }
337
+ }
338
+ return null;
339
+ }
340
+ function getDenoImportNames(denoJson) {
341
+ if (!(denoJson === null || denoJson === void 0 ? void 0 : denoJson.imports))
342
+ return [];
343
+ return Object.values(denoJson.imports)
344
+ .filter((s) => typeof s === "string" && (s.startsWith("npm:") || s.startsWith("jsr:")))
345
+ .map((specifier) => {
346
+ const bare = specifier.replace(/^(?:npm|jsr):/, "");
347
+ if (bare.startsWith("@")) {
348
+ return bare.replace(/^(@[^/]+\/[^@]+).*$/, "$1");
349
+ }
350
+ return bare.replace(/@.*$/, "");
351
+ });
352
+ }
353
+ function getAllPackageNames(pkg) {
354
+ if (!pkg)
355
+ return [];
356
+ return [
357
+ ...Object.keys(pkg.dependencies || {}),
358
+ ...Object.keys(pkg.devDependencies || {}),
359
+ ];
360
+ }
361
+ function detectTechnologiesInDir(dir, { skipFrontendFiles = false, pkg: preloadedPkg, denoJson: preloadedDeno, } = {}) {
362
+ const pkg = preloadedPkg !== undefined ? preloadedPkg : readPackageJson(dir);
363
+ const allPackages = getAllPackageNames(pkg);
364
+ const deno = preloadedDeno !== undefined ? preloadedDeno : readDenoJson(dir);
365
+ const denoImports = getDenoImportNames(deno);
366
+ const allDepsSet = denoImports.length > 0 ? new Set([...allPackages, ...denoImports]) : new Set(allPackages);
367
+ const allDepsArray = denoImports.length > 0 ? [...allDepsSet] : allPackages;
368
+ let gemNames;
369
+ const detected = [];
370
+ const fileContentCache = new Map();
371
+ const existsCache = new Map();
372
+ function cachedRead(filePath) {
373
+ if (fileContentCache.has(filePath))
374
+ return fileContentCache.get(filePath);
375
+ let content = null;
376
+ try {
377
+ content = (0, node_fs_1.readFileSync)(filePath, "utf-8");
378
+ }
379
+ catch (_a) { }
380
+ fileContentCache.set(filePath, content);
381
+ if (content !== null)
382
+ existsCache.set(filePath, true);
383
+ return content;
384
+ }
385
+ function cachedExists(filePath) {
386
+ if (existsCache.has(filePath))
387
+ return existsCache.get(filePath);
388
+ const result = (0, node_fs_1.existsSync)(filePath);
389
+ existsCache.set(filePath, result);
390
+ return result;
391
+ }
392
+ for (const tech of skills_map_2.SKILLS_MAP) {
393
+ let found = false;
394
+ if (tech.detect.packages) {
395
+ found = tech.detect.packages.some((p) => allDepsSet.has(p));
396
+ }
397
+ if (!found && tech.detect.packagePatterns) {
398
+ found = tech.detect.packagePatterns.some((pattern) => allDepsArray.some((p) => pattern.test(p)));
399
+ }
400
+ if (!found && tech.detect.configFiles) {
401
+ found = tech.detect.configFiles.some((f) => cachedExists((0, node_path_1.join)(dir, f)));
402
+ }
403
+ if (!found && tech.detect.gems) {
404
+ if (gemNames === undefined)
405
+ gemNames = readGemfile(dir);
406
+ found = tech.detect.gems.some((g) => gemNames.includes(g));
407
+ }
408
+ if (!found && tech.detect.configFileContent) {
409
+ const configs = Array.isArray(tech.detect.configFileContent)
410
+ ? tech.detect.configFileContent
411
+ : [tech.detect.configFileContent];
412
+ for (const cfg of configs) {
413
+ const paths = resolveConfigFileContentPaths(dir, cfg);
414
+ const { patterns } = cfg;
415
+ for (const filePath of paths) {
416
+ const content = cachedRead(filePath);
417
+ if (content === null)
418
+ continue;
419
+ if (patterns.some((p) => content.includes(p))) {
420
+ found = true;
421
+ break;
422
+ }
423
+ }
424
+ if (found)
425
+ break;
426
+ }
427
+ }
428
+ if (found) {
429
+ detected.push(tech);
430
+ }
431
+ }
432
+ const isFrontendByPackages = allDepsArray.some((p) => skills_map_2.FRONTEND_PACKAGES.has(p));
433
+ const isFrontendByFiles = isFrontendByPackages || skipFrontendFiles ? false : hasWebFrontendFiles(dir);
434
+ return { detected, isFrontendByPackages, isFrontendByFiles };
435
+ }
436
+ function detectTechnologies(projectDir) {
437
+ const pkg = readPackageJson(projectDir);
438
+ const denoJson = readDenoJson(projectDir);
439
+ const root = detectTechnologiesInDir(projectDir, { pkg, denoJson });
440
+ const seenIds = new Map(root.detected.map((t) => [t.id, t]));
441
+ let isFrontend = root.isFrontendByPackages || root.isFrontendByFiles;
442
+ const workspaceDirs = resolveWorkspaces(projectDir, { pkg, denoJson });
443
+ for (const wsDir of workspaceDirs) {
444
+ const ws = detectTechnologiesInDir(wsDir, { skipFrontendFiles: isFrontend });
445
+ for (const tech of ws.detected) {
446
+ if (!seenIds.has(tech.id)) {
447
+ seenIds.set(tech.id, tech);
448
+ }
449
+ }
450
+ if (ws.isFrontendByPackages || ws.isFrontendByFiles) {
451
+ isFrontend = true;
452
+ }
453
+ }
454
+ const detected = [...seenIds.values()];
455
+ const detectedIds = detected.map((t) => t.id);
456
+ const combos = detectCombos(detectedIds);
457
+ return { detected, isFrontend, combos };
458
+ }
459
+ function detectCombos(detectedIds) {
460
+ const idSet = detectedIds instanceof Set ? detectedIds : new Set(detectedIds);
461
+ return skills_map_2.COMBO_SKILLS_MAP.filter((combo) => combo.requires.every((id) => idSet.has(id)));
462
+ }
463
+ // ── Agent Detection ─────────────────────────────────────────
464
+ function detectAgents(home = (0, node_os_1.homedir)()) {
465
+ const agents = ["universal"];
466
+ for (const [folder, agentName] of AGENT_FOLDER_ENTRIES) {
467
+ if ((0, node_fs_1.existsSync)((0, node_path_1.join)(home, folder, "skills"))) {
468
+ agents.push(agentName);
469
+ }
470
+ }
471
+ return agents;
472
+ }
473
+ function parseSkillPath(skill) {
474
+ if (skill.startsWith("http")) {
475
+ return { repo: skill, skillName: "", full: skill };
476
+ }
477
+ const parts = skill.split("/");
478
+ return {
479
+ repo: parts.slice(0, 2).join("/"),
480
+ skillName: parts.slice(2).join("/"),
481
+ full: skill,
482
+ };
483
+ }
484
+ // ── Installed Skills Detection ───────────────────────────────
485
+ function getInstalledSkillNames(projectDir) {
486
+ try {
487
+ const lock = JSON.parse((0, node_fs_1.readFileSync)((0, node_path_1.join)(projectDir, "skills-lock.json"), "utf-8"));
488
+ if ((lock === null || lock === void 0 ? void 0 : lock.skills) && typeof lock.skills === "object") {
489
+ return new Set(Object.keys(lock.skills));
490
+ }
491
+ }
492
+ catch (_a) { }
493
+ try {
494
+ const entries = (0, node_fs_1.readdirSync)((0, node_path_1.join)(projectDir, ".agents", "skills"), { withFileTypes: true });
495
+ return new Set(entries.filter((e) => e.isDirectory()).map((e) => e.name));
496
+ }
497
+ catch (_b) { }
498
+ return new Set();
499
+ }
500
+ function collectSkills({ detected, isFrontend, combos = [], installedNames = null, }) {
501
+ const skillMap = new Map();
502
+ const skills = [];
503
+ function addSkill(skill, source) {
504
+ const existing = skillMap.get(skill);
505
+ if (!existing) {
506
+ const installed = installedNames
507
+ ? installedNames.has(parseSkillPath(skill).skillName)
508
+ : false;
509
+ const entry = { skill, sources: [source], installed };
510
+ skillMap.set(skill, entry);
511
+ skills.push(entry);
512
+ }
513
+ else if (!existing.sources.includes(source)) {
514
+ existing.sources.push(source);
515
+ }
516
+ }
517
+ for (const tech of detected) {
518
+ for (const skill of tech.skills) {
519
+ addSkill(skill, tech.name);
520
+ }
521
+ }
522
+ for (const combo of combos) {
523
+ for (const skill of combo.skills) {
524
+ addSkill(skill, combo.name);
525
+ }
526
+ }
527
+ if (isFrontend) {
528
+ for (const skill of skills_map_2.FRONTEND_BONUS_SKILLS) {
529
+ addSkill(skill, "Frontend");
530
+ }
531
+ }
532
+ return skills;
533
+ }