codymaster 4.1.3 → 4.3.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 (658) hide show
  1. package/CHANGELOG.md +22 -2
  2. package/README.md +54 -84
  3. package/dist/index.js +589 -510
  4. package/dist/ui/box.js +49 -0
  5. package/install.sh +2 -2
  6. package/package.json +3 -9
  7. package/skills/AGENTS.md +61 -0
  8. package/skills/CLAUDE.md +158 -0
  9. package/skills/boxme-git-config/SKILL.md +56 -0
  10. package/skills/boxme-local-dev/SKILL.md +66 -0
  11. package/skills/build.sh +30 -0
  12. package/skills/cf +314 -0
  13. package/skills/cf 2 +313 -0
  14. package/skills/cm-ads-tracker/SKILL.md +364 -69
  15. package/skills/cm-auto-publisher/SKILL.md +81 -0
  16. package/skills/cm-booking-calendar/SKILL.md +521 -0
  17. package/skills/cm-booking-calendar/references/industry-patterns.md +527 -0
  18. package/skills/cm-booking-calendar/templates/booking-form.css +626 -0
  19. package/skills/cm-booking-calendar/templates/booking-form.html +477 -0
  20. package/skills/cm-booking-calendar/templates/calendar-engine.js +419 -0
  21. package/skills/cm-booking-calendar/templates/calendar-export.js +395 -0
  22. package/skills/cm-booking-calendar/templates/reminder-config.js +629 -0
  23. package/skills/cm-brainstorm-idea/SKILL.md +15 -24
  24. package/skills/cm-clean-code/SKILL.md +300 -0
  25. package/skills/cm-code-review/SKILL.md +0 -27
  26. package/skills/cm-codeintell/SKILL.md +598 -0
  27. package/skills/cm-content-factory/.content-factory-state.json +132 -0
  28. package/skills/cm-content-factory/.git 2/logs/refs/heads/main +1 -0
  29. package/skills/cm-content-factory/.git 2/logs/refs/remotes/origin/main +1 -0
  30. package/skills/cm-content-factory/.git 2/objects/02/fb0956734b5f8ba3f918b7defd04a89cfe0076 +0 -0
  31. package/skills/cm-content-factory/.git 2/objects/08/1e129d75dc6feac6c02037272e6bd1a04e3324 +0 -0
  32. package/skills/cm-content-factory/.git 2/objects/0c/5393416f3c5e01c9a655a802bff0dd52f76f0a +0 -0
  33. package/skills/cm-content-factory/.git 2/objects/10/0b9be46978a946a77188f68be725098a122001 +0 -0
  34. package/skills/cm-content-factory/.git 2/objects/10/cf041167fc9843610eb3d90259ef3396315fdc +0 -0
  35. package/skills/cm-content-factory/.git 2/objects/12/5e19538dd6e1338ffe74f6c4c165b00435bf48 +0 -0
  36. package/skills/cm-content-factory/.git 2/objects/16/a9b9d0088d5c1347628b45a2620b479d8ad57c +0 -0
  37. package/skills/cm-content-factory/.git 2/objects/17/8c2a9ef93c33ae4eec9d58e82321f9229843a1 +0 -0
  38. package/skills/cm-content-factory/.git 2/objects/25/397ae41d09104d763bdcac2695209d85cdea89 +0 -0
  39. package/skills/cm-content-factory/.git 2/objects/2f/a836b7947f2d458e1f639788bf4bb0983a3305 +0 -0
  40. package/skills/cm-content-factory/.git 2/objects/3a/baaaf0a1c0909c0828335791557125fba911e0 +0 -0
  41. package/skills/cm-content-factory/.git 2/objects/42/2924221b81f5ce3c4e4daac9a64a24f9b01f9a +0 -0
  42. package/skills/cm-content-factory/.git 2/objects/42/ec0ce707447dc11446a34c9995fb8533801731 +0 -0
  43. package/skills/cm-content-factory/.git 2/objects/46/e43ce92866d56ce74b1d750db307cfe6154a15 +0 -0
  44. package/skills/cm-content-factory/.git 2/objects/48/5e41b633c63f55b8277bcc59f44f67681f671a +0 -0
  45. package/skills/cm-content-factory/.git 2/objects/49/49c596a3a89fa240642acd95dd3258e261eb09 +0 -0
  46. package/skills/cm-content-factory/.git 2/objects/50/9d42d8412ef8eaf7f7e138476bac2e4d10ce60 +0 -0
  47. package/skills/cm-content-factory/.git 2/objects/55/0c8c389d981b463ef849aeb792d8be3ccb6ec8 +0 -0
  48. package/skills/cm-content-factory/.git 2/objects/5d/82d3b18410cdda3ace3677436f0cb599dbe2d2 +0 -0
  49. package/skills/cm-content-factory/.git 2/objects/60/0617c58e871a38b33bf29e282d132bb3c381ad +0 -0
  50. package/skills/cm-content-factory/.git 2/objects/6a/8369a99c687b7245c92ffaf0e0f0dab9014504 +0 -0
  51. package/skills/cm-content-factory/.git 2/objects/79/bea435d40ab531c1aaf6be0432c6a5b7aaed21 +0 -0
  52. package/skills/cm-content-factory/.git 2/objects/7e/5ebd79251c2f14e4aceb86c74b6b6daae6b500 +0 -0
  53. package/skills/cm-content-factory/.git 2/objects/81/98a822a60178d6d5023ddb3e222cddf048742e +0 -0
  54. package/skills/cm-content-factory/.git 2/objects/86/0a0e1943dfe53411d2e499a1f16f46a96ef758 +0 -0
  55. package/skills/cm-content-factory/.git 2/objects/86/971fb55fdc081fdbae52376f0f13e57a4e9b04 +0 -0
  56. package/skills/cm-content-factory/.git 2/objects/88/b89dd609a0a03f8d4fe8bfde20d5b8fc1d326d +0 -0
  57. package/skills/cm-content-factory/.git 2/objects/90/8737edb6b7809e32cc01590b4e08ba42a9d40d +0 -0
  58. package/skills/cm-content-factory/.git 2/objects/93/d5a8a9a7d4fb7f11491cb596a6880528725118 +0 -0
  59. package/skills/cm-content-factory/.git 2/objects/98/46a2ab81d0c3b3eb00ef88fc56989aa7e9f316 +0 -0
  60. package/skills/cm-content-factory/.git 2/objects/9b/d8dd1e49cf274eaf9c555f3ab39dce7af5715e +0 -0
  61. package/skills/cm-content-factory/.git 2/objects/a1/13329fb0cec96ae78b222d33a24c3b5bc7fa1f +0 -0
  62. package/skills/cm-content-factory/.git 2/objects/a9/e6effe626e8a3aea3a8fc3364b492191c6e7d0 +0 -0
  63. package/skills/cm-content-factory/.git 2/objects/ad/6de7e48d9782cca9353d1ff0aa1aab7fe1df85 +0 -0
  64. package/skills/cm-content-factory/.git 2/objects/af/54ae316f771ff692e299ffcd8bf2f06b413b59 +0 -0
  65. package/skills/cm-content-factory/.git 2/objects/b0/4cb8b0b00dad633e731c1472161419e738d674 +0 -0
  66. package/skills/cm-content-factory/.git 2/objects/b3/094abb0b9ed46419b269e4a4e36a459690e3b0 +0 -0
  67. package/skills/cm-content-factory/.git 2/objects/b9/435c5d4baac2cfc5c83009ddd27b46b60db5f1 +0 -0
  68. package/skills/cm-content-factory/.git 2/objects/ba/5da17dbaec5ec2dcfdfd126aead518d1171d5c +0 -0
  69. package/skills/cm-content-factory/.git 2/objects/c0/bf58703aa258ba5dd63083bebaec8f223d844c +0 -0
  70. package/skills/cm-content-factory/.git 2/objects/c4/701a34edf1fc1bad58ccc57bd03f9426acb59a +0 -0
  71. package/skills/cm-content-factory/.git 2/objects/c7/5ccce9a4e5cc74d9b3174550cf6d993ca43638 +0 -0
  72. package/skills/cm-content-factory/.git 2/objects/c7/710d59b5a35b0f1f0a0399386643a0bd94c929 +0 -0
  73. package/skills/cm-content-factory/.git 2/objects/d1/fe58237112e953e5fec52da22cf38e08be3df9 +5 -0
  74. package/skills/cm-content-factory/.git 2/objects/d2/2bbe9fd2f74c95bc5583e803f5e435f1e2cd86 +0 -0
  75. package/skills/cm-content-factory/.git 2/objects/d7/e72852ea2bff74581dbf247d400120086229f4 +0 -0
  76. package/skills/cm-content-factory/.git 2/objects/d8/d4c3b5553e4fd72807e1d4b49ef07d9ef3ac35 +0 -0
  77. package/skills/cm-content-factory/.git 2/objects/dc/75050c2876f6a02ae2a53a3c886f395b622977 +0 -0
  78. package/skills/cm-content-factory/.git 2/objects/ee/e8546f95acec500187c08a28a8b9ee02db0dec +0 -0
  79. package/skills/cm-content-factory/.git 2/objects/ef/263c059208b416c2146434f10cb2b9fabcba16 +0 -0
  80. package/skills/cm-content-factory/.git 2/objects/f3/ae597e84d9a59b88acd21c99bde2eaf686d785 +0 -0
  81. package/skills/cm-content-factory/.git 2/objects/f3/f6f5673c821d3d8e76fa267a9e882e7a5387ea +0 -0
  82. package/skills/cm-content-factory/.git 2/objects/f9/6e6d0ad02624dd11d5848594d056caef7a5e8b +0 -0
  83. package/skills/cm-content-factory/.git 2/objects/ff/278988fc1edf0db3abcf18de795f4cc0b4f3e1 +0 -0
  84. package/skills/cm-content-factory/.git 2/refs/heads/main +1 -0
  85. package/skills/cm-content-factory/.git 2/refs/remotes/origin/main +1 -0
  86. package/skills/cm-content-factory/.pytest_cache 2/v/cache/nodeids +76 -0
  87. package/skills/cm-content-factory/.pytest_cache 2/v/cache/stepwise +1 -0
  88. package/skills/cm-content-factory/AGENTS.md +61 -0
  89. package/skills/cm-content-factory/CLAUDE.md +63 -0
  90. package/skills/cm-content-factory/CURSOR.md +43 -0
  91. package/skills/cm-content-factory/Content Factory.zip +0 -0
  92. package/skills/cm-content-factory/cf +313 -0
  93. package/skills/cm-content-factory/config.schema.json +397 -0
  94. package/skills/cm-content-factory/dashboard/app.js +556 -0
  95. package/skills/cm-content-factory/dashboard/index.html +397 -0
  96. package/skills/cm-content-factory/dashboard/style.css +1211 -0
  97. package/skills/cm-content-factory/examples/01-real-estate.config.json +146 -0
  98. package/skills/cm-content-factory/examples/02-personal-finance.config.json +146 -0
  99. package/skills/cm-content-factory/examples/03-health-wellness.config.json +147 -0
  100. package/skills/cm-content-factory/examples/04-saas-software.config.json +147 -0
  101. package/skills/cm-content-factory/examples/05-legal-services.config.json +147 -0
  102. package/skills/cm-content-factory/examples/06-insurance.config.json +146 -0
  103. package/skills/cm-content-factory/examples/07-ecommerce-dropship.config.json +146 -0
  104. package/skills/cm-content-factory/examples/08-online-education.config.json +147 -0
  105. package/skills/cm-content-factory/examples/09-crypto-defi.config.json +147 -0
  106. package/skills/cm-content-factory/examples/10-beauty-skincare.config.json +147 -0
  107. package/skills/cm-content-factory/examples/11-home-services.config.json +146 -0
  108. package/skills/cm-content-factory/examples/12-dental-clinic.config.json +147 -0
  109. package/skills/cm-content-factory/examples/13-pet-care.config.json +147 -0
  110. package/skills/cm-content-factory/examples/14-travel-hospitality.config.json +147 -0
  111. package/skills/cm-content-factory/examples/15-ai-automation.config.json +147 -0
  112. package/skills/cm-content-factory/examples/16-wedding-events.config.json +147 -0
  113. package/skills/cm-content-factory/examples/17-fitness-coaching.config.json +148 -0
  114. package/skills/cm-content-factory/examples/18-cybersecurity.config.json +147 -0
  115. package/skills/cm-content-factory/examples/19-food-restaurant.config.json +148 -0
  116. package/skills/cm-content-factory/examples/20-solar-energy.config.json +147 -0
  117. package/skills/cm-content-factory/examples/fitness-blog.config.json +116 -0
  118. package/skills/cm-content-factory/examples/tech-blog.config.json +107 -0
  119. package/skills/cm-content-factory/extensions/EXTENSION_GUIDE.md +72 -0
  120. package/skills/cm-content-factory/extensions/hooks.py +126 -0
  121. package/skills/cm-content-factory/extensions/openclaw_adapter.py +132 -0
  122. package/skills/cm-content-factory/landing/index.html +680 -0
  123. package/skills/cm-content-factory/landing/script.js +101 -0
  124. package/skills/cm-content-factory/landing/style.css +1216 -0
  125. package/skills/cm-content-factory/landing/translations.js +508 -0
  126. package/skills/cm-content-factory/logs/events.jsonl +11 -0
  127. package/skills/cm-content-factory/profiles/_template.profile.json +231 -0
  128. package/skills/cm-content-factory/profiles/finance.profile.json +278 -0
  129. package/skills/cm-content-factory/profiles/legal.profile.json +263 -0
  130. package/skills/cm-content-factory/profiles/medical-research.profile.json +321 -0
  131. package/skills/cm-content-factory/profiles/technology.profile.json +275 -0
  132. package/skills/cm-content-factory/scripts/agent_dispatcher.py +266 -0
  133. package/skills/cm-content-factory/scripts/audit.py +106 -0
  134. package/skills/cm-content-factory/scripts/dashboard_server.py +225 -0
  135. package/skills/cm-content-factory/scripts/deploy.py +146 -0
  136. package/skills/cm-content-factory/scripts/extract.py +132 -0
  137. package/skills/cm-content-factory/scripts/landing_generator.py +459 -0
  138. package/skills/cm-content-factory/scripts/memory.py +521 -0
  139. package/skills/cm-content-factory/scripts/monetize.py +239 -0
  140. package/skills/cm-content-factory/scripts/pipeline.py +357 -0
  141. package/skills/cm-content-factory/scripts/plan.py +163 -0
  142. package/skills/cm-content-factory/scripts/publish.py +145 -0
  143. package/skills/cm-content-factory/scripts/research.py +337 -0
  144. package/skills/cm-content-factory/scripts/scaffold.py +464 -0
  145. package/skills/cm-content-factory/scripts/scoreboard.py +336 -0
  146. package/skills/cm-content-factory/scripts/seo.py +90 -0
  147. package/skills/cm-content-factory/scripts/state_manager.py +320 -0
  148. package/skills/cm-content-factory/scripts/token_manager.py +268 -0
  149. package/skills/cm-content-factory/scripts/validate.py +221 -0
  150. package/skills/cm-content-factory/scripts/wizard.py +329 -0
  151. package/skills/cm-content-factory/scripts/write.py +93 -0
  152. package/skills/cm-content-factory/sites/docs-site/src/assets/houston.webp +0 -0
  153. package/skills/cm-content-factory/sites/docs-site/src/content/docs/architecture.md +90 -0
  154. package/skills/cm-content-factory/sites/docs-site/src/content/docs/data-flow.md +54 -0
  155. package/skills/cm-content-factory/sites/docs-site/src/content/docs/deployment.md +38 -0
  156. package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/index.md +65 -0
  157. package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/lc-content-lifecycle.md +48 -0
  158. package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/seq-write-mode.md +39 -0
  159. package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/uj-first-batch.md +42 -0
  160. package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/wf-content-pipeline.md +51 -0
  161. package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/wf-learning-cycle.md +52 -0
  162. package/skills/cm-content-factory/sites/docs-site/src/content/docs/getting-started/configuration.md +86 -0
  163. package/skills/cm-content-factory/sites/docs-site/src/content/docs/getting-started/installation.md +80 -0
  164. package/skills/cm-content-factory/sites/docs-site/src/content/docs/getting-started/intro.md +58 -0
  165. package/skills/cm-content-factory/sites/docs-site/src/content/docs/index.md +102 -0
  166. package/skills/cm-content-factory/sites/docs-site/src/content/docs/jtbd/index.md +45 -0
  167. package/skills/cm-content-factory/sites/docs-site/src/content/docs/jtbd/optimize-seo.md +29 -0
  168. package/skills/cm-content-factory/sites/docs-site/src/content/docs/jtbd/scale-content-production.md +55 -0
  169. package/skills/cm-content-factory/sites/docs-site/src/content/docs/jtbd/standardize-quality.md +29 -0
  170. package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/buyer-cmo-huong.md +41 -0
  171. package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/buyer-content-lead-khoa.md +40 -0
  172. package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/index.md +56 -0
  173. package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/user-content-manager-lan.md +46 -0
  174. package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/user-seo-minh.md +45 -0
  175. package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/user-writer-tu.md +45 -0
  176. package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/content-pipeline.md +108 -0
  177. package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/index.md +22 -0
  178. package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/memory-system.md +52 -0
  179. package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/seo-optimization.md +58 -0
  180. package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/troubleshooting-guide.md +92 -0
  181. package/skills/cm-content-factory/sites/docs-site/src/styles/custom.css +575 -0
  182. package/skills/cm-content-factory/tests/conftest.py +66 -0
  183. package/skills/cm-content-factory/tests/test_agent_dispatcher.py +125 -0
  184. package/skills/cm-content-factory/tests/test_memory.py +128 -0
  185. package/skills/cm-content-factory/tests/test_pipeline.py +107 -0
  186. package/skills/cm-content-factory/tests/test_research.py +56 -0
  187. package/skills/cm-content-factory/tests/test_state_manager.py +131 -0
  188. package/skills/cm-content-factory/tests/test_token_manager.py +110 -0
  189. package/skills/cm-content-factory/tests/test_wizard.py +121 -0
  190. package/skills/cm-continuity/SKILL.md +7 -0
  191. package/skills/cm-cro-methodology/SKILL.md +290 -0
  192. package/skills/cm-dashboard/SKILL.md +7 -525
  193. package/skills/cm-debugging/SKILL.md +7 -116
  194. package/skills/cm-deep-search/SKILL.md +5 -1
  195. package/skills/cm-dockit/README.md +6 -15
  196. package/skills/cm-dockit/SKILL.md +20 -37
  197. package/skills/cm-execution/SKILL.md +6 -1
  198. package/skills/cm-frappe-agent/SKILL.md +134 -0
  199. package/skills/cm-frappe-agent/agents/doctype-architect.md +596 -0
  200. package/skills/cm-frappe-agent/agents/erpnext-customizer.md +643 -0
  201. package/skills/cm-frappe-agent/agents/frappe-backend.md +814 -0
  202. package/skills/cm-frappe-agent/agents/frappe-custom-frontend.md +557 -0
  203. package/skills/cm-frappe-agent/agents/frappe-debugger.md +625 -0
  204. package/skills/cm-frappe-agent/agents/frappe-fixer.md +275 -0
  205. package/skills/cm-frappe-agent/agents/frappe-frontend.md +660 -0
  206. package/skills/cm-frappe-agent/agents/frappe-installer.md +158 -0
  207. package/skills/cm-frappe-agent/agents/frappe-performance.md +307 -0
  208. package/skills/cm-frappe-agent/agents/frappe-planner.md +419 -0
  209. package/skills/cm-frappe-agent/agents/frappe-remote-ops.md +153 -0
  210. package/skills/cm-frappe-agent/agents/github-workflow.md +286 -0
  211. package/skills/cm-frappe-agent/commands/frappe-app.md +351 -0
  212. package/skills/cm-frappe-agent/commands/frappe-backend.md +162 -0
  213. package/skills/cm-frappe-agent/commands/frappe-bench.md +254 -0
  214. package/skills/cm-frappe-agent/commands/frappe-debug.md +263 -0
  215. package/skills/cm-frappe-agent/commands/frappe-doctype-create.md +272 -0
  216. package/skills/cm-frappe-agent/commands/frappe-doctype-field.md +310 -0
  217. package/skills/cm-frappe-agent/commands/frappe-erpnext.md +210 -0
  218. package/skills/cm-frappe-agent/commands/frappe-fix.md +59 -0
  219. package/skills/cm-frappe-agent/commands/frappe-frontend.md +210 -0
  220. package/skills/cm-frappe-agent/commands/frappe-fullstack.md +243 -0
  221. package/skills/cm-frappe-agent/commands/frappe-github.md +57 -0
  222. package/skills/cm-frappe-agent/commands/frappe-install.md +52 -0
  223. package/skills/cm-frappe-agent/commands/frappe-plan.md +442 -0
  224. package/skills/cm-frappe-agent/commands/frappe-remote.md +58 -0
  225. package/skills/cm-frappe-agent/commands/frappe-test.md +356 -0
  226. package/skills/cm-frappe-agent/docs/README.md +51 -0
  227. package/skills/cm-frappe-agent/docs/agents-catalog.md +113 -0
  228. package/skills/cm-frappe-agent/docs/architecture.md +149 -0
  229. package/skills/cm-frappe-agent/docs/commands-catalog.md +82 -0
  230. package/skills/cm-frappe-agent/docs/resources-catalog.md +66 -0
  231. package/skills/cm-frappe-agent/docs/sitemap-urls.txt +52 -0
  232. package/skills/cm-frappe-agent/docs/sitemap.md +81 -0
  233. package/skills/cm-frappe-agent/docs/sop/user-guide.md +178 -0
  234. package/skills/cm-frappe-agent/docs/sop/vibe-coding-guide.md +122 -0
  235. package/skills/cm-frappe-agent/resources/7-layer-architecture.md +985 -0
  236. package/skills/cm-frappe-agent/resources/bench_commands.md +73 -0
  237. package/skills/cm-frappe-agent/resources/code-patterns-guide.md +948 -0
  238. package/skills/cm-frappe-agent/resources/common_pitfalls.md +266 -0
  239. package/skills/cm-frappe-agent/resources/doctype-registry.md +158 -0
  240. package/skills/cm-frappe-agent/resources/installation-guide.md +289 -0
  241. package/skills/cm-frappe-agent/resources/rest-api-patterns.md +182 -0
  242. package/skills/cm-frappe-agent/resources/scaffold_checklist.md +82 -0
  243. package/skills/cm-frappe-agent/resources/upgrade_patterns.md +113 -0
  244. package/skills/cm-frappe-agent/resources/web-form-patterns.md +252 -0
  245. package/skills/cm-frappe-agent/skills/bench-commands/SKILL.md +621 -0
  246. package/skills/cm-frappe-agent/skills/client-scripts/SKILL.md +642 -0
  247. package/skills/cm-frappe-agent/skills/doctype-patterns/SKILL.md +576 -0
  248. package/skills/cm-frappe-agent/skills/frappe-api/SKILL.md +740 -0
  249. package/skills/cm-frappe-agent/skills/remote-operations/SKILL.md +47 -0
  250. package/skills/cm-frappe-agent/skills/server-scripts/SKILL.md +608 -0
  251. package/skills/cm-frappe-agent/skills/web-forms/SKILL.md +46 -0
  252. package/skills/cm-git-worktrees/SKILL.md +0 -7
  253. package/skills/cm-google-form/SKILL.md +266 -0
  254. package/skills/cm-google-form/templates/apps-script.js +55 -0
  255. package/skills/cm-google-form/templates/form-markup.html +110 -0
  256. package/skills/cm-google-form/templates/form-submit.js +201 -0
  257. package/skills/cm-google-form/templates/toast.css +152 -0
  258. package/skills/cm-growth-hacking/SKILL.md +293 -0
  259. package/skills/cm-growth-hacking/bottom-sheet-engine.md +261 -0
  260. package/skills/cm-growth-hacking/calendar-integration.md +264 -0
  261. package/skills/cm-growth-hacking/references/engagement-patterns.md +346 -0
  262. package/skills/cm-growth-hacking/templates/bottom-sheet.css +528 -0
  263. package/skills/cm-growth-hacking/templates/bottom-sheet.js +269 -0
  264. package/skills/cm-growth-hacking/templates/calendar-cta.js +213 -0
  265. package/skills/cm-growth-hacking/templates/tracking-events.js +211 -0
  266. package/skills/cm-growth-hacking/templates/trigger-manager.js +254 -0
  267. package/skills/cm-growth-hacking/tracking-events.md +246 -0
  268. package/skills/cm-growth-hacking/trigger-system.md +342 -0
  269. package/skills/cm-how-it-work/SKILL.md +20 -4
  270. package/skills/cm-identity-guard/SKILL.md +0 -11
  271. package/skills/cm-jtbd/SKILL.md +1 -1
  272. package/skills/cm-notebooklm/SKILL.md +172 -0
  273. package/skills/cm-notebooklm/references/command_reference.md +94 -0
  274. package/skills/cm-notebooklm/references/workflows.md +60 -0
  275. package/skills/cm-notebooklm/resources/knowledge_sources.md +106 -0
  276. package/skills/cm-notebooklm/scripts/brain-sync.sh +453 -0
  277. package/skills/cm-notebooklm/scripts/graduate_wisdom.py +101 -0
  278. package/skills/cm-planning/SKILL.md +39 -52
  279. package/skills/cm-project-bootstrap/SKILL.md +1307 -99
  280. package/skills/cm-quality-gate/SKILL.md +13 -106
  281. package/skills/cm-reactor/SKILL.md +274 -0
  282. package/skills/cm-safe-deploy/SKILL.md +415 -52
  283. package/skills/cm-safe-i18n/SKILL.md +1 -22
  284. package/skills/cm-secret-shield/SKILL.md +2 -2
  285. package/skills/cm-security-gate/SKILL.md +114 -0
  286. package/skills/cm-skill-chain/SKILL.md +2 -2
  287. package/skills/cm-skill-index/SKILL.md +9 -6
  288. package/skills/cm-skill-mastery/SKILL.md +2 -15
  289. package/skills/cm-start/SKILL.md +9 -0
  290. package/skills/cm-tdd/SKILL.md +8 -41
  291. package/skills/cm-ui-preview/SKILL.md +35 -173
  292. package/skills/cm-ux-master/FEATURES-v4.md +305 -0
  293. package/skills/cm-ux-master/README-ru.md +135 -0
  294. package/skills/cm-ux-master/README-vi.md +135 -0
  295. package/skills/cm-ux-master/README-zh.md +135 -0
  296. package/skills/cm-ux-master/README.md +489 -0
  297. package/skills/cm-ux-master/SKILL.md +773 -62
  298. package/skills/cm-ux-master/cli/README.md +180 -0
  299. package/skills/cm-ux-master/cli/pyproject.toml +106 -0
  300. package/skills/cm-ux-master/cli/requirements.txt +21 -0
  301. package/skills/cm-ux-master/cli/templates/base/skill-core.md +262 -0
  302. package/skills/cm-ux-master/cli/templates/platforms/claude.yaml +21 -0
  303. package/skills/cm-ux-master/cli/templates/platforms/cursor.yaml +21 -0
  304. package/skills/cm-ux-master/cli/templates/platforms/figma.yaml +24 -0
  305. package/skills/cm-ux-master/cli/templates/platforms/vscode-mcp.yaml +28 -0
  306. package/skills/cm-ux-master/cli/templates/platforms/windsurf.yaml +21 -0
  307. package/skills/cm-ux-master/cli/uxmaster/__init__.py +10 -0
  308. package/skills/cm-ux-master/cli/uxmaster/__main__.py +19 -0
  309. package/skills/cm-ux-master/cli/uxmaster/cli.py +349 -0
  310. package/skills/cm-ux-master/cli/uxmaster/commands/__init__.py +8 -0
  311. package/skills/cm-ux-master/cli/uxmaster/commands/extract.py +18 -0
  312. package/skills/cm-ux-master/cli/uxmaster/commands/init.py +58 -0
  313. package/skills/cm-ux-master/cli/uxmaster/commands/mcp.py +194 -0
  314. package/skills/cm-ux-master/cli/uxmaster/commands/search.py +23 -0
  315. package/skills/cm-ux-master/cli/uxmaster/commands/validate.py +270 -0
  316. package/skills/cm-ux-master/cli/uxmaster/search_engine.py +532 -0
  317. package/skills/cm-ux-master/cli/uxmaster/template_engine.py +458 -0
  318. package/skills/cm-ux-master/cli/uxmaster/utils/__init__.py +9 -0
  319. package/skills/cm-ux-master/cli/uxmaster/utils/console.py +42 -0
  320. package/skills/cm-ux-master/cli/uxmaster/utils/detect.py +83 -0
  321. package/skills/cm-ux-master/data/accessibility-advanced.csv +26 -0
  322. package/skills/cm-ux-master/data/animation.csv +31 -0
  323. package/skills/cm-ux-master/data/charts.csv +26 -0
  324. package/skills/cm-ux-master/data/colors.csv +97 -0
  325. package/skills/cm-ux-master/data/design-tests.csv +37 -0
  326. package/skills/cm-ux-master/data/devices.csv +21 -0
  327. package/skills/cm-ux-master/data/icons.csv +101 -0
  328. package/skills/cm-ux-master/data/landing.csv +31 -0
  329. package/skills/cm-ux-master/data/products.csv +97 -0
  330. package/skills/cm-ux-master/data/react-performance.csv +45 -0
  331. package/skills/cm-ux-master/data/responsive.csv +26 -0
  332. package/skills/cm-ux-master/data/semi-tokens.csv +52 -0
  333. package/skills/cm-ux-master/data/stacks/angular.csv +34 -0
  334. package/skills/cm-ux-master/data/stacks/astro.csv +54 -0
  335. package/skills/cm-ux-master/data/stacks/electron.csv +32 -0
  336. package/skills/cm-ux-master/data/stacks/flutter.csv +53 -0
  337. package/skills/cm-ux-master/data/stacks/html-tailwind.csv +56 -0
  338. package/skills/cm-ux-master/data/stacks/htmx.csv +28 -0
  339. package/skills/cm-ux-master/data/stacks/jetpack-compose.csv +53 -0
  340. package/skills/cm-ux-master/data/stacks/nextjs.csv +53 -0
  341. package/skills/cm-ux-master/data/stacks/nuxt-ui.csv +51 -0
  342. package/skills/cm-ux-master/data/stacks/nuxtjs.csv +59 -0
  343. package/skills/cm-ux-master/data/stacks/react-native.csv +52 -0
  344. package/skills/cm-ux-master/data/stacks/react.csv +54 -0
  345. package/skills/cm-ux-master/data/stacks/shadcn.csv +61 -0
  346. package/skills/cm-ux-master/data/stacks/svelte.csv +54 -0
  347. package/skills/cm-ux-master/data/stacks/swiftui.csv +51 -0
  348. package/skills/cm-ux-master/data/stacks/tauri.csv +29 -0
  349. package/skills/cm-ux-master/data/stacks/vue.csv +50 -0
  350. package/skills/cm-ux-master/data/styles.csv +68 -0
  351. package/skills/cm-ux-master/data/typography.csv +58 -0
  352. package/skills/cm-ux-master/data/ui-reasoning.csv +101 -0
  353. package/skills/cm-ux-master/data/ux-guidelines.csv +100 -0
  354. package/skills/cm-ux-master/data/ux-laws.csv +49 -0
  355. package/skills/cm-ux-master/data/web-interface.csv +31 -0
  356. package/skills/cm-ux-master/docs/LANDING-PAGE.html +377 -0
  357. package/skills/cm-ux-master/docs/README.md +108 -0
  358. package/skills/cm-ux-master/docs/css/styles.css +573 -0
  359. package/skills/cm-ux-master/docs/examples/demo-script.md +319 -0
  360. package/skills/cm-ux-master/docs/guides/for-designers.md +692 -0
  361. package/skills/cm-ux-master/docs/guides/for-developers.md +778 -0
  362. package/skills/cm-ux-master/docs/guides/for-product-managers.md +693 -0
  363. package/skills/cm-ux-master/docs/guides/react-guide-vi.md +50 -0
  364. package/skills/cm-ux-master/docs/index.html +1062 -0
  365. package/skills/cm-ux-master/docs/js/i18n.js +84 -0
  366. package/skills/cm-ux-master/docs/js/lang/de.js +145 -0
  367. package/skills/cm-ux-master/docs/js/lang/en.js +145 -0
  368. package/skills/cm-ux-master/docs/js/lang/fr.js +145 -0
  369. package/skills/cm-ux-master/docs/js/lang/hi.js +145 -0
  370. package/skills/cm-ux-master/docs/js/lang/id.js +145 -0
  371. package/skills/cm-ux-master/docs/js/lang/ja.js +145 -0
  372. package/skills/cm-ux-master/docs/js/lang/ko.js +145 -0
  373. package/skills/cm-ux-master/docs/js/lang/ru.js +145 -0
  374. package/skills/cm-ux-master/docs/js/lang/vi.js +145 -0
  375. package/skills/cm-ux-master/docs/js/lang/zh.js +145 -0
  376. package/skills/cm-ux-master/docs/js/main.js +117 -0
  377. package/skills/cm-ux-master/docs/plan/PHASE1-COMPLETION.md +217 -0
  378. package/skills/cm-ux-master/docs/plan/PHASE2-COMPLETION.md +199 -0
  379. package/skills/cm-ux-master/docs/plan/PHASE2-ENHANCED-COMPLETION.md +352 -0
  380. package/skills/cm-ux-master/docs/plan/PHASE3-VALIDATION-COMPLETION.md +499 -0
  381. package/skills/cm-ux-master/docs/plan/PHASE4-TESTING-POLISH-COMPLETION.md +483 -0
  382. package/skills/cm-ux-master/docs/plan/UXM-2.0-ROADMAP.md +681 -0
  383. package/skills/cm-ux-master/docs/plan/WOW-PITCH.md +410 -0
  384. package/skills/cm-ux-master/docs/technical/api-reference.md +824 -0
  385. package/skills/cm-ux-master/docs/technical/harvester-v4.md +328 -0
  386. package/skills/cm-ux-master/docs/technical/how-it-works.md +1128 -0
  387. package/skills/cm-ux-master/docs/tutorials/quickstart.md +339 -0
  388. package/skills/cm-ux-master/docs/tutorials/tutorials.md +939 -0
  389. package/skills/cm-ux-master/docs/tutorials/user-guide.md +716 -0
  390. package/skills/cm-ux-master/examples/README.md +63 -0
  391. package/skills/cm-ux-master/mcp/__init__.py +3 -0
  392. package/skills/cm-ux-master/mcp/integrations/__init__.py +11 -0
  393. package/skills/cm-ux-master/mcp/integrations/figma/__init__.py +6 -0
  394. package/skills/cm-ux-master/mcp/integrations/figma/client.py +293 -0
  395. package/skills/cm-ux-master/mcp/integrations/figma/plugin/code.js +561 -0
  396. package/skills/cm-ux-master/mcp/integrations/figma/plugin/ui.html +334 -0
  397. package/skills/cm-ux-master/mcp/integrations/stitch/__init__.py +5 -0
  398. package/skills/cm-ux-master/mcp/integrations/stitch/client.py +410 -0
  399. package/skills/cm-ux-master/mcp/integrations/vscode/package.json +167 -0
  400. package/skills/cm-ux-master/mcp/integrations/vscode/src/extension.ts +81 -0
  401. package/skills/cm-ux-master/mcp/mcp-config.json +274 -0
  402. package/skills/cm-ux-master/mcp/server.py +771 -0
  403. package/skills/cm-ux-master/mcp/tools/__init__.py +13 -0
  404. package/skills/cm-ux-master/mcp-server/server.py +595 -0
  405. package/skills/cm-ux-master/output/fila/FilaDashboard.tsx +47 -0
  406. package/skills/cm-ux-master/output/fila/components/badge/component.tsx +35 -0
  407. package/skills/cm-ux-master/output/fila/components/badge/index.ts +1 -0
  408. package/skills/cm-ux-master/output/fila/components/button/component.tsx +53 -0
  409. package/skills/cm-ux-master/output/fila/components/button/index.ts +1 -0
  410. package/skills/cm-ux-master/output/fila/components/card/component.tsx +35 -0
  411. package/skills/cm-ux-master/output/fila/components/card/index.ts +1 -0
  412. package/skills/cm-ux-master/output/fila/components/input/component.tsx +41 -0
  413. package/skills/cm-ux-master/output/fila/components/input/index.ts +1 -0
  414. package/skills/cm-ux-master/output/fila/design-system.css +151 -0
  415. package/skills/cm-ux-master/output/fila/design-system.html +1596 -0
  416. package/skills/cm-ux-master/output/fila/design-system.json +168 -0
  417. package/skills/cm-ux-master/output/fila/figma-tokens.json +523 -0
  418. package/skills/cm-ux-master/output/fila/harvest-v4-raw.json +406 -0
  419. package/skills/cm-ux-master/output/fila/semi-theme-override.css +95 -0
  420. package/skills/cm-ux-master/output/haravan/HaravanDashboard.tsx +103 -0
  421. package/skills/cm-ux-master/output/haravan/design-system-v3-live.html +2716 -0
  422. package/skills/cm-ux-master/output/haravan/design-system-v3.html +1770 -0
  423. package/skills/cm-ux-master/output/haravan/design-system.html +914 -0
  424. package/skills/cm-ux-master/output/haravan/figma-tokens.json +84 -0
  425. package/skills/cm-ux-master/output/haravan/haravan-harvest.json +33 -0
  426. package/skills/cm-ux-master/output/haravan/harvest-v3-raw.json +167 -0
  427. package/skills/cm-ux-master/output/haravan/semi-theme-override.css +39 -0
  428. package/skills/cm-ux-master/references/audit-template.md +257 -0
  429. package/skills/cm-ux-master/references/cultural-ux.md +346 -0
  430. package/skills/cm-ux-master/references/dark-patterns.md +362 -0
  431. package/skills/cm-ux-master/references/heuristic-conflicts.md +296 -0
  432. package/skills/cm-ux-master/references/krug-principles.md +289 -0
  433. package/skills/cm-ux-master/references/nielsen-heuristics.md +360 -0
  434. package/skills/cm-ux-master/references/wcag-checklist.md +306 -0
  435. package/skills/cm-ux-master/scripts/component_generator.py +631 -0
  436. package/skills/cm-ux-master/scripts/core.py +305 -0
  437. package/skills/cm-ux-master/scripts/demo_validation.py +452 -0
  438. package/skills/cm-ux-master/scripts/design_doc_generator.py +1325 -0
  439. package/skills/cm-ux-master/scripts/design_system.py +1141 -0
  440. package/skills/cm-ux-master/scripts/design_system_indexer.py +889 -0
  441. package/skills/cm-ux-master/scripts/extract_i18n.py +251 -0
  442. package/skills/cm-ux-master/scripts/extractor.py +1437 -0
  443. package/skills/cm-ux-master/scripts/figma_bridge.py +406 -0
  444. package/skills/cm-ux-master/scripts/generate.py +147 -0
  445. package/skills/cm-ux-master/scripts/harvest_session.py +207 -0
  446. package/skills/cm-ux-master/scripts/harvester.js +240 -0
  447. package/skills/cm-ux-master/scripts/harvester_browser.py +717 -0
  448. package/skills/cm-ux-master/scripts/harvester_cli.py +431 -0
  449. package/skills/cm-ux-master/scripts/harvester_v1.js +275 -0
  450. package/skills/cm-ux-master/scripts/harvester_v3.js +620 -0
  451. package/skills/cm-ux-master/scripts/harvester_v4.js +1003 -0
  452. package/skills/cm-ux-master/scripts/install.py +528 -0
  453. package/skills/cm-ux-master/scripts/license.py +81 -0
  454. package/skills/cm-ux-master/scripts/media/qrpayment.png +0 -0
  455. package/skills/cm-ux-master/scripts/pro_stubs.py +120 -0
  456. package/skills/cm-ux-master/scripts/project_registry.py +217 -0
  457. package/skills/cm-ux-master/scripts/search.py +114 -0
  458. package/skills/cm-ux-master/scripts/semi_mcp_bridge.py +425 -0
  459. package/skills/cm-ux-master/scripts/stitch_integration.py +583 -0
  460. package/skills/cm-ux-master/scripts/test_harvester_v4.py +335 -0
  461. package/skills/cm-ux-master/scripts/token_mapper.py +626 -0
  462. package/skills/cm-ux-master/scripts/validation_engine.py +1571 -0
  463. package/skills/cm-ux-master/scripts/wizard.py +653 -0
  464. package/skills/cm-ux-master/setup.py +93 -0
  465. package/skills/cm-ux-master/templates/base/flutter-widget.dart +69 -0
  466. package/skills/cm-ux-master/templates/base/html-page.html +152 -0
  467. package/skills/cm-ux-master/templates/base/react-component.tsx +47 -0
  468. package/skills/cm-ux-master/templates/base/swiftui-view.swift +62 -0
  469. package/skills/cm-ux-master/templates/quick-start.sh +176 -0
  470. package/skills/cm-ux-master/tests/automation/batch-validate.sh +250 -0
  471. package/skills/cm-ux-master/tests/automation/generate-test-projects.sh +561 -0
  472. package/skills/cm-ux-master/tests/automation/run-all-tests.sh +315 -0
  473. package/skills/cm-ux-master/tests/test_design_doc.py +145 -0
  474. package/skills/cm-ux-master/tests/test_devices.py +74 -0
  475. package/skills/cm-ux-master/tests/test_generator.py +116 -0
  476. package/skills/cm-ux-master/tests/test_harvest_session.py +131 -0
  477. package/skills/cm-ux-master/tests/test_harvester.py +127 -0
  478. package/skills/cm-ux-master/tests/test_harvester_v3.py +324 -0
  479. package/skills/cm-ux-master/tests/test_mcp_server.py +496 -0
  480. package/skills/cm-ux-master/tests/test_new_domains.py +108 -0
  481. package/skills/cm-ux-master/tests/test_new_stacks.py +103 -0
  482. package/skills/cm-ux-master/tests/test_project_registry.py +146 -0
  483. package/skills/cm-ux-master/tests/test_semi_mcp_bridge.py +207 -0
  484. package/skills/cm-ux-master/tests/test_token_mapper.py +247 -0
  485. package/skills/cm-ux-master/tests/test_validation_engine.py +617 -0
  486. package/skills/config.schema.json +397 -0
  487. package/skills/frappe-app-builder.zip +0 -0
  488. package/skills/jobs-to-be-done/SKILL.md +266 -0
  489. package/skills/jobs-to-be-done/references/case-studies.md +154 -0
  490. package/skills/jobs-to-be-done/references/competitive-strategy.md +280 -0
  491. package/skills/jobs-to-be-done/references/diagnostics.md +158 -0
  492. package/skills/jobs-to-be-done/references/innovation-process.md +392 -0
  493. package/skills/jobs-to-be-done/references/organizational-change.md +328 -0
  494. package/skills/marketplace-report-crawler/SKILL.md +176 -0
  495. package/skills/marketplace-report-crawler/config/accounts.json +41 -0
  496. package/skills/marketplace-report-crawler/config/report-types.json +422 -0
  497. package/skills/marketplace-report-crawler/config/sessions.json +3 -0
  498. package/skills/marketplace-report-crawler/scripts/ab-wrapper.sh +102 -0
  499. package/skills/marketplace-report-crawler/scripts/browser-actions/lazada/lazada-actions.js +114 -0
  500. package/skills/marketplace-report-crawler/scripts/browser-actions/shopee/shopee-actions.js +94 -0
  501. package/skills/marketplace-report-crawler/scripts/browser-actions/tiktok/tiktok-actions.js +272 -0
  502. package/skills/marketplace-report-crawler/scripts/crawl-runner.js +281 -0
  503. package/skills/marketplace-report-crawler/scripts/session-check.sh +72 -0
  504. package/skills/marketplace-report-crawler/scripts/session-manager.sh +349 -0
  505. package/skills/marketplace-report-crawler/scripts/setup-folders.sh +83 -0
  506. package/skills/medical-research/SKILL.md +194 -0
  507. package/skills/medical-research/scripts/evidence_checker.py +288 -0
  508. package/skills/mom-test/SKILL.md +267 -0
  509. package/skills/mom-test/references/avoiding-bad-data.md +221 -0
  510. package/skills/mom-test/references/case-studies.md +306 -0
  511. package/skills/mom-test/references/commitment-advancement.md +219 -0
  512. package/skills/mom-test/references/finding-conversations.md +251 -0
  513. package/skills/mom-test/references/processing-learning.md +256 -0
  514. package/skills/mom-test/references/question-patterns.md +198 -0
  515. package/skills/pandasai-analytics/SKILL.md +251 -0
  516. package/skills/release-it/SKILL.md +235 -0
  517. package/skills/release-it/references/anti-patterns.md +279 -0
  518. package/skills/release-it/references/capacity-planning.md +285 -0
  519. package/skills/release-it/references/chaos-engineering.md +325 -0
  520. package/skills/release-it/references/deployment-strategies.md +331 -0
  521. package/skills/release-it/references/observability.md +301 -0
  522. package/skills/release-it/references/stability-patterns.md +355 -0
  523. package/skills/scripts/sync-ide-skills.sh +61 -0
  524. package/skills/skill-creator-ultra/.agents/workflows/skill-audit.md +37 -0
  525. package/skills/skill-creator-ultra/.agents/workflows/skill-compare.md +34 -0
  526. package/skills/skill-creator-ultra/.agents/workflows/skill-export.md +51 -0
  527. package/skills/skill-creator-ultra/.agents/workflows/skill-generate.md +39 -0
  528. package/skills/skill-creator-ultra/.agents/workflows/skill-scaffold.md +52 -0
  529. package/skills/skill-creator-ultra/.agents/workflows/skill-simulate.md +25 -0
  530. package/skills/skill-creator-ultra/.agents/workflows/skill-stats.md +31 -0
  531. package/skills/skill-creator-ultra/.agents/workflows/skill-validate.md +25 -0
  532. package/skills/skill-creator-ultra/README.md +1242 -0
  533. package/skills/skill-creator-ultra/SKILL.md +388 -0
  534. package/skills/skill-creator-ultra/agents/analyzer.md +274 -0
  535. package/skills/skill-creator-ultra/agents/comparator.md +202 -0
  536. package/skills/skill-creator-ultra/agents/grader.md +223 -0
  537. package/skills/skill-creator-ultra/assets/eval_review.html +146 -0
  538. package/skills/skill-creator-ultra/eval-viewer/generate_review.py +471 -0
  539. package/skills/skill-creator-ultra/eval-viewer/viewer.html +1325 -0
  540. package/skills/skill-creator-ultra/examples/example_anthropic_frontend.md +109 -0
  541. package/skills/skill-creator-ultra/examples/example_anthropic_pdf.md +116 -0
  542. package/skills/skill-creator-ultra/examples/example_api_docs.md +189 -0
  543. package/skills/skill-creator-ultra/examples/example_db_migration.md +253 -0
  544. package/skills/skill-creator-ultra/examples/example_git_commit.md +111 -0
  545. package/skills/skill-creator-ultra/install.ps1 +289 -0
  546. package/skills/skill-creator-ultra/install.sh +313 -0
  547. package/skills/skill-creator-ultra/phases/phase1_interview.md +202 -0
  548. package/skills/skill-creator-ultra/phases/phase2_extract.md +55 -0
  549. package/skills/skill-creator-ultra/phases/phase3_detect.md +57 -0
  550. package/skills/skill-creator-ultra/phases/phase4_generate.md +543 -0
  551. package/skills/skill-creator-ultra/phases/phase5_test.md +319 -0
  552. package/skills/skill-creator-ultra/phases/phase6_eval.md +301 -0
  553. package/skills/skill-creator-ultra/phases/phase7_iterate.md +103 -0
  554. package/skills/skill-creator-ultra/phases/phase8_optimize.md +113 -0
  555. package/skills/skill-creator-ultra/resources/advanced_patterns.md +499 -0
  556. package/skills/skill-creator-ultra/resources/anti_patterns.md +376 -0
  557. package/skills/skill-creator-ultra/resources/blueprints.md +498 -0
  558. package/skills/skill-creator-ultra/resources/checklist.md +243 -0
  559. package/skills/skill-creator-ultra/resources/composition_cookbook.md +291 -0
  560. package/skills/skill-creator-ultra/resources/description_optimization.md +90 -0
  561. package/skills/skill-creator-ultra/resources/eval_guide.md +133 -0
  562. package/skills/skill-creator-ultra/resources/industry_questions.md +189 -0
  563. package/skills/skill-creator-ultra/resources/interview_questions.md +200 -0
  564. package/skills/skill-creator-ultra/resources/pattern_detection.md +200 -0
  565. package/skills/skill-creator-ultra/resources/prompt_engineering.md +531 -0
  566. package/skills/skill-creator-ultra/resources/schemas.md +430 -0
  567. package/skills/skill-creator-ultra/resources/script_integration.md +593 -0
  568. package/skills/skill-creator-ultra/resources/scripts_guide.md +339 -0
  569. package/skills/skill-creator-ultra/resources/skill_template.md +124 -0
  570. package/skills/skill-creator-ultra/resources/skill_writing_guide.md +634 -0
  571. package/skills/skill-creator-ultra/resources/versioning_guide.md +193 -0
  572. package/skills/skill-creator-ultra/scripts/ci_eval.py +200 -0
  573. package/skills/skill-creator-ultra/scripts/package_skill.py +165 -0
  574. package/skills/skill-creator-ultra/scripts/simulate_skill.py +398 -0
  575. package/skills/skill-creator-ultra/scripts/skill_audit.py +611 -0
  576. package/skills/skill-creator-ultra/scripts/skill_compare.py +265 -0
  577. package/skills/skill-creator-ultra/scripts/skill_export.py +334 -0
  578. package/skills/skill-creator-ultra/scripts/skill_scaffold.py +403 -0
  579. package/skills/skill-creator-ultra/scripts/skill_stats.py +339 -0
  580. package/skills/skill-creator-ultra/scripts/validate_skill.py +411 -0
  581. package/skills/tailwind-mastery/SKILL.md +229 -0
  582. package/skills/vercel-react-best-practices/AGENTS.md +3373 -0
  583. package/skills/vercel-react-best-practices/README.md +123 -0
  584. package/skills/vercel-react-best-practices/SKILL.md +143 -0
  585. package/skills/vercel-react-best-practices/rules/_sections.md +46 -0
  586. package/skills/vercel-react-best-practices/rules/_template.md +28 -0
  587. package/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +55 -0
  588. package/skills/vercel-react-best-practices/rules/advanced-init-once.md +42 -0
  589. package/skills/vercel-react-best-practices/rules/advanced-use-latest.md +39 -0
  590. package/skills/vercel-react-best-practices/rules/async-api-routes.md +38 -0
  591. package/skills/vercel-react-best-practices/rules/async-defer-await.md +80 -0
  592. package/skills/vercel-react-best-practices/rules/async-dependencies.md +51 -0
  593. package/skills/vercel-react-best-practices/rules/async-parallel.md +28 -0
  594. package/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +99 -0
  595. package/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +59 -0
  596. package/skills/vercel-react-best-practices/rules/bundle-conditional.md +31 -0
  597. package/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +49 -0
  598. package/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +35 -0
  599. package/skills/vercel-react-best-practices/rules/bundle-preload.md +50 -0
  600. package/skills/vercel-react-best-practices/rules/client-event-listeners.md +74 -0
  601. package/skills/vercel-react-best-practices/rules/client-localstorage-schema.md +71 -0
  602. package/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +48 -0
  603. package/skills/vercel-react-best-practices/rules/client-swr-dedup.md +56 -0
  604. package/skills/vercel-react-best-practices/rules/js-batch-dom-css.md +107 -0
  605. package/skills/vercel-react-best-practices/rules/js-cache-function-results.md +80 -0
  606. package/skills/vercel-react-best-practices/rules/js-cache-property-access.md +28 -0
  607. package/skills/vercel-react-best-practices/rules/js-cache-storage.md +70 -0
  608. package/skills/vercel-react-best-practices/rules/js-combine-iterations.md +32 -0
  609. package/skills/vercel-react-best-practices/rules/js-early-exit.md +50 -0
  610. package/skills/vercel-react-best-practices/rules/js-flatmap-filter.md +60 -0
  611. package/skills/vercel-react-best-practices/rules/js-hoist-regexp.md +45 -0
  612. package/skills/vercel-react-best-practices/rules/js-index-maps.md +37 -0
  613. package/skills/vercel-react-best-practices/rules/js-length-check-first.md +49 -0
  614. package/skills/vercel-react-best-practices/rules/js-min-max-loop.md +82 -0
  615. package/skills/vercel-react-best-practices/rules/js-set-map-lookups.md +24 -0
  616. package/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +57 -0
  617. package/skills/vercel-react-best-practices/rules/rendering-activity.md +26 -0
  618. package/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
  619. package/skills/vercel-react-best-practices/rules/rendering-conditional-render.md +40 -0
  620. package/skills/vercel-react-best-practices/rules/rendering-content-visibility.md +38 -0
  621. package/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +46 -0
  622. package/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
  623. package/skills/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
  624. package/skills/vercel-react-best-practices/rules/rendering-resource-hints.md +85 -0
  625. package/skills/vercel-react-best-practices/rules/rendering-script-defer-async.md +68 -0
  626. package/skills/vercel-react-best-practices/rules/rendering-svg-precision.md +28 -0
  627. package/skills/vercel-react-best-practices/rules/rendering-usetransition-loading.md +75 -0
  628. package/skills/vercel-react-best-practices/rules/rerender-defer-reads.md +39 -0
  629. package/skills/vercel-react-best-practices/rules/rerender-dependencies.md +45 -0
  630. package/skills/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
  631. package/skills/vercel-react-best-practices/rules/rerender-derived-state.md +29 -0
  632. package/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +74 -0
  633. package/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +58 -0
  634. package/skills/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
  635. package/skills/vercel-react-best-practices/rules/rerender-memo.md +44 -0
  636. package/skills/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
  637. package/skills/vercel-react-best-practices/rules/rerender-no-inline-components.md +82 -0
  638. package/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
  639. package/skills/vercel-react-best-practices/rules/rerender-split-combined-hooks.md +64 -0
  640. package/skills/vercel-react-best-practices/rules/rerender-transitions.md +40 -0
  641. package/skills/vercel-react-best-practices/rules/rerender-use-deferred-value.md +59 -0
  642. package/skills/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
  643. package/skills/vercel-react-best-practices/rules/server-after-nonblocking.md +73 -0
  644. package/skills/vercel-react-best-practices/rules/server-auth-actions.md +96 -0
  645. package/skills/vercel-react-best-practices/rules/server-cache-lru.md +41 -0
  646. package/skills/vercel-react-best-practices/rules/server-cache-react.md +76 -0
  647. package/skills/vercel-react-best-practices/rules/server-dedup-props.md +65 -0
  648. package/skills/vercel-react-best-practices/rules/server-hoist-static-io.md +142 -0
  649. package/skills/vercel-react-best-practices/rules/server-parallel-fetching.md +83 -0
  650. package/skills/vercel-react-best-practices/rules/server-serialization.md +38 -0
  651. package/skills/web-design-guidelines/SKILL.md +39 -0
  652. package/skills/cro-methodology/SKILL.md +0 -98
  653. /package/skills/{cro-methodology → cm-cro-methodology}/references/COPYWRITING.md +0 -0
  654. /package/skills/{cro-methodology → cm-cro-methodology}/references/OBJECTIONS.md +0 -0
  655. /package/skills/{cro-methodology → cm-cro-methodology}/references/PERSUASION.md +0 -0
  656. /package/skills/{cro-methodology → cm-cro-methodology}/references/RESEARCH.md +0 -0
  657. /package/skills/{cro-methodology → cm-cro-methodology}/references/funnel-analysis.md +0 -0
  658. /package/skills/{cro-methodology → cm-cro-methodology}/references/testing-methodology.md +0 -0
@@ -0,0 +1,47 @@
1
+ ---
2
+ name: remote-operations
3
+ description: REST API patterns and best practices for managing remote Frappe/ERPNext sites via curl.
4
+ ---
5
+
6
+ # Remote Operations
7
+
8
+ Patterns for interacting with remote Frappe/ERPNext sites via REST API.
9
+
10
+ ## When to Use
11
+
12
+ - Managing Frappe Cloud sites (no bench CLI access)
13
+ - Operating on remote self-hosted Frappe instances
14
+ - Automating document operations across sites
15
+ - Managing Web Forms from code
16
+
17
+ ## Key References
18
+
19
+ - `resources/rest-api-patterns.md` — Complete curl patterns for CRUD, RPC, reports
20
+ - `resources/doctype-registry.md` — DocType discovery and exploration
21
+ - `resources/web-form-patterns.md` — Web Form client script patterns
22
+ - `agents/frappe-remote-ops.md` — Full remote operations agent
23
+
24
+ ## Quick Reference
25
+
26
+ ### Authentication
27
+ ```
28
+ Authorization: token <api_key>:<api_secret>
29
+ ```
30
+
31
+ ### Common Operations
32
+ | Operation | Method | Endpoint |
33
+ |-----------|--------|----------|
34
+ | Get doc | GET | `/api/resource/{DocType}/{name}` |
35
+ | List docs | GET | `/api/resource/{DocType}` |
36
+ | Create doc | POST | `/api/resource/{DocType}` |
37
+ | Update doc | PUT | `/api/resource/{DocType}/{name}` |
38
+ | Delete doc | DELETE | `/api/resource/{DocType}/{name}` |
39
+ | Run method | POST | `/api/method/{method}` |
40
+ | Get value | POST | `/api/method/frappe.client.get_value` |
41
+ | Get count | POST | `/api/method/frappe.client.get_count` |
42
+
43
+ ### Security Rules
44
+ 1. Never expose API keys in output
45
+ 2. Confirm before destructive operations
46
+ 3. Store credentials in `.env` files
47
+ 4. Rate-limit batch operations
@@ -0,0 +1,608 @@
1
+ ---
2
+ name: server-scripts
3
+ description: Frappe server-side Python patterns for controllers, document events, whitelisted APIs, background jobs, and database operations. Use when writing controller logic, creating APIs, handling document events, or processing data on the server.
4
+ ---
5
+
6
+ # Frappe Server Scripts Reference
7
+
8
+ Complete reference for server-side Python development in Frappe Framework.
9
+
10
+ ## When to Use This Skill
11
+
12
+ - Writing document controllers
13
+ - Creating whitelisted API endpoints
14
+ - Handling document lifecycle events
15
+ - Background job processing
16
+ - Database operations and queries
17
+ - Permission checks and validation
18
+ - Email and notification handling
19
+
20
+ ## Controller Location
21
+
22
+ ```
23
+ my_app/
24
+ └── my_module/
25
+ └── doctype/
26
+ └── my_doctype/
27
+ └── my_doctype.py # Python controller
28
+ ```
29
+
30
+ ## Document Controller
31
+
32
+ ### Complete Controller Template
33
+
34
+ ```python
35
+ # my_doctype.py
36
+ import frappe
37
+ from frappe import _
38
+ from frappe.model.document import Document
39
+ from frappe.utils import nowdate, nowtime, flt, cint, getdate, add_days
40
+
41
+
42
+ class MyDocType(Document):
43
+ # ===== NAMING =====
44
+
45
+ def autoname(self):
46
+ """Custom naming logic"""
47
+ self.name = f"{self.prefix}-{frappe.generate_hash()[:8].upper()}"
48
+
49
+ def before_naming(self):
50
+ """Called before autoname"""
51
+ pass
52
+
53
+ # ===== VALIDATION =====
54
+
55
+ def before_validate(self):
56
+ """Called before validate"""
57
+ self.set_defaults()
58
+
59
+ def validate(self):
60
+ """Main validation - called on insert and update"""
61
+ self.validate_dates()
62
+ self.validate_amounts()
63
+ self.calculate_totals()
64
+ self.set_status()
65
+
66
+ def before_save(self):
67
+ """Called after validate, before database write"""
68
+ self.update_modified_info()
69
+
70
+ # ===== INSERT =====
71
+
72
+ def before_insert(self):
73
+ """Called before new document is inserted"""
74
+ self.set_initial_values()
75
+
76
+ def after_insert(self):
77
+ """Called after new document is inserted"""
78
+ self.create_related_documents()
79
+ self.send_notification()
80
+
81
+ # ===== UPDATE =====
82
+
83
+ def on_update(self):
84
+ """Called after document is saved (insert or update)"""
85
+ self.update_related_documents()
86
+ self.clear_cache()
87
+
88
+ def after_save(self):
89
+ """Called after on_update, always runs"""
90
+ pass
91
+
92
+ def on_change(self):
93
+ """Called when document changes in database"""
94
+ pass
95
+
96
+ # ===== SUBMISSION =====
97
+
98
+ def before_submit(self):
99
+ """Called before document is submitted"""
100
+ self.validate_for_submit()
101
+
102
+ def on_submit(self):
103
+ """Called after document is submitted"""
104
+ self.create_gl_entries()
105
+ self.update_stock()
106
+
107
+ def on_update_after_submit(self):
108
+ """Called when submitted doc is updated (limited fields)"""
109
+ pass
110
+
111
+ # ===== CANCELLATION =====
112
+
113
+ def before_cancel(self):
114
+ """Called before document is cancelled"""
115
+ self.validate_cancellation()
116
+
117
+ def on_cancel(self):
118
+ """Called after document is cancelled"""
119
+ self.reverse_gl_entries()
120
+ self.reverse_stock()
121
+
122
+ # ===== DELETION =====
123
+
124
+ def before_delete(self):
125
+ """Called before document is deleted"""
126
+ self.check_dependencies()
127
+
128
+ def after_delete(self):
129
+ """Called after document is deleted"""
130
+ self.cleanup_related()
131
+
132
+ def on_trash(self):
133
+ """Called when document is trashed"""
134
+ pass
135
+
136
+ def after_restore(self):
137
+ """Called after document is restored from trash"""
138
+ pass
139
+
140
+ # ===== CUSTOM METHODS =====
141
+
142
+ def set_defaults(self):
143
+ """Set default values"""
144
+ if not self.posting_date:
145
+ self.posting_date = nowdate()
146
+ if not self.company:
147
+ self.company = frappe.defaults.get_user_default("Company")
148
+
149
+ def validate_dates(self):
150
+ """Validate date fields"""
151
+ if self.end_date and getdate(self.start_date) > getdate(self.end_date):
152
+ frappe.throw(_("End Date cannot be before Start Date"))
153
+
154
+ if getdate(self.posting_date) > getdate(nowdate()):
155
+ frappe.throw(_("Posting Date cannot be in the future"))
156
+
157
+ def validate_amounts(self):
158
+ """Validate amount fields"""
159
+ for item in self.items:
160
+ if flt(item.qty) <= 0:
161
+ frappe.throw(_("Row {0}: Quantity must be greater than 0").format(item.idx))
162
+ if flt(item.rate) < 0:
163
+ frappe.throw(_("Row {0}: Rate cannot be negative").format(item.idx))
164
+
165
+ def calculate_totals(self):
166
+ """Calculate document totals"""
167
+ self.total = 0
168
+ for item in self.items:
169
+ item.amount = flt(item.qty) * flt(item.rate)
170
+ self.total += item.amount
171
+
172
+ self.tax_amount = flt(self.total) * flt(self.tax_rate) / 100
173
+ self.grand_total = flt(self.total) + flt(self.tax_amount)
174
+
175
+ def set_status(self):
176
+ """Set document status based on state"""
177
+ if self.docstatus == 0:
178
+ self.status = "Draft"
179
+ elif self.docstatus == 1:
180
+ if self.is_completed():
181
+ self.status = "Completed"
182
+ else:
183
+ self.status = "Submitted"
184
+ elif self.docstatus == 2:
185
+ self.status = "Cancelled"
186
+
187
+ def is_completed(self):
188
+ """Check if document is completed"""
189
+ return all(item.delivered_qty >= item.qty for item in self.items)
190
+ ```
191
+
192
+ ## Whitelisted APIs
193
+
194
+ ### Basic API
195
+
196
+ ```python
197
+ @frappe.whitelist()
198
+ def get_customer_details(customer):
199
+ """Get customer details
200
+
201
+ Args:
202
+ customer (str): Customer ID
203
+
204
+ Returns:
205
+ dict: Customer details with outstanding amount
206
+ """
207
+ if not customer:
208
+ frappe.throw(_("Customer is required"))
209
+
210
+ doc = frappe.get_doc("Customer", customer)
211
+
212
+ return {
213
+ "customer_name": doc.customer_name,
214
+ "customer_type": doc.customer_type,
215
+ "territory": doc.territory,
216
+ "credit_limit": flt(doc.credit_limit),
217
+ "outstanding": get_customer_outstanding(customer)
218
+ }
219
+
220
+
221
+ @frappe.whitelist()
222
+ def create_invoice(customer, items):
223
+ """Create sales invoice from data
224
+
225
+ Args:
226
+ customer (str): Customer ID
227
+ items (str): JSON string of items
228
+
229
+ Returns:
230
+ str: Invoice name
231
+ """
232
+ items = frappe.parse_json(items)
233
+
234
+ doc = frappe.get_doc({
235
+ "doctype": "Sales Invoice",
236
+ "customer": customer,
237
+ "items": [{
238
+ "item_code": item.get("item_code"),
239
+ "qty": flt(item.get("qty")),
240
+ "rate": flt(item.get("rate"))
241
+ } for item in items]
242
+ })
243
+
244
+ doc.insert()
245
+ doc.submit()
246
+
247
+ return doc.name
248
+ ```
249
+
250
+ ### Guest API
251
+
252
+ ```python
253
+ @frappe.whitelist(allow_guest=True)
254
+ def get_public_data():
255
+ """Public API - no login required"""
256
+ return {
257
+ "status": "ok",
258
+ "message": "This is public data"
259
+ }
260
+ ```
261
+
262
+ ### Method-Restricted API
263
+
264
+ ```python
265
+ @frappe.whitelist(methods=["POST"])
266
+ def create_record(data):
267
+ """Only accepts POST requests"""
268
+ data = frappe.parse_json(data)
269
+ doc = frappe.get_doc(data)
270
+ doc.insert()
271
+ return {"name": doc.name}
272
+
273
+
274
+ @frappe.whitelist(methods=["GET", "POST"])
275
+ def flexible_endpoint(**kwargs):
276
+ """Accepts GET and POST"""
277
+ return kwargs
278
+ ```
279
+
280
+ ### Permission-Checked API
281
+
282
+ ```python
283
+ @frappe.whitelist()
284
+ def sensitive_operation(doctype, name):
285
+ """API with permission check"""
286
+ # Check permission
287
+ if not frappe.has_permission(doctype, "write", name):
288
+ frappe.throw(_("Not permitted"), frappe.PermissionError)
289
+
290
+ # Proceed with operation
291
+ doc = frappe.get_doc(doctype, name)
292
+ # ... do something
293
+
294
+ return {"status": "success"}
295
+ ```
296
+
297
+ ## Database Operations
298
+
299
+ ### Reading Data
300
+
301
+ ```python
302
+ # Get single document
303
+ doc = frappe.get_doc("Customer", "CUST-001")
304
+
305
+ # Get with filters
306
+ doc = frappe.get_doc("Customer", {"customer_name": "John Corp"})
307
+
308
+ # Get single value
309
+ name = frappe.db.get_value("Customer", "CUST-001", "customer_name")
310
+
311
+ # Get multiple values
312
+ values = frappe.db.get_value("Customer", "CUST-001",
313
+ ["customer_name", "territory"], as_dict=True)
314
+
315
+ # Get list
316
+ customers = frappe.db.get_all("Customer",
317
+ filters={"status": "Active"},
318
+ fields=["name", "customer_name", "territory"],
319
+ order_by="customer_name asc",
320
+ limit=10
321
+ )
322
+
323
+ # Complex filters
324
+ invoices = frappe.db.get_all("Sales Invoice",
325
+ filters={
326
+ "status": ["in", ["Paid", "Unpaid"]],
327
+ "grand_total": [">", 1000],
328
+ "posting_date": [">=", "2024-01-01"],
329
+ "customer": ["like", "%Corp%"]
330
+ },
331
+ fields=["name", "customer", "grand_total"]
332
+ )
333
+
334
+ # Pluck single field
335
+ names = frappe.db.get_all("Customer",
336
+ filters={"status": "Active"},
337
+ pluck="name"
338
+ )
339
+
340
+ # Count
341
+ count = frappe.db.count("Customer", {"status": "Active"})
342
+
343
+ # Exists check
344
+ exists = frappe.db.exists("Customer", "CUST-001")
345
+ ```
346
+
347
+ ### Raw SQL
348
+
349
+ ```python
350
+ # Simple query
351
+ result = frappe.db.sql("""
352
+ SELECT name, customer_name, grand_total
353
+ FROM `tabSales Invoice`
354
+ WHERE status = %s AND grand_total > %s
355
+ ORDER BY creation DESC
356
+ LIMIT 10
357
+ """, ("Paid", 1000), as_dict=True)
358
+
359
+ # Named parameters
360
+ result = frappe.db.sql("""
361
+ SELECT * FROM `tabCustomer`
362
+ WHERE territory = %(territory)s
363
+ AND status = %(status)s
364
+ """, {"territory": "West", "status": "Active"}, as_dict=True)
365
+
366
+ # Aggregation
367
+ total = frappe.db.sql("""
368
+ SELECT SUM(grand_total) as total
369
+ FROM `tabSales Invoice`
370
+ WHERE status = 'Paid'
371
+ """)[0][0] or 0
372
+ ```
373
+
374
+ ### Writing Data
375
+
376
+ ```python
377
+ # Create document
378
+ doc = frappe.get_doc({
379
+ "doctype": "Customer",
380
+ "customer_name": "New Customer",
381
+ "customer_type": "Company"
382
+ })
383
+ doc.insert()
384
+
385
+ # Update document
386
+ doc = frappe.get_doc("Customer", "CUST-001")
387
+ doc.customer_name = "Updated Name"
388
+ doc.save()
389
+
390
+ # Quick update (bypasses controller)
391
+ frappe.db.set_value("Customer", "CUST-001", "status", "Inactive")
392
+
393
+ # Update multiple fields
394
+ frappe.db.set_value("Customer", "CUST-001", {
395
+ "status": "Inactive",
396
+ "disabled": 1
397
+ })
398
+
399
+ # Delete
400
+ frappe.delete_doc("Customer", "CUST-001")
401
+
402
+ # Commit transaction
403
+ frappe.db.commit()
404
+
405
+ # Rollback
406
+ frappe.db.rollback()
407
+ ```
408
+
409
+ ## Background Jobs
410
+
411
+ ### Enqueue Jobs
412
+
413
+ ```python
414
+ # Basic enqueue
415
+ frappe.enqueue(
416
+ "my_app.tasks.process_data",
417
+ queue="default",
418
+ customer="CUST-001"
419
+ )
420
+
421
+ # With options
422
+ frappe.enqueue(
423
+ method="my_app.tasks.heavy_task",
424
+ queue="long", # short, default, long
425
+ timeout=1800, # 30 minutes
426
+ is_async=True,
427
+ job_name="Heavy Task",
428
+ now=False, # True to run immediately
429
+ enqueue_after_commit=True,
430
+ # Task arguments
431
+ document_name="DOC-001",
432
+ data={"key": "value"}
433
+ )
434
+ ```
435
+
436
+ ### Task Function
437
+
438
+ ```python
439
+ # my_app/tasks.py
440
+ import frappe
441
+
442
+ def process_data(customer):
443
+ """Background task"""
444
+ frappe.init(site=frappe.local.site)
445
+ frappe.connect()
446
+
447
+ try:
448
+ # Process logic
449
+ doc = frappe.get_doc("Customer", customer)
450
+ doc.last_processed = frappe.utils.now()
451
+ doc.save()
452
+ frappe.db.commit()
453
+ except Exception:
454
+ frappe.log_error(title="Process Data Failed")
455
+ raise
456
+ finally:
457
+ frappe.destroy()
458
+ ```
459
+
460
+ ### Scheduled Jobs (hooks.py)
461
+
462
+ ```python
463
+ scheduler_events = {
464
+ "all": [
465
+ "my_app.tasks.every_minute"
466
+ ],
467
+ "daily": [
468
+ "my_app.tasks.daily_report"
469
+ ],
470
+ "hourly": [
471
+ "my_app.tasks.hourly_sync"
472
+ ],
473
+ "cron": {
474
+ "0 9 * * 1": [
475
+ "my_app.tasks.monday_morning"
476
+ ],
477
+ "*/15 * * * *": [
478
+ "my_app.tasks.every_15_min"
479
+ ]
480
+ }
481
+ }
482
+ ```
483
+
484
+ ## Error Handling
485
+
486
+ ```python
487
+ from frappe import _
488
+ from frappe.exceptions import ValidationError, PermissionError
489
+
490
+ def my_function():
491
+ # Throw with message
492
+ frappe.throw(_("Invalid data"))
493
+
494
+ # Throw with title
495
+ frappe.throw(_("Cannot proceed"), title=_("Error"))
496
+
497
+ # Throw with exception type
498
+ frappe.throw(_("Permission denied"), exc=PermissionError)
499
+
500
+ # Message without stopping
501
+ frappe.msgprint(_("Warning: Check your data"))
502
+
503
+ # Log error
504
+ frappe.log_error(
505
+ title="My Error",
506
+ message=frappe.get_traceback()
507
+ )
508
+
509
+ # Try-except
510
+ try:
511
+ risky_operation()
512
+ except Exception:
513
+ frappe.log_error("Operation failed")
514
+ frappe.throw(_("Something went wrong"))
515
+ ```
516
+
517
+ ## Utilities
518
+
519
+ ```python
520
+ from frappe.utils import (
521
+ nowdate, nowtime, now_datetime, today,
522
+ getdate, get_datetime,
523
+ add_days, add_months, add_years,
524
+ date_diff, time_diff_in_seconds,
525
+ flt, cint, cstr,
526
+ fmt_money, rounded,
527
+ strip_html, escape_html
528
+ )
529
+
530
+ # Date operations
531
+ today = nowdate() # "2024-01-15"
532
+ week_later = add_days(nowdate(), 7)
533
+ month_end = frappe.utils.get_last_day(nowdate())
534
+
535
+ # Number operations
536
+ amount = flt(value, 2) # Float with precision
537
+ count = cint(value) # Integer
538
+
539
+ # Formatting
540
+ money = fmt_money(1234.56, currency="USD")
541
+
542
+ # Current user
543
+ user = frappe.session.user
544
+ roles = frappe.get_roles()
545
+ ```
546
+
547
+ ## Email & Notifications
548
+
549
+ ```python
550
+ # Send email
551
+ frappe.sendmail(
552
+ recipients=["user@example.com"],
553
+ subject="Subject",
554
+ message="Email body",
555
+ reference_doctype="Sales Invoice",
556
+ reference_name="SINV-00001"
557
+ )
558
+
559
+ # With template
560
+ frappe.sendmail(
561
+ recipients=["user@example.com"],
562
+ subject="Order Confirmation",
563
+ template="order_confirmation",
564
+ args={
565
+ "customer_name": "John",
566
+ "order_id": "ORD-001"
567
+ }
568
+ )
569
+
570
+ # Real-time notification
571
+ frappe.publish_realtime(
572
+ "msgprint",
573
+ {"message": "Task completed"},
574
+ user="user@example.com"
575
+ )
576
+ ```
577
+
578
+ ## Document Events via Hooks
579
+
580
+ ```python
581
+ # hooks.py
582
+ doc_events = {
583
+ "Sales Invoice": {
584
+ "validate": "my_app.overrides.validate_invoice",
585
+ "on_submit": "my_app.overrides.on_submit_invoice",
586
+ "on_cancel": "my_app.overrides.on_cancel_invoice"
587
+ },
588
+ "*": {
589
+ "on_update": "my_app.overrides.log_all_changes"
590
+ }
591
+ }
592
+ ```
593
+
594
+ ```python
595
+ # my_app/overrides.py
596
+ import frappe
597
+
598
+ def validate_invoice(doc, method):
599
+ """Called during Sales Invoice validation"""
600
+ if doc.grand_total > 100000:
601
+ if not doc.manager_approval:
602
+ frappe.throw(_("Manager approval required for orders above 100,000"))
603
+
604
+ def on_submit_invoice(doc, method):
605
+ """Called when Sales Invoice is submitted"""
606
+ create_delivery_note(doc)
607
+ notify_warehouse(doc)
608
+ ```
@@ -0,0 +1,46 @@
1
+ ---
2
+ name: web-forms
3
+ description: Frappe Web Form development patterns — client scripts, CSS, guest access, and common gotchas.
4
+ ---
5
+
6
+ # Web Forms
7
+
8
+ Patterns for developing Frappe Web Forms (portal pages).
9
+
10
+ ## When to Use
11
+
12
+ - Creating public-facing forms (customer portals, application forms)
13
+ - Customizing existing Web Form client scripts
14
+ - Styling Web Forms with custom CSS
15
+ - Managing Web Forms via REST API
16
+
17
+ ## Key References
18
+
19
+ - `resources/web-form-patterns.md` — Complete client script patterns, CSS, and gotchas
20
+
21
+ ## Critical Gotchas
22
+
23
+ 1. **Use `set_values()` NOT `set_value()`** — WebForm extends FieldGroup, not Form
24
+ 2. **Always wrap in `frappe.ready()`** — ensures form is loaded before code runs
25
+ 3. **Read-only fields CAN be set** via `set_values()` in client scripts
26
+
27
+ ## Quick Template
28
+
29
+ ```javascript
30
+ frappe.ready(function() {
31
+ // Set initial values
32
+ frappe.web_form.set_values({
33
+ date: frappe.datetime.get_today()
34
+ });
35
+
36
+ // Validate before submit
37
+ frappe.web_form.validate = function() {
38
+ let values = frappe.web_form.get_values();
39
+ if (!values.email) {
40
+ frappe.msgprint(__('Email is required'));
41
+ return false;
42
+ }
43
+ return true;
44
+ };
45
+ });
46
+ ```
@@ -105,12 +105,6 @@ if [ -f Cargo.toml ]; then cargo build; fi
105
105
 
106
106
  Run tests to ensure worktree starts clean (via `cm-quality-gate` conventions).
107
107
 
108
- ### 5. Update Working Memory (cm-continuity)
109
-
110
- After worktree is created and baseline verified:
111
- - Update `.cm/CONTINUITY.md` → Working Context: "Now working in worktree: [path], branch: [branch]"
112
- - Note: `CONTINUITY.md` lives in the **MAIN workspace**, not the worktree. Always read from/write to the main workspace's `.cm/` directory.
113
-
114
108
  ## Quick Reference
115
109
 
116
110
  | Situation | Action |
@@ -161,4 +155,3 @@ After worktree is created and baseline verified:
161
155
 
162
156
  **Pairs with:**
163
157
  - **cm-code-review** - For cleanup after work complete
164
- - **cm-continuity** - Update Working Context with worktree location