claude-code-arcane 1.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 (1778) hide show
  1. package/CHANGELOG.md +100 -0
  2. package/LICENSE +26 -0
  3. package/README.md +372 -0
  4. package/agents/ai/ai-architect.md +80 -0
  5. package/agents/ai/data-engineer.md +66 -0
  6. package/agents/ai/data-scientist.md +58 -0
  7. package/agents/ai/ml-engineer.md +61 -0
  8. package/agents/business/business-ops-lead.md +64 -0
  9. package/agents/business/financial-analyst.md +62 -0
  10. package/agents/business/sales-engineer.md +74 -0
  11. package/agents/clevel/ceo-advisor.md +64 -0
  12. package/agents/clevel/cfo-advisor.md +63 -0
  13. package/agents/clevel/chief-of-staff.md +60 -0
  14. package/agents/clevel/cmo-advisor.md +67 -0
  15. package/agents/clevel/coo-advisor.md +79 -0
  16. package/agents/clevel/cto-advisor.md +72 -0
  17. package/agents/devops/cloud-architect.md +52 -0
  18. package/agents/devops/platform-lead.md +72 -0
  19. package/agents/devops/sre-lead.md +100 -0
  20. package/agents/engineering/android-engineer.md +78 -0
  21. package/agents/engineering/backend-architect.md +127 -0
  22. package/agents/engineering/database-architect.md +138 -0
  23. package/agents/engineering/flutter-engineer.md +75 -0
  24. package/agents/engineering/frontend-architect.md +138 -0
  25. package/agents/engineering/go-engineer.md +102 -0
  26. package/agents/engineering/ios-engineer.md +76 -0
  27. package/agents/engineering/node-engineer.md +107 -0
  28. package/agents/engineering/react-engineer.md +109 -0
  29. package/agents/engineering/react-native-engineer.md +112 -0
  30. package/agents/engineering/sql-specialist.md +106 -0
  31. package/agents/game/accessibility-specialist.md +150 -0
  32. package/agents/game/ai-programmer.md +95 -0
  33. package/agents/game/analytics-engineer.md +101 -0
  34. package/agents/game/art-director.md +64 -0
  35. package/agents/game/economy-designer.md +143 -0
  36. package/agents/game/game-designer.md +70 -0
  37. package/agents/game/gameplay-programmer.md +133 -0
  38. package/agents/game/lead-programmer.md +62 -0
  39. package/agents/game/level-designer.md +115 -0
  40. package/agents/game/live-ops-designer.md +184 -0
  41. package/agents/game/narrative-director.md +60 -0
  42. package/agents/game/network-programmer.md +98 -0
  43. package/agents/game/performance-analyst.md +112 -0
  44. package/agents/game/qa-lead.md +65 -0
  45. package/agents/game/qa-tester-gamedev.md +230 -0
  46. package/agents/game/release-manager.md +65 -0
  47. package/agents/game/sound-designer.md +85 -0
  48. package/agents/game/systems-designer.md +157 -0
  49. package/agents/game/technical-artist.md +108 -0
  50. package/agents/game/technical-director.md +74 -0
  51. package/agents/game/ue-replication-specialist.md +143 -0
  52. package/agents/game/unity-shader-specialist.md +178 -0
  53. package/agents/game/unity-specialist.md +184 -0
  54. package/agents/game/unreal-specialist.md +172 -0
  55. package/agents/game/ux-designer.md +112 -0
  56. package/agents/game/world-builder.md +111 -0
  57. package/agents/game/writer.md +104 -0
  58. package/agents/integrations/api-tools-specialist.md +209 -0
  59. package/agents/integrations/comms-tools-specialist.md +159 -0
  60. package/agents/integrations/design-tools-specialist.md +129 -0
  61. package/agents/integrations/docs-tools-specialist.md +116 -0
  62. package/agents/integrations/integrations-architect.md +144 -0
  63. package/agents/integrations/project-tools-specialist.md +129 -0
  64. package/agents/management/delivery-manager.md +105 -0
  65. package/agents/management/program-director.md +55 -0
  66. package/agents/management/project-manager.md +126 -0
  67. package/agents/management/scrum-master.md +96 -0
  68. package/agents/marketing/content-lead.md +74 -0
  69. package/agents/marketing/growth-lead.md +72 -0
  70. package/agents/marketing/marketing-analyst.md +89 -0
  71. package/agents/marketing/marketing-director.md +75 -0
  72. package/agents/marketing/seo-lead.md +80 -0
  73. package/agents/product/chief-product-officer.md +79 -0
  74. package/agents/product/design-system-lead.md +76 -0
  75. package/agents/product/product-manager.md +132 -0
  76. package/agents/product/ui-lead.md +73 -0
  77. package/agents/product/ux-lead.md +103 -0
  78. package/agents/quality/qa-director.md +121 -0
  79. package/agents/quality/qa-engineer.md +92 -0
  80. package/agents/quality/security-architect.md +144 -0
  81. package/agents/regulatory/compliance-officer.md +88 -0
  82. package/agents/regulatory/quality-manager.md +90 -0
  83. package/agents/regulatory/regulatory-director.md +92 -0
  84. package/agents/visualnovel/vn-comfyui-artist.md +91 -0
  85. package/agents/visualnovel/vn-narrative-director.md +86 -0
  86. package/agents/visualnovel/vn-producer.md +108 -0
  87. package/agents/visualnovel/vn-renpy-developer.md +118 -0
  88. package/agents/visualnovel/vn-scene-director.md +98 -0
  89. package/agents/visualnovel/vn-ui-designer.md +97 -0
  90. package/dist/cli.js +2352 -0
  91. package/docs/SKILLS-CATALOG.md +457 -0
  92. package/docs/USER-GUIDE.md +543 -0
  93. package/docs/agent-hierarchy.md +133 -0
  94. package/docs/coding-standards.md +135 -0
  95. package/docs/collaborative-design.md +439 -0
  96. package/docs/context-management.md +200 -0
  97. package/docs/coordination-rules.md +164 -0
  98. package/docs/directory-structure.md +156 -0
  99. package/docs/division-structure.md +135 -0
  100. package/docs/gamedev/coding-standards.md +184 -0
  101. package/docs/gates/README.md +169 -0
  102. package/docs/gates/gamedev-gates.md +509 -0
  103. package/docs/gates/software-gates.md +449 -0
  104. package/docs/software/coding-standards.md +165 -0
  105. package/docs/technical-preferences.md +61 -0
  106. package/docs/templates/accessibility-requirements.md +331 -0
  107. package/docs/templates/architecture-decision-record.md +177 -0
  108. package/docs/templates/architecture-doc-from-code.md +266 -0
  109. package/docs/templates/architecture-traceability.md +101 -0
  110. package/docs/templates/changelog-template.md +62 -0
  111. package/docs/templates/collaborative-protocols/design-agent-protocol.md +157 -0
  112. package/docs/templates/collaborative-protocols/implementation-agent-protocol.md +160 -0
  113. package/docs/templates/collaborative-protocols/leadership-agent-protocol.md +181 -0
  114. package/docs/templates/design-doc-from-implementation.md +204 -0
  115. package/docs/templates/incident-response.md +135 -0
  116. package/docs/templates/interaction-pattern-library.md +1089 -0
  117. package/docs/templates/milestone-definition.md +79 -0
  118. package/docs/templates/post-mortem.md +69 -0
  119. package/docs/templates/prd.md +222 -0
  120. package/docs/templates/project-stage-report.md +218 -0
  121. package/docs/templates/release-checklist-template.md +125 -0
  122. package/docs/templates/release-notes.md +103 -0
  123. package/docs/templates/rfc.md +256 -0
  124. package/docs/templates/risk-register-entry.md +58 -0
  125. package/docs/templates/skill-test-spec.md +96 -0
  126. package/docs/templates/sprint-plan.md +75 -0
  127. package/docs/templates/technical-design-document.md +98 -0
  128. package/docs/templates/test-evidence.md +86 -0
  129. package/docs/templates/test-plan.md +151 -0
  130. package/docs/templates/ux-spec.md +544 -0
  131. package/hooks/check-update.sh +82 -0
  132. package/hooks/detect-division.sh +28 -0
  133. package/hooks/detect-gaps.sh +230 -0
  134. package/hooks/log-agent-stop.sh +7 -0
  135. package/hooks/log-agent.sh +7 -0
  136. package/hooks/notify.sh +7 -0
  137. package/hooks/post-compact.sh +7 -0
  138. package/hooks/pre-compact.sh +7 -0
  139. package/hooks/session-start.sh +78 -0
  140. package/hooks/session-stop.sh +7 -0
  141. package/hooks/statusline.sh +98 -0
  142. package/hooks/validate-assets.sh +10 -0
  143. package/hooks/validate-commit.sh +24 -0
  144. package/hooks/validate-push.sh +21 -0
  145. package/hooks/validate-secrets.sh +23 -0
  146. package/hooks/validate-skill-change.sh +19 -0
  147. package/package.json +63 -0
  148. package/profiles/agile.yaml +60 -0
  149. package/profiles/ai.yaml +27 -0
  150. package/profiles/android-native.yaml +36 -0
  151. package/profiles/backend-go.yaml +56 -0
  152. package/profiles/backend-ts.yaml +59 -0
  153. package/profiles/business.yaml +24 -0
  154. package/profiles/clevel.yaml +48 -0
  155. package/profiles/clickup.yaml +21 -0
  156. package/profiles/core.yaml +83 -0
  157. package/profiles/database.yaml +28 -0
  158. package/profiles/design.yaml +30 -0
  159. package/profiles/docs.yaml +31 -0
  160. package/profiles/finance.yaml +23 -0
  161. package/profiles/flutter.yaml +37 -0
  162. package/profiles/frontend.yaml +39 -0
  163. package/profiles/infra.yaml +47 -0
  164. package/profiles/integrations.yaml +23 -0
  165. package/profiles/ios-native.yaml +37 -0
  166. package/profiles/jira.yaml +21 -0
  167. package/profiles/marketing.yaml +64 -0
  168. package/profiles/mobile.yaml +39 -0
  169. package/profiles/regulatory.yaml +33 -0
  170. package/profiles/security.yaml +30 -0
  171. package/profiles/self-improving.yaml +22 -0
  172. package/profiles/statusline.yaml +21 -0
  173. package/profiles/testing.yaml +32 -0
  174. package/profiles/unity-design.yaml +37 -0
  175. package/profiles/unity-dev.yaml +44 -0
  176. package/profiles/visual-novel.yaml +54 -0
  177. package/rules/ai-code.md +60 -0
  178. package/rules/api-code.md +41 -0
  179. package/rules/backend-code.md +35 -0
  180. package/rules/data-files.md +58 -0
  181. package/rules/frontend-code.md +35 -0
  182. package/rules/gamedev/ai-code.md +15 -0
  183. package/rules/gamedev/design-docs.md +18 -0
  184. package/rules/gamedev/engine-code.md +41 -0
  185. package/rules/gamedev/gameplay-code.md +31 -0
  186. package/rules/gamedev/narrative.md +15 -0
  187. package/rules/gamedev/network-code.md +15 -0
  188. package/rules/gamedev/shader-code.md +43 -0
  189. package/rules/gamedev/ui-code.md +15 -0
  190. package/rules/gamedev/vn-code.md +37 -0
  191. package/rules/implementation-workflow.md +48 -0
  192. package/rules/infra-code.md +47 -0
  193. package/rules/migration-code.md +41 -0
  194. package/rules/prototype-code.md +40 -0
  195. package/rules/test-standards.md +55 -0
  196. package/skills/ab-test-setup/SKILL.md +99 -0
  197. package/skills/ab-test-setup/references/sample-size-guide.md +252 -0
  198. package/skills/ab-test-setup/references/test-templates.md +268 -0
  199. package/skills/ab-test-setup/scripts/sample_size_calculator.py +337 -0
  200. package/skills/accessibility/SKILL.md +32 -0
  201. package/skills/accessibility/references/anti-patterns.md +9 -0
  202. package/skills/accessibility/references/component-requirements.md +15 -0
  203. package/skills/accessibility/references/focus-forms-testing.md +31 -0
  204. package/skills/accessibility/references/wcag-criteria.md +17 -0
  205. package/skills/ad-creative/SKILL.md +85 -0
  206. package/skills/ad-creative/references/creative-frameworks.md +253 -0
  207. package/skills/ad-creative/references/platform-specs.md +170 -0
  208. package/skills/ad-creative/scripts/ad_copy_validator.py +490 -0
  209. package/skills/agent-designer/README.md +430 -0
  210. package/skills/agent-designer/SKILL.md +64 -0
  211. package/skills/agent-designer/agent_evaluator.py +1223 -0
  212. package/skills/agent-designer/agent_planner.py +911 -0
  213. package/skills/agent-designer/assets/sample_execution_logs.json +543 -0
  214. package/skills/agent-designer/assets/sample_system_requirements.json +57 -0
  215. package/skills/agent-designer/assets/sample_tool_descriptions.json +545 -0
  216. package/skills/agent-designer/expected_outputs/sample_agent_architecture.json +488 -0
  217. package/skills/agent-designer/expected_outputs/sample_evaluation_report.json +570 -0
  218. package/skills/agent-designer/expected_outputs/sample_tool_schemas.json +416 -0
  219. package/skills/agent-designer/references/agent_architecture_patterns.md +445 -0
  220. package/skills/agent-designer/references/evaluation_methodology.md +749 -0
  221. package/skills/agent-designer/references/tool_design_best_practices.md +470 -0
  222. package/skills/agent-designer/tool_schema_generator.py +978 -0
  223. package/skills/agent-protocol/SKILL.md +102 -0
  224. package/skills/agent-protocol/references/communication-standard.md +115 -0
  225. package/skills/agent-protocol/references/invocation-patterns.md +247 -0
  226. package/skills/agent-protocol/references/quality-loop.md +123 -0
  227. package/skills/agent-workflow-designer/SKILL.md +59 -0
  228. package/skills/agent-workflow-designer/references/workflow-patterns.md +82 -0
  229. package/skills/agent-workflow-designer/scripts/workflow_scaffolder.py +113 -0
  230. package/skills/ai-security/SKILL.md +113 -0
  231. package/skills/ai-security/references/atlas-coverage.md +150 -0
  232. package/skills/ai-security/scripts/ai_threat_scanner.py +564 -0
  233. package/skills/ai-seo/SKILL.md +172 -0
  234. package/skills/ai-seo/references/ai-search-landscape.md +191 -0
  235. package/skills/ai-seo/references/content-patterns.md +276 -0
  236. package/skills/ai-seo/references/monitoring-guide.md +208 -0
  237. package/skills/ai-seo/references/optimization-playbook.md +58 -0
  238. package/skills/analytics-tracking/SKILL.md +105 -0
  239. package/skills/analytics-tracking/references/debugging-playbook.md +224 -0
  240. package/skills/analytics-tracking/references/event-taxonomy-guide.md +203 -0
  241. package/skills/analytics-tracking/references/gtm-patterns.md +298 -0
  242. package/skills/analytics-tracking/scripts/tracking_plan_generator.py +386 -0
  243. package/skills/android-native-dev/SKILL.md +878 -0
  244. package/skills/android-native-dev/references/accessibility.md +209 -0
  245. package/skills/android-native-dev/references/adaptive-screens.md +231 -0
  246. package/skills/android-native-dev/references/design-style-guide.md +365 -0
  247. package/skills/android-native-dev/references/functional-requirements.md +229 -0
  248. package/skills/android-native-dev/references/motion-system.md +203 -0
  249. package/skills/android-native-dev/references/performance-stability.md +223 -0
  250. package/skills/android-native-dev/references/privacy-security.md +244 -0
  251. package/skills/android-native-dev/references/testing.md +554 -0
  252. package/skills/android-native-dev/references/visual-design.md +246 -0
  253. package/skills/api-design/SKILL.md +88 -0
  254. package/skills/api-design/references/anti-patterns.md +14 -0
  255. package/skills/api-design/references/versioning-deprecation.md +23 -0
  256. package/skills/api-docs/SKILL.md +101 -0
  257. package/skills/api-versioning/SKILL.md +51 -0
  258. package/skills/api-versioning/references/anti-patterns-and-checklist.md +27 -0
  259. package/skills/api-versioning/references/implementation-by-framework.md +31 -0
  260. package/skills/app-store-optimization/HOW_TO_USE.md +281 -0
  261. package/skills/app-store-optimization/SKILL.md +150 -0
  262. package/skills/app-store-optimization/assets/aso-audit-template.md +268 -0
  263. package/skills/app-store-optimization/expected_output.json +170 -0
  264. package/skills/app-store-optimization/references/ab-testing-guide.md +72 -0
  265. package/skills/app-store-optimization/references/aso-best-practices.md +403 -0
  266. package/skills/app-store-optimization/references/before-after-examples.md +73 -0
  267. package/skills/app-store-optimization/references/keyword-research-guide.md +419 -0
  268. package/skills/app-store-optimization/references/metadata-optimization.md +65 -0
  269. package/skills/app-store-optimization/references/platform-requirements.md +324 -0
  270. package/skills/app-store-optimization/sample_input.json +30 -0
  271. package/skills/app-store-optimization/scripts/ab_test_planner.py +662 -0
  272. package/skills/app-store-optimization/scripts/aso_scorer.py +482 -0
  273. package/skills/app-store-optimization/scripts/competitor_analyzer.py +577 -0
  274. package/skills/app-store-optimization/scripts/keyword_analyzer.py +406 -0
  275. package/skills/app-store-optimization/scripts/launch_checklist.py +739 -0
  276. package/skills/app-store-optimization/scripts/localization_helper.py +588 -0
  277. package/skills/app-store-optimization/scripts/metadata_optimizer.py +581 -0
  278. package/skills/app-store-optimization/scripts/review_analyzer.py +714 -0
  279. package/skills/arcane-add/SKILL.md +47 -0
  280. package/skills/arcane-clean/SKILL.md +45 -0
  281. package/skills/arcane-list/SKILL.md +46 -0
  282. package/skills/arcane-remove/SKILL.md +68 -0
  283. package/skills/arcane-status/SKILL.md +42 -0
  284. package/skills/architecture-decision/SKILL.md +75 -0
  285. package/skills/architecture-decision/templates/adr.md +101 -0
  286. package/skills/architecture-review/SKILL.md +90 -0
  287. package/skills/art-bible/SKILL.md +88 -0
  288. package/skills/art-bible/references/anti-patterns.md +8 -0
  289. package/skills/art-bible/references/checklist.md +17 -0
  290. package/skills/asset-audit/SKILL.md +95 -0
  291. package/skills/asset-spec/SKILL.md +72 -0
  292. package/skills/asset-spec/references/anti-patterns-checklist.md +19 -0
  293. package/skills/asset-spec/references/spec-output-format.md +34 -0
  294. package/skills/async-ops/SKILL.md +59 -0
  295. package/skills/async-ops/references/anti-patterns.md +16 -0
  296. package/skills/async-ops/references/checklist.md +10 -0
  297. package/skills/async-ops/references/job-scheduling.md +37 -0
  298. package/skills/async-ops/references/outbound-webhooks.md +19 -0
  299. package/skills/atlassian-admin/SKILL.md +121 -0
  300. package/skills/atlassian-admin/assets/permission_scheme_template.json +173 -0
  301. package/skills/atlassian-admin/references/security-hardening-guide.md +214 -0
  302. package/skills/atlassian-admin/references/user-provisioning-checklist.md +177 -0
  303. package/skills/atlassian-admin/scripts/permission_audit_tool.py +469 -0
  304. package/skills/atlassian-templates/SKILL.md +128 -0
  305. package/skills/atlassian-templates/references/governance-framework.md +234 -0
  306. package/skills/atlassian-templates/references/template-design-patterns.md +252 -0
  307. package/skills/atlassian-templates/scripts/template_scaffolder.py +418 -0
  308. package/skills/audit-dev/SKILL.md +43 -0
  309. package/skills/audit-game/SKILL.md +54 -0
  310. package/skills/audit-game/references/cross-reference-criteria.md +42 -0
  311. package/skills/audit-game/references/output-template.md +48 -0
  312. package/skills/audit-log/SKILL.md +75 -0
  313. package/skills/auth-strategy/SKILL.md +120 -0
  314. package/skills/auth-strategy/references/anti-patterns.md +21 -0
  315. package/skills/aws-solution-architect/SKILL.md +125 -0
  316. package/skills/aws-solution-architect/assets/expected_output.json +55 -0
  317. package/skills/aws-solution-architect/assets/sample_input.json +18 -0
  318. package/skills/aws-solution-architect/references/architecture_patterns.md +535 -0
  319. package/skills/aws-solution-architect/references/best_practices.md +631 -0
  320. package/skills/aws-solution-architect/references/service_selection.md +484 -0
  321. package/skills/aws-solution-architect/scripts/architecture_designer.py +808 -0
  322. package/skills/aws-solution-architect/scripts/cost_optimizer.py +346 -0
  323. package/skills/aws-solution-architect/scripts/serverless_stack.py +663 -0
  324. package/skills/azure-cloud-architect/SKILL.md +128 -0
  325. package/skills/azure-cloud-architect/references/architecture_patterns.md +413 -0
  326. package/skills/azure-cloud-architect/references/best_practices.md +337 -0
  327. package/skills/azure-cloud-architect/references/service_selection.md +250 -0
  328. package/skills/azure-cloud-architect/scripts/architecture_designer.py +592 -0
  329. package/skills/azure-cloud-architect/scripts/bicep_generator.py +775 -0
  330. package/skills/azure-cloud-architect/scripts/cost_optimizer.py +492 -0
  331. package/skills/backup-strategy/SKILL.md +101 -0
  332. package/skills/balance-check/SKILL.md +119 -0
  333. package/skills/board-deck-builder/SKILL.md +64 -0
  334. package/skills/board-deck-builder/references/deck-frameworks.md +184 -0
  335. package/skills/board-deck-builder/templates/board-deck-template.md +210 -0
  336. package/skills/board-meeting/SKILL.md +58 -0
  337. package/skills/board-meeting/references/meeting-facilitation.md +167 -0
  338. package/skills/board-meeting/templates/meeting-agenda.md +81 -0
  339. package/skills/board-meeting/templates/meeting-minutes.md +91 -0
  340. package/skills/brainstorm/SKILL.md +94 -0
  341. package/skills/brainstorm/references/next-steps-pipeline.md +13 -0
  342. package/skills/brainstorm/references/review-mode-gates.md +13 -0
  343. package/skills/brand-guidelines/SKILL.md +91 -0
  344. package/skills/brand-guidelines/references/brand-identity-and-framework.md +262 -0
  345. package/skills/bug-report/SKILL.md +53 -0
  346. package/skills/bug-triage/SKILL.md +74 -0
  347. package/skills/business-investment-advisor/SKILL.md +83 -0
  348. package/skills/business-investment-advisor/references/analysis-frameworks.md +113 -0
  349. package/skills/caching-strategy/SKILL.md +81 -0
  350. package/skills/caching-strategy/references/http-headers.md +9 -0
  351. package/skills/caching-strategy/references/patterns-and-invalidation.md +25 -0
  352. package/skills/caching-strategy/references/redis-and-client.md +13 -0
  353. package/skills/caching-strategy/references/ttl-defaults.md +11 -0
  354. package/skills/campaign-analytics/SKILL.md +93 -0
  355. package/skills/campaign-analytics/assets/ab_test_template.md +130 -0
  356. package/skills/campaign-analytics/assets/campaign_report_template.md +141 -0
  357. package/skills/campaign-analytics/assets/channel_comparison_template.md +158 -0
  358. package/skills/campaign-analytics/assets/expected_output.json +110 -0
  359. package/skills/campaign-analytics/assets/sample_campaign_data.json +151 -0
  360. package/skills/campaign-analytics/references/attribution-models-guide.md +285 -0
  361. package/skills/campaign-analytics/references/campaign-metrics-benchmarks.md +259 -0
  362. package/skills/campaign-analytics/references/funnel-optimization-framework.md +302 -0
  363. package/skills/campaign-analytics/scripts/attribution_analyzer.py +347 -0
  364. package/skills/campaign-analytics/scripts/campaign_roi_calculator.py +459 -0
  365. package/skills/campaign-analytics/scripts/funnel_analyzer.py +305 -0
  366. package/skills/capa-officer/SKILL.md +125 -0
  367. package/skills/capa-officer/references/effectiveness-verification-guide.md +462 -0
  368. package/skills/capa-officer/references/rca-methodologies.md +455 -0
  369. package/skills/capa-officer/scripts/capa_tracker.py +638 -0
  370. package/skills/capa-officer/scripts/root_cause_analyzer.py +486 -0
  371. package/skills/cdn-setup/SKILL.md +33 -0
  372. package/skills/cdn-setup/references/cache-strategy-and-invalidation.md +30 -0
  373. package/skills/cdn-setup/references/security-and-anti-patterns.md +26 -0
  374. package/skills/ceo-advisor/SKILL.md +110 -0
  375. package/skills/ceo-advisor/references/board_governance_investor_relations.md +599 -0
  376. package/skills/ceo-advisor/references/executive_decision_framework.md +475 -0
  377. package/skills/ceo-advisor/references/leadership_organizational_culture.md +682 -0
  378. package/skills/ceo-advisor/scripts/financial_scenario_analyzer.py +451 -0
  379. package/skills/ceo-advisor/scripts/strategy_analyzer.py +609 -0
  380. package/skills/cfo-advisor/SKILL.md +81 -0
  381. package/skills/cfo-advisor/references/cash_management.md +374 -0
  382. package/skills/cfo-advisor/references/financial_planning.md +500 -0
  383. package/skills/cfo-advisor/references/fundraising_playbook.md +419 -0
  384. package/skills/cfo-advisor/scripts/burn_rate_calculator.py +402 -0
  385. package/skills/cfo-advisor/scripts/fundraising_model.py +490 -0
  386. package/skills/cfo-advisor/scripts/unit_economics_analyzer.py +529 -0
  387. package/skills/change-management/SKILL.md +53 -0
  388. package/skills/change-management/references/adkar-details.md +110 -0
  389. package/skills/change-management/references/change-playbook.md +308 -0
  390. package/skills/changelog/SKILL.md +111 -0
  391. package/skills/check/SKILL.md +22 -0
  392. package/skills/chief-of-staff/SKILL.md +70 -0
  393. package/skills/chief-of-staff/references/routing-matrix.md +212 -0
  394. package/skills/chief-of-staff/references/synthesis-framework.md +201 -0
  395. package/skills/chro-advisor/SKILL.md +86 -0
  396. package/skills/chro-advisor/references/comp_frameworks.md +320 -0
  397. package/skills/chro-advisor/references/org_design.md +333 -0
  398. package/skills/chro-advisor/references/people_strategy.md +320 -0
  399. package/skills/chro-advisor/scripts/comp_benchmarker.py +613 -0
  400. package/skills/chro-advisor/scripts/hiring_plan_modeler.py +572 -0
  401. package/skills/churn-prevention/SKILL.md +200 -0
  402. package/skills/churn-prevention/references/cancel-flow-playbook.md +254 -0
  403. package/skills/churn-prevention/references/dunning-guide.md +276 -0
  404. package/skills/churn-prevention/references/exit-survey-and-save-offers.md +42 -0
  405. package/skills/churn-prevention/scripts/churn_impact_calculator.py +199 -0
  406. package/skills/ci-cd-setup/SKILL.md +66 -0
  407. package/skills/ci-cd-setup/references/anti-patterns.md +10 -0
  408. package/skills/ci-cd-setup/references/checklist.md +14 -0
  409. package/skills/ci-cd-setup/references/secret-and-deploy.md +30 -0
  410. package/skills/ciso-advisor/SKILL.md +86 -0
  411. package/skills/ciso-advisor/references/compliance_roadmap.md +370 -0
  412. package/skills/ciso-advisor/references/incident_response.md +350 -0
  413. package/skills/ciso-advisor/references/security_strategy.md +321 -0
  414. package/skills/ciso-advisor/scripts/compliance_tracker.py +781 -0
  415. package/skills/ciso-advisor/scripts/risk_quantifier.py +690 -0
  416. package/skills/clickup/SKILL.md +134 -0
  417. package/skills/cloud-security/SKILL.md +107 -0
  418. package/skills/cloud-security/references/cspm-checks.md +109 -0
  419. package/skills/cloud-security/scripts/cloud_posture_check.py +1180 -0
  420. package/skills/cmo-advisor/SKILL.md +82 -0
  421. package/skills/cmo-advisor/references/brand_positioning.md +374 -0
  422. package/skills/cmo-advisor/references/growth_frameworks.md +456 -0
  423. package/skills/cmo-advisor/references/marketing_org.md +281 -0
  424. package/skills/cmo-advisor/scripts/growth_model_simulator.py +416 -0
  425. package/skills/cmo-advisor/scripts/marketing_budget_modeler.py +440 -0
  426. package/skills/code-review/SKILL.md +66 -0
  427. package/skills/cold-email/SKILL.md +178 -0
  428. package/skills/cold-email/references/deliverability-guide.md +225 -0
  429. package/skills/cold-email/references/follow-up-playbook.md +225 -0
  430. package/skills/cold-email/references/frameworks.md +217 -0
  431. package/skills/cold-email/references/voice-and-subject-lines.md +41 -0
  432. package/skills/cold-email/scripts/email_sequence_analyzer.py +517 -0
  433. package/skills/commit/SKILL.md +25 -0
  434. package/skills/company-os/SKILL.md +66 -0
  435. package/skills/company-os/references/implementation-guide.md +249 -0
  436. package/skills/company-os/references/os-comparison.md +242 -0
  437. package/skills/company-os/references/six-components.md +129 -0
  438. package/skills/competitive-intel/SKILL.md +62 -0
  439. package/skills/competitive-intel/references/ci-playbook.md +237 -0
  440. package/skills/competitive-intel/templates/battlecard-template.md +99 -0
  441. package/skills/competitive-teardown/SKILL.md +169 -0
  442. package/skills/competitive-teardown/references/analysis-templates.md +203 -0
  443. package/skills/competitive-teardown/references/competitive-analysis-frameworks.md +107 -0
  444. package/skills/competitive-teardown/references/data-collection-guide.md +104 -0
  445. package/skills/competitive-teardown/references/scoring-rubric.md +116 -0
  446. package/skills/competitive-teardown/scripts/competitive_matrix_builder.py +299 -0
  447. package/skills/competitor-alternatives/SKILL.md +92 -0
  448. package/skills/competitor-alternatives/references/content-architecture.md +263 -0
  449. package/skills/competitor-alternatives/references/templates.md +212 -0
  450. package/skills/competitor-alternatives/scripts/comparison_matrix_builder.py +365 -0
  451. package/skills/confluence-expert/SKILL.md +129 -0
  452. package/skills/confluence-expert/references/macro-cheat-sheet.md +144 -0
  453. package/skills/confluence-expert/references/space-architecture-patterns.md +246 -0
  454. package/skills/confluence-expert/references/templates.md +725 -0
  455. package/skills/confluence-expert/scripts/content_audit_analyzer.py +457 -0
  456. package/skills/confluence-expert/scripts/space_structure_generator.py +517 -0
  457. package/skills/consistency-check/SKILL.md +68 -0
  458. package/skills/content-creator/SKILL.md +52 -0
  459. package/skills/content-creator/assets/content_calendar_template.md +99 -0
  460. package/skills/content-creator/examples/brand_voice_analysis_example.md +180 -0
  461. package/skills/content-creator/examples/seo_optimization_example.md +259 -0
  462. package/skills/content-creator/references/analytics_guide.md +352 -0
  463. package/skills/content-creator/references/brand_guidelines.md +219 -0
  464. package/skills/content-creator/references/content_frameworks.md +551 -0
  465. package/skills/content-creator/references/social_media_optimization.md +342 -0
  466. package/skills/content-humanizer/SKILL.md +193 -0
  467. package/skills/content-humanizer/references/ai-tells-checklist.md +157 -0
  468. package/skills/content-humanizer/references/voice-techniques.md +168 -0
  469. package/skills/content-humanizer/scripts/humanizer_scorer.py +504 -0
  470. package/skills/content-production/SKILL.md +192 -0
  471. package/skills/content-production/references/content-brief-guide.md +146 -0
  472. package/skills/content-production/references/optimization-checklist.md +139 -0
  473. package/skills/content-production/scripts/brand_voice_analyzer.py +197 -0
  474. package/skills/content-production/scripts/content_scorer.py +464 -0
  475. package/skills/content-production/scripts/seo_optimizer.py +433 -0
  476. package/skills/content-production/templates/content-brief-template.md +126 -0
  477. package/skills/content-strategy/SKILL.md +125 -0
  478. package/skills/content-strategy/references/content-strategy-reference.md +278 -0
  479. package/skills/content-strategy/scripts/topic_cluster_mapper.py +243 -0
  480. package/skills/context-engine/SKILL.md +50 -0
  481. package/skills/context-engine/references/anonymization-protocol.md +173 -0
  482. package/skills/context-prime/SKILL.md +25 -0
  483. package/skills/contract-and-proposal-writer/SKILL.md +126 -0
  484. package/skills/contract-and-proposal-writer/references/contract-templates.md +276 -0
  485. package/skills/contract-testing/SKILL.md +42 -0
  486. package/skills/contract-testing/references/anti-patterns-and-checklist.md +28 -0
  487. package/skills/contract-testing/references/implementation-details.md +29 -0
  488. package/skills/coo-advisor/SKILL.md +92 -0
  489. package/skills/coo-advisor/references/ops_cadence.md +606 -0
  490. package/skills/coo-advisor/references/process_frameworks.md +459 -0
  491. package/skills/coo-advisor/references/scaling_playbook.md +465 -0
  492. package/skills/coo-advisor/scripts/okr_tracker.py +1100 -0
  493. package/skills/coo-advisor/scripts/ops_efficiency_analyzer.py +1071 -0
  494. package/skills/copy-editing/SKILL.md +124 -0
  495. package/skills/copy-editing/references/copy-editing-checklist.md +134 -0
  496. package/skills/copy-editing/references/plain-english-alternatives.md +376 -0
  497. package/skills/copy-editing/references/seven-sweeps-framework.md +228 -0
  498. package/skills/copy-editing/scripts/readability_scorer.py +285 -0
  499. package/skills/copywriting/SKILL.md +192 -0
  500. package/skills/copywriting/references/copy-frameworks.md +338 -0
  501. package/skills/copywriting/references/natural-transitions.md +252 -0
  502. package/skills/copywriting/references/writing-style-rules.md +63 -0
  503. package/skills/copywriting/scripts/headline_scorer.py +256 -0
  504. package/skills/cpo-advisor/SKILL.md +102 -0
  505. package/skills/cpo-advisor/references/pmf_playbook.md +307 -0
  506. package/skills/cpo-advisor/references/product_org_design.md +407 -0
  507. package/skills/cpo-advisor/references/product_strategy.md +454 -0
  508. package/skills/cpo-advisor/scripts/pmf_scorer.py +600 -0
  509. package/skills/cpo-advisor/scripts/portfolio_analyzer.py +547 -0
  510. package/skills/create-epics/SKILL.md +65 -0
  511. package/skills/create-pr/SKILL.md +26 -0
  512. package/skills/create-stories/SKILL.md +85 -0
  513. package/skills/create-test-user/SKILL.md +37 -0
  514. package/skills/create-ticket/SKILL.md +50 -0
  515. package/skills/cro-advisor/SKILL.md +86 -0
  516. package/skills/cro-advisor/references/nrr_playbook.md +380 -0
  517. package/skills/cro-advisor/references/pricing_strategy.md +417 -0
  518. package/skills/cro-advisor/references/sales_playbook.md +461 -0
  519. package/skills/cro-advisor/scripts/churn_analyzer.py +742 -0
  520. package/skills/cro-advisor/scripts/revenue_forecast_model.py +571 -0
  521. package/skills/cs-onboard/SKILL.md +60 -0
  522. package/skills/cs-onboard/references/interview-guide.md +173 -0
  523. package/skills/cs-onboard/templates/company-context-template.md +144 -0
  524. package/skills/csp-headers/SKILL.md +53 -0
  525. package/skills/csp-headers/references/anti-patterns-checklist.md +26 -0
  526. package/skills/csp-headers/references/implementation.md +18 -0
  527. package/skills/cto-advisor/SKILL.md +95 -0
  528. package/skills/cto-advisor/references/architecture_decision_records.md +294 -0
  529. package/skills/cto-advisor/references/engineering_metrics.md +393 -0
  530. package/skills/cto-advisor/references/technology_evaluation_framework.md +370 -0
  531. package/skills/cto-advisor/references/workflows.md +84 -0
  532. package/skills/cto-advisor/scripts/team_scaling_calculator.py +562 -0
  533. package/skills/cto-advisor/scripts/tech_debt_analyzer.py +450 -0
  534. package/skills/culture-architect/SKILL.md +66 -0
  535. package/skills/culture-architect/references/culture-playbook.md +243 -0
  536. package/skills/culture-architect/templates/culture-code-template.md +137 -0
  537. package/skills/customer-success-manager/SKILL.md +97 -0
  538. package/skills/customer-success-manager/assets/executive_business_review_template.md +209 -0
  539. package/skills/customer-success-manager/assets/expected_output.json +170 -0
  540. package/skills/customer-success-manager/assets/onboarding_checklist_template.md +215 -0
  541. package/skills/customer-success-manager/assets/qbr_template.md +163 -0
  542. package/skills/customer-success-manager/assets/sample_customer_data.json +314 -0
  543. package/skills/customer-success-manager/assets/success_plan_template.md +167 -0
  544. package/skills/customer-success-manager/references/cs-metrics-benchmarks.md +259 -0
  545. package/skills/customer-success-manager/references/cs-playbooks.md +290 -0
  546. package/skills/customer-success-manager/references/health-scoring-framework.md +184 -0
  547. package/skills/customer-success-manager/scripts/churn_risk_analyzer.py +487 -0
  548. package/skills/customer-success-manager/scripts/expansion_opportunity_scorer.py +414 -0
  549. package/skills/customer-success-manager/scripts/health_score_calculator.py +438 -0
  550. package/skills/data-migrations/SKILL.md +113 -0
  551. package/skills/data-migrations/references/anti-patterns.md +14 -0
  552. package/skills/data-migrations/references/batching.md +9 -0
  553. package/skills/data-migrations/references/checklist.md +14 -0
  554. package/skills/data-migrations/references/expand-contract.md +19 -0
  555. package/skills/data-operations/SKILL.md +59 -0
  556. package/skills/data-operations/references/anti-patterns.md +17 -0
  557. package/skills/data-operations/references/query-optimization.md +37 -0
  558. package/skills/data-operations/references/seeding.md +38 -0
  559. package/skills/data-seeding/SKILL.md +96 -0
  560. package/skills/database/SKILL.md +74 -0
  561. package/skills/database/references/anti-patterns.md +20 -0
  562. package/skills/database/references/query-patterns.md +32 -0
  563. package/skills/database-indexing/SKILL.md +85 -0
  564. package/skills/database-indexing/references/anti-patterns.md +14 -0
  565. package/skills/database-indexing/references/checklists.md +23 -0
  566. package/skills/database-indexing/references/index-types.md +18 -0
  567. package/skills/database-setup/SKILL.md +109 -0
  568. package/skills/database-setup/references/indexing-guide.md +126 -0
  569. package/skills/db-diagram/SKILL.md +87 -0
  570. package/skills/decision-logger/SKILL.md +59 -0
  571. package/skills/decision-logger/references/entry-format.md +55 -0
  572. package/skills/decision-logger/scripts/decision_tracker.py +620 -0
  573. package/skills/decision-logger/templates/decision-entry.md +63 -0
  574. package/skills/deploy-check/SKILL.md +87 -0
  575. package/skills/deploy-staging/SKILL.md +44 -0
  576. package/skills/deps-audit/SKILL.md +92 -0
  577. package/skills/design-handoff/SKILL.md +49 -0
  578. package/skills/design-system/SKILL.md +56 -0
  579. package/skills/design-system/references/post-design-validation.md +8 -0
  580. package/skills/design-system/references/section-guidance.md +29 -0
  581. package/skills/distributed-tracing/SKILL.md +86 -0
  582. package/skills/doc-gdd/SKILL.md +56 -0
  583. package/skills/doc-pas/SKILL.md +41 -0
  584. package/skills/doc-pas/references/examples-and-usage.md +27 -0
  585. package/skills/doc-pas/references/output-format-template.md +63 -0
  586. package/skills/doc-rfc/SKILL.md +55 -0
  587. package/skills/doc-rfc/templates/decision.md +38 -0
  588. package/skills/doc-rfc/templates/epica.md +68 -0
  589. package/skills/doc-rfc/templates/hu.md +52 -0
  590. package/skills/doc-rfc/templates/tarea.md +37 -0
  591. package/skills/docker-setup/SKILL.md +78 -0
  592. package/skills/docker-setup/references/anti-patterns.md +10 -0
  593. package/skills/docker-setup/references/checklists.md +34 -0
  594. package/skills/docker-setup/references/size-optimization.md +7 -0
  595. package/skills/docx-generator/SKILL.md +249 -0
  596. package/skills/docx-generator/assets/styles/academic_styles.xml +250 -0
  597. package/skills/docx-generator/assets/styles/corporate_styles.xml +284 -0
  598. package/skills/docx-generator/assets/styles/default_styles.xml +449 -0
  599. package/skills/docx-generator/assets/xsd/aesthetic-rules.xsd +470 -0
  600. package/skills/docx-generator/assets/xsd/business-rules.xsd +130 -0
  601. package/skills/docx-generator/assets/xsd/common-types.xsd +159 -0
  602. package/skills/docx-generator/assets/xsd/wml-subset.xsd +589 -0
  603. package/skills/docx-generator/references/cjk_typography.md +357 -0
  604. package/skills/docx-generator/references/cjk_university_template_guide.md +184 -0
  605. package/skills/docx-generator/references/comments_guide.md +191 -0
  606. package/skills/docx-generator/references/design_good_bad_examples.md +829 -0
  607. package/skills/docx-generator/references/design_principles.md +819 -0
  608. package/skills/docx-generator/references/openxml_element_order.md +308 -0
  609. package/skills/docx-generator/references/openxml_encyclopedia_part1.md +4061 -0
  610. package/skills/docx-generator/references/openxml_encyclopedia_part2.md +2820 -0
  611. package/skills/docx-generator/references/openxml_encyclopedia_part3.md +3381 -0
  612. package/skills/docx-generator/references/openxml_namespaces.md +82 -0
  613. package/skills/docx-generator/references/openxml_units.md +72 -0
  614. package/skills/docx-generator/references/scenario_a_create.md +284 -0
  615. package/skills/docx-generator/references/scenario_b_edit_content.md +295 -0
  616. package/skills/docx-generator/references/scenario_c_apply_template.md +456 -0
  617. package/skills/docx-generator/references/track_changes_guide.md +200 -0
  618. package/skills/docx-generator/references/troubleshooting.md +506 -0
  619. package/skills/docx-generator/references/typography_guide.md +294 -0
  620. package/skills/docx-generator/references/xsd_validation_guide.md +158 -0
  621. package/skills/docx-generator/scripts/doc_to_docx.sh +40 -0
  622. package/skills/docx-generator/scripts/docx_preview.sh +37 -0
  623. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Cli/Program.cs +18 -0
  624. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Commands/AnalyzeCommand.cs +147 -0
  625. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Commands/ApplyTemplateCommand.cs +322 -0
  626. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Commands/CreateCommand.cs +324 -0
  627. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Commands/DiffCommand.cs +155 -0
  628. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Commands/EditContentCommand.cs +487 -0
  629. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Commands/FixOrderCommand.cs +108 -0
  630. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Commands/MergeRunsCommand.cs +122 -0
  631. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Commands/ValidateCommand.cs +107 -0
  632. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/CommentSynchronizer.cs +169 -0
  633. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/ElementOrder.cs +80 -0
  634. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/NamespaceConstants.cs +42 -0
  635. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/RunMerger.cs +81 -0
  636. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/StyleAnalyzer.cs +81 -0
  637. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/TrackChangesHelper.cs +99 -0
  638. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/UnitConverter.cs +23 -0
  639. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples.cs +1832 -0
  640. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples_Batch1.cs +910 -0
  641. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples_Batch2.cs +999 -0
  642. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples_Batch3.cs +1048 -0
  643. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples_Batch4.cs +1038 -0
  644. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Samples/CharacterFormattingSamples.cs +1020 -0
  645. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Samples/DocumentCreationSamples.cs +1121 -0
  646. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Samples/FieldAndTocSamples.cs +624 -0
  647. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Samples/FootnoteAndCommentSamples.cs +675 -0
  648. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Samples/HeaderFooterSamples.cs +838 -0
  649. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Samples/ImageSamples.cs +917 -0
  650. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Samples/ListAndNumberingSamples.cs +826 -0
  651. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Samples/ParagraphFormattingSamples.cs +1199 -0
  652. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Samples/StyleSystemSamples.cs +1487 -0
  653. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Samples/TableSamples.cs +1163 -0
  654. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Samples/TrackChangesSamples.cs +595 -0
  655. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Typography/CjkHelper.cs +39 -0
  656. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Typography/FontDefaults.cs +24 -0
  657. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Typography/PageSizes.cs +20 -0
  658. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Validation/BusinessRuleValidator.cs +224 -0
  659. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Validation/GateCheckValidator.cs +148 -0
  660. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Validation/ValidationResult.cs +23 -0
  661. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.Core/Validation/XsdValidator.cs +69 -0
  662. package/skills/docx-generator/scripts/dotnet/MiniMaxAIDocx.slnx +4 -0
  663. package/skills/docx-generator/scripts/env_check.sh +196 -0
  664. package/skills/docx-generator/scripts/setup.ps1 +274 -0
  665. package/skills/docx-generator/scripts/setup.sh +504 -0
  666. package/skills/email-sequence/SKILL.md +119 -0
  667. package/skills/email-sequence/references/email-sequence-playbook.md +209 -0
  668. package/skills/email-sequence/scripts/sequence_analyzer.py +354 -0
  669. package/skills/email-template-builder/SKILL.md +93 -0
  670. package/skills/email-template-builder/references/react-email-templates.md +323 -0
  671. package/skills/env-sync/SKILL.md +102 -0
  672. package/skills/error-tracking/SKILL.md +25 -0
  673. package/skills/error-tracking/references/anti-patterns-and-checklist.md +23 -0
  674. package/skills/error-tracking/references/operational-details.md +38 -0
  675. package/skills/error-tracking/references/setup-per-stack.md +24 -0
  676. package/skills/estimate/SKILL.md +51 -0
  677. package/skills/estimate/references/complexity-factors.md +30 -0
  678. package/skills/estimate/references/estimate-template.md +60 -0
  679. package/skills/executive-mentor/.claude-plugin/plugin.json +13 -0
  680. package/skills/executive-mentor/SKILL.md +90 -0
  681. package/skills/executive-mentor/agents/devils-advocate.md +139 -0
  682. package/skills/executive-mentor/references/board_dynamics.md +263 -0
  683. package/skills/executive-mentor/references/crisis_playbook.md +173 -0
  684. package/skills/executive-mentor/references/hard_things.md +256 -0
  685. package/skills/executive-mentor/scripts/decision_matrix_scorer.py +491 -0
  686. package/skills/executive-mentor/scripts/stakeholder_mapper.py +547 -0
  687. package/skills/executive-mentor/skills/board-prep/SKILL.md +76 -0
  688. package/skills/executive-mentor/skills/challenge/SKILL.md +80 -0
  689. package/skills/executive-mentor/skills/hard-call/SKILL.md +64 -0
  690. package/skills/executive-mentor/skills/postmortem/SKILL.md +78 -0
  691. package/skills/executive-mentor/skills/stress-test/SKILL.md +74 -0
  692. package/skills/executive-mentor/skills/stress-test/references/patterns-by-type.md +73 -0
  693. package/skills/experiment-designer/SKILL.md +108 -0
  694. package/skills/experiment-designer/references/experiment-playbook.md +70 -0
  695. package/skills/experiment-designer/references/statistics-reference.md +56 -0
  696. package/skills/experiment-designer/scripts/sample_size_calculator.py +100 -0
  697. package/skills/fda-consultant-specialist/SKILL.md +102 -0
  698. package/skills/fda-consultant-specialist/references/device_cybersecurity_guidance.md +695 -0
  699. package/skills/fda-consultant-specialist/references/fda_capa_requirements.md +718 -0
  700. package/skills/fda-consultant-specialist/references/fda_submission_guide.md +400 -0
  701. package/skills/fda-consultant-specialist/references/hipaa_compliance_framework.md +721 -0
  702. package/skills/fda-consultant-specialist/references/qsr_compliance_requirements.md +753 -0
  703. package/skills/fda-consultant-specialist/scripts/fda_submission_tracker.py +493 -0
  704. package/skills/fda-consultant-specialist/scripts/hipaa_risk_assessment.py +626 -0
  705. package/skills/fda-consultant-specialist/scripts/qsr_compliance_checker.py +618 -0
  706. package/skills/feature-flags/SKILL.md +98 -0
  707. package/skills/figma/SKILL.md +124 -0
  708. package/skills/figma-to-code/SKILL.md +80 -0
  709. package/skills/figma-to-code/references/checklist-and-output.md +32 -0
  710. package/skills/figma-to-code/references/stack-detection.md +34 -0
  711. package/skills/figma-tokens/SKILL.md +55 -0
  712. package/skills/file-uploads/SKILL.md +95 -0
  713. package/skills/financial-analyst/SKILL.md +152 -0
  714. package/skills/financial-analyst/assets/dcf_analysis_template.md +184 -0
  715. package/skills/financial-analyst/assets/expected_output.json +161 -0
  716. package/skills/financial-analyst/assets/forecast_report_template.md +177 -0
  717. package/skills/financial-analyst/assets/sample_financial_data.json +219 -0
  718. package/skills/financial-analyst/assets/variance_report_template.md +122 -0
  719. package/skills/financial-analyst/references/financial-ratios-guide.md +376 -0
  720. package/skills/financial-analyst/references/forecasting-best-practices.md +279 -0
  721. package/skills/financial-analyst/references/industry-adaptations.md +103 -0
  722. package/skills/financial-analyst/references/valuation-methodology.md +246 -0
  723. package/skills/financial-analyst/scripts/budget_variance_analyzer.py +406 -0
  724. package/skills/financial-analyst/scripts/dcf_valuation.py +449 -0
  725. package/skills/financial-analyst/scripts/forecast_builder.py +494 -0
  726. package/skills/financial-analyst/scripts/ratio_calculator.py +432 -0
  727. package/skills/fix-issue/SKILL.md +19 -0
  728. package/skills/flutter-dev/SKILL.md +122 -0
  729. package/skills/flutter-dev/references/animations.md +497 -0
  730. package/skills/flutter-dev/references/bloc-state.md +281 -0
  731. package/skills/flutter-dev/references/forms.md +656 -0
  732. package/skills/flutter-dev/references/gorouter-navigation.md +257 -0
  733. package/skills/flutter-dev/references/localization.md +510 -0
  734. package/skills/flutter-dev/references/networking.md +566 -0
  735. package/skills/flutter-dev/references/performance.md +306 -0
  736. package/skills/flutter-dev/references/platform-specific.md +417 -0
  737. package/skills/flutter-dev/references/project-structure.md +274 -0
  738. package/skills/flutter-dev/references/riverpod-state.md +232 -0
  739. package/skills/flutter-dev/references/testing.md +364 -0
  740. package/skills/flutter-dev/references/widget-patterns.md +233 -0
  741. package/skills/form-cro/SKILL.md +128 -0
  742. package/skills/form-cro/references/experiments.md +77 -0
  743. package/skills/form-cro/references/form-cro-playbook.md +271 -0
  744. package/skills/form-cro/scripts/form_field_analyzer.py +291 -0
  745. package/skills/form-validation/SKILL.md +75 -0
  746. package/skills/founder-coach/SKILL.md +57 -0
  747. package/skills/founder-coach/references/delegation-energy.md +124 -0
  748. package/skills/founder-coach/references/founder-toolkit.md +296 -0
  749. package/skills/founder-coach/references/leadership-evolution.md +112 -0
  750. package/skills/founder-coach/references/leadership-growth.md +178 -0
  751. package/skills/free-tool-strategy/SKILL.md +167 -0
  752. package/skills/free-tool-strategy/references/design-and-lead-capture.md +58 -0
  753. package/skills/free-tool-strategy/references/launch-playbook.md +182 -0
  754. package/skills/free-tool-strategy/references/tool-types-guide.md +253 -0
  755. package/skills/free-tool-strategy/scripts/tool_roi_estimator.py +401 -0
  756. package/skills/frontend-dev/SKILL.md +555 -0
  757. package/skills/frontend-dev/canvas-fonts/ArsenalSC-OFL.txt +93 -0
  758. package/skills/frontend-dev/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
  759. package/skills/frontend-dev/canvas-fonts/BigShoulders-Bold.ttf +0 -0
  760. package/skills/frontend-dev/canvas-fonts/BigShoulders-OFL.txt +93 -0
  761. package/skills/frontend-dev/canvas-fonts/BigShoulders-Regular.ttf +0 -0
  762. package/skills/frontend-dev/canvas-fonts/Boldonse-OFL.txt +93 -0
  763. package/skills/frontend-dev/canvas-fonts/Boldonse-Regular.ttf +0 -0
  764. package/skills/frontend-dev/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
  765. package/skills/frontend-dev/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
  766. package/skills/frontend-dev/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
  767. package/skills/frontend-dev/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
  768. package/skills/frontend-dev/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
  769. package/skills/frontend-dev/canvas-fonts/CrimsonPro-OFL.txt +93 -0
  770. package/skills/frontend-dev/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
  771. package/skills/frontend-dev/canvas-fonts/DMMono-OFL.txt +93 -0
  772. package/skills/frontend-dev/canvas-fonts/DMMono-Regular.ttf +0 -0
  773. package/skills/frontend-dev/canvas-fonts/EricaOne-OFL.txt +94 -0
  774. package/skills/frontend-dev/canvas-fonts/EricaOne-Regular.ttf +0 -0
  775. package/skills/frontend-dev/canvas-fonts/GeistMono-Bold.ttf +0 -0
  776. package/skills/frontend-dev/canvas-fonts/GeistMono-OFL.txt +93 -0
  777. package/skills/frontend-dev/canvas-fonts/GeistMono-Regular.ttf +0 -0
  778. package/skills/frontend-dev/canvas-fonts/Gloock-OFL.txt +93 -0
  779. package/skills/frontend-dev/canvas-fonts/Gloock-Regular.ttf +0 -0
  780. package/skills/frontend-dev/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
  781. package/skills/frontend-dev/canvas-fonts/IBMPlexMono-OFL.txt +93 -0
  782. package/skills/frontend-dev/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
  783. package/skills/frontend-dev/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
  784. package/skills/frontend-dev/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
  785. package/skills/frontend-dev/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
  786. package/skills/frontend-dev/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
  787. package/skills/frontend-dev/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
  788. package/skills/frontend-dev/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
  789. package/skills/frontend-dev/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
  790. package/skills/frontend-dev/canvas-fonts/InstrumentSans-OFL.txt +93 -0
  791. package/skills/frontend-dev/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
  792. package/skills/frontend-dev/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
  793. package/skills/frontend-dev/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
  794. package/skills/frontend-dev/canvas-fonts/Italiana-OFL.txt +93 -0
  795. package/skills/frontend-dev/canvas-fonts/Italiana-Regular.ttf +0 -0
  796. package/skills/frontend-dev/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
  797. package/skills/frontend-dev/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
  798. package/skills/frontend-dev/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
  799. package/skills/frontend-dev/canvas-fonts/Jura-Light.ttf +0 -0
  800. package/skills/frontend-dev/canvas-fonts/Jura-Medium.ttf +0 -0
  801. package/skills/frontend-dev/canvas-fonts/Jura-OFL.txt +93 -0
  802. package/skills/frontend-dev/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
  803. package/skills/frontend-dev/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
  804. package/skills/frontend-dev/canvas-fonts/Lora-Bold.ttf +0 -0
  805. package/skills/frontend-dev/canvas-fonts/Lora-BoldItalic.ttf +0 -0
  806. package/skills/frontend-dev/canvas-fonts/Lora-Italic.ttf +0 -0
  807. package/skills/frontend-dev/canvas-fonts/Lora-OFL.txt +93 -0
  808. package/skills/frontend-dev/canvas-fonts/Lora-Regular.ttf +0 -0
  809. package/skills/frontend-dev/canvas-fonts/NationalPark-Bold.ttf +0 -0
  810. package/skills/frontend-dev/canvas-fonts/NationalPark-OFL.txt +93 -0
  811. package/skills/frontend-dev/canvas-fonts/NationalPark-Regular.ttf +0 -0
  812. package/skills/frontend-dev/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
  813. package/skills/frontend-dev/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
  814. package/skills/frontend-dev/canvas-fonts/Outfit-Bold.ttf +0 -0
  815. package/skills/frontend-dev/canvas-fonts/Outfit-OFL.txt +93 -0
  816. package/skills/frontend-dev/canvas-fonts/Outfit-Regular.ttf +0 -0
  817. package/skills/frontend-dev/canvas-fonts/PixelifySans-Medium.ttf +0 -0
  818. package/skills/frontend-dev/canvas-fonts/PixelifySans-OFL.txt +93 -0
  819. package/skills/frontend-dev/canvas-fonts/PoiretOne-OFL.txt +93 -0
  820. package/skills/frontend-dev/canvas-fonts/PoiretOne-Regular.ttf +0 -0
  821. package/skills/frontend-dev/canvas-fonts/RedHatMono-Bold.ttf +0 -0
  822. package/skills/frontend-dev/canvas-fonts/RedHatMono-OFL.txt +93 -0
  823. package/skills/frontend-dev/canvas-fonts/RedHatMono-Regular.ttf +0 -0
  824. package/skills/frontend-dev/canvas-fonts/Silkscreen-OFL.txt +93 -0
  825. package/skills/frontend-dev/canvas-fonts/Silkscreen-Regular.ttf +0 -0
  826. package/skills/frontend-dev/canvas-fonts/SmoochSans-Medium.ttf +0 -0
  827. package/skills/frontend-dev/canvas-fonts/SmoochSans-OFL.txt +93 -0
  828. package/skills/frontend-dev/canvas-fonts/Tektur-Medium.ttf +0 -0
  829. package/skills/frontend-dev/canvas-fonts/Tektur-OFL.txt +93 -0
  830. package/skills/frontend-dev/canvas-fonts/Tektur-Regular.ttf +0 -0
  831. package/skills/frontend-dev/canvas-fonts/WorkSans-Bold.ttf +0 -0
  832. package/skills/frontend-dev/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
  833. package/skills/frontend-dev/canvas-fonts/WorkSans-Italic.ttf +0 -0
  834. package/skills/frontend-dev/canvas-fonts/WorkSans-OFL.txt +93 -0
  835. package/skills/frontend-dev/canvas-fonts/WorkSans-Regular.ttf +0 -0
  836. package/skills/frontend-dev/canvas-fonts/YoungSerif-OFL.txt +93 -0
  837. package/skills/frontend-dev/canvas-fonts/YoungSerif-Regular.ttf +0 -0
  838. package/skills/frontend-dev/references/asset-prompt-guide.md +43 -0
  839. package/skills/frontend-dev/references/env-setup.md +33 -0
  840. package/skills/frontend-dev/references/minimax-cli-reference.md +133 -0
  841. package/skills/frontend-dev/references/minimax-image-guide.md +65 -0
  842. package/skills/frontend-dev/references/minimax-music-guide.md +216 -0
  843. package/skills/frontend-dev/references/minimax-tts-guide.md +78 -0
  844. package/skills/frontend-dev/references/minimax-video-guide.md +82 -0
  845. package/skills/frontend-dev/references/minimax-voice-catalog.md +686 -0
  846. package/skills/frontend-dev/references/motion-recipes.md +407 -0
  847. package/skills/frontend-dev/references/troubleshooting.md +85 -0
  848. package/skills/frontend-dev/scripts/minimax_image.py +137 -0
  849. package/skills/frontend-dev/scripts/minimax_music.py +157 -0
  850. package/skills/frontend-dev/scripts/minimax_tts.py +127 -0
  851. package/skills/frontend-dev/scripts/minimax_video.py +187 -0
  852. package/skills/frontend-dev/templates/generator_template.js +223 -0
  853. package/skills/frontend-dev/templates/viewer.html +599 -0
  854. package/skills/game-analysis/SKILL.md +51 -0
  855. package/skills/game-analysis/references/anti-patterns-checklist.md +25 -0
  856. package/skills/game-analysis/references/balance-report-format.md +21 -0
  857. package/skills/game-analysis/references/playtest-template.md +28 -0
  858. package/skills/game-audit/SKILL.md +66 -0
  859. package/skills/game-docs/SKILL.md +58 -0
  860. package/skills/game-docs/references/gdd-structure.md +24 -0
  861. package/skills/game-docs/references/pas-format.md +49 -0
  862. package/skills/game-docs/references/writing-rules.md +17 -0
  863. package/skills/gate-check/SKILL.md +93 -0
  864. package/skills/gcp-cloud-architect/SKILL.md +127 -0
  865. package/skills/gcp-cloud-architect/references/architecture_patterns.md +512 -0
  866. package/skills/gcp-cloud-architect/references/best_practices.md +467 -0
  867. package/skills/gcp-cloud-architect/references/service_selection.md +547 -0
  868. package/skills/gcp-cloud-architect/scripts/architecture_designer.py +805 -0
  869. package/skills/gcp-cloud-architect/scripts/cost_optimizer.py +465 -0
  870. package/skills/gcp-cloud-architect/scripts/deployment_manager.py +835 -0
  871. package/skills/gdocs/SKILL.md +128 -0
  872. package/skills/gdpr-dsgvo-expert/SKILL.md +97 -0
  873. package/skills/gdpr-dsgvo-expert/references/dpia_methodology.md +412 -0
  874. package/skills/gdpr-dsgvo-expert/references/gdpr_compliance_guide.md +336 -0
  875. package/skills/gdpr-dsgvo-expert/references/german_bdsg_requirements.md +327 -0
  876. package/skills/gdpr-dsgvo-expert/scripts/data_subject_rights_tracker.py +541 -0
  877. package/skills/gdpr-dsgvo-expert/scripts/dpia_generator.py +670 -0
  878. package/skills/gdpr-dsgvo-expert/scripts/gdpr_compliance_checker.py +443 -0
  879. package/skills/gdrive/SKILL.md +46 -0
  880. package/skills/gh-projects/SKILL.md +103 -0
  881. package/skills/gh-projects/references/graphql-queries.md +207 -0
  882. package/skills/git-worktree-manager/SKILL.md +86 -0
  883. package/skills/git-worktree-manager/references/docker-compose-patterns.md +62 -0
  884. package/skills/git-worktree-manager/references/port-allocation-strategy.md +46 -0
  885. package/skills/git-worktree-manager/scripts/worktree_cleanup.py +196 -0
  886. package/skills/git-worktree-manager/scripts/worktree_manager.py +240 -0
  887. package/skills/go-clean-architecture/SKILL.md +95 -0
  888. package/skills/go-clean-architecture/references/anti-patterns.md +7 -0
  889. package/skills/go-clean-architecture/references/checklist.md +13 -0
  890. package/skills/gsheets/SKILL.md +46 -0
  891. package/skills/helm-chart-builder/.claude-plugin/plugin.json +13 -0
  892. package/skills/helm-chart-builder/SKILL.md +122 -0
  893. package/skills/helm-chart-builder/references/chart-patterns.md +435 -0
  894. package/skills/helm-chart-builder/references/values-design.md +462 -0
  895. package/skills/helm-chart-builder/scripts/chart_analyzer.py +542 -0
  896. package/skills/helm-chart-builder/scripts/values_validator.py +442 -0
  897. package/skills/help/SKILL.md +75 -0
  898. package/skills/hotfix/SKILL.md +63 -0
  899. package/skills/i18n-setup/SKILL.md +79 -0
  900. package/skills/incident/SKILL.md +107 -0
  901. package/skills/incident-commander/SKILL.md +133 -0
  902. package/skills/incident-commander/assets/incident_report_template.md +171 -0
  903. package/skills/incident-commander/assets/runbook_template.md +289 -0
  904. package/skills/incident-commander/assets/sample_incident_classification.json +14 -0
  905. package/skills/incident-commander/assets/sample_incident_data.json +276 -0
  906. package/skills/incident-commander/assets/sample_incident_pir_data.json +74 -0
  907. package/skills/incident-commander/assets/sample_timeline_events.json +263 -0
  908. package/skills/incident-commander/assets/simple_incident.json +6 -0
  909. package/skills/incident-commander/assets/simple_timeline_events.json +30 -0
  910. package/skills/incident-commander/expected_outputs/incident_classification_text_output.txt +44 -0
  911. package/skills/incident-commander/expected_outputs/pir_markdown_output.md +88 -0
  912. package/skills/incident-commander/expected_outputs/simple_incident_classification.txt +44 -0
  913. package/skills/incident-commander/expected_outputs/timeline_reconstruction_text_output.txt +110 -0
  914. package/skills/incident-commander/references/communication_templates.md +591 -0
  915. package/skills/incident-commander/references/incident-response-framework.md +372 -0
  916. package/skills/incident-commander/references/incident_severity_matrix.md +292 -0
  917. package/skills/incident-commander/references/rca_frameworks_guide.md +562 -0
  918. package/skills/incident-commander/references/reference-information.md +201 -0
  919. package/skills/incident-commander/references/sla-management-guide.md +566 -0
  920. package/skills/incident-commander/scripts/incident_classifier.py +914 -0
  921. package/skills/incident-commander/scripts/incident_timeline_builder.py +742 -0
  922. package/skills/incident-commander/scripts/pir_generator.py +1638 -0
  923. package/skills/incident-commander/scripts/postmortem_generator.py +804 -0
  924. package/skills/incident-commander/scripts/severity_classifier.py +1228 -0
  925. package/skills/incident-commander/scripts/timeline_reconstructor.py +1007 -0
  926. package/skills/incident-response/SKILL.md +103 -0
  927. package/skills/incident-response/references/regulatory-deadlines.md +125 -0
  928. package/skills/incident-response/scripts/incident_triage.py +768 -0
  929. package/skills/information-security-manager-iso27001/SKILL.md +120 -0
  930. package/skills/information-security-manager-iso27001/references/incident-response.md +420 -0
  931. package/skills/information-security-manager-iso27001/references/iso27001-controls.md +381 -0
  932. package/skills/information-security-manager-iso27001/references/risk-assessment-guide.md +262 -0
  933. package/skills/information-security-manager-iso27001/scripts/compliance_checker.py +398 -0
  934. package/skills/information-security-manager-iso27001/scripts/risk_assessment.py +403 -0
  935. package/skills/internal-narrative/SKILL.md +68 -0
  936. package/skills/internal-narrative/references/narrative-frameworks.md +211 -0
  937. package/skills/internal-narrative/templates/all-hands-template.md +103 -0
  938. package/skills/intl-expansion/SKILL.md +72 -0
  939. package/skills/intl-expansion/references/market-entry-playbook.md +138 -0
  940. package/skills/intl-expansion/references/regional-guide.md +144 -0
  941. package/skills/ios-application-dev/SKILL.md +172 -0
  942. package/skills/ios-application-dev/references/accessibility.md +259 -0
  943. package/skills/ios-application-dev/references/graphics-animation.md +350 -0
  944. package/skills/ios-application-dev/references/layout-system.md +199 -0
  945. package/skills/ios-application-dev/references/metal-shader.md +178 -0
  946. package/skills/ios-application-dev/references/navigation-patterns.md +175 -0
  947. package/skills/ios-application-dev/references/swift-coding-standards.md +757 -0
  948. package/skills/ios-application-dev/references/swiftui-design-guidelines.md +1167 -0
  949. package/skills/ios-application-dev/references/system-integration.md +401 -0
  950. package/skills/ios-application-dev/references/uikit-components.md +297 -0
  951. package/skills/isms-audit-expert/SKILL.md +108 -0
  952. package/skills/isms-audit-expert/references/cloud-security-audit.md +226 -0
  953. package/skills/isms-audit-expert/references/iso27001-audit-methodology.md +260 -0
  954. package/skills/isms-audit-expert/references/security-control-testing.md +276 -0
  955. package/skills/isms-audit-expert/scripts/isms_audit_scheduler.py +279 -0
  956. package/skills/jira-tickets/SKILL.md +52 -0
  957. package/skills/jira-tickets/references/states-epics-sprints.md +43 -0
  958. package/skills/jira-tickets/references/team-data.md +51 -0
  959. package/skills/job-scheduling/SKILL.md +107 -0
  960. package/skills/jwt-strategy/SKILL.md +74 -0
  961. package/skills/jwt-strategy/references/anti-patterns.md +16 -0
  962. package/skills/jwt-strategy/references/checklist.md +13 -0
  963. package/skills/jwt-strategy/references/implementation.md +21 -0
  964. package/skills/kickoff/SKILL.md +180 -0
  965. package/skills/launch-strategy/SKILL.md +72 -0
  966. package/skills/launch-strategy/references/launch-frameworks-and-checklists.md +317 -0
  967. package/skills/launch-strategy/scripts/launch_readiness_scorer.py +301 -0
  968. package/skills/llm-cost-optimizer/SKILL.md +194 -0
  969. package/skills/local-database-setup/SKILL.md +48 -0
  970. package/skills/logging-setup/SKILL.md +79 -0
  971. package/skills/logging-setup/references/anti-patterns.md +7 -0
  972. package/skills/logging-setup/references/checklist.md +14 -0
  973. package/skills/logging-setup/references/pii-audit-access.md +25 -0
  974. package/skills/ma-playbook/SKILL.md +72 -0
  975. package/skills/ma-playbook/references/due-diligence-checklist.md +148 -0
  976. package/skills/ma-playbook/references/integration-playbook.md +145 -0
  977. package/skills/map-systems/SKILL.md +82 -0
  978. package/skills/map-systems/references/dependency-layers-priorities.md +36 -0
  979. package/skills/map-systems/references/implicit-systems.md +13 -0
  980. package/skills/marketing-context/SKILL.md +167 -0
  981. package/skills/marketing-context/references/context-template.md +64 -0
  982. package/skills/marketing-context/scripts/context_validator.py +219 -0
  983. package/skills/marketing-context/templates/marketing-context-template.md +133 -0
  984. package/skills/marketing-demand-acquisition/SKILL.md +124 -0
  985. package/skills/marketing-demand-acquisition/references/attribution-guide.md +217 -0
  986. package/skills/marketing-demand-acquisition/references/campaign-templates.md +221 -0
  987. package/skills/marketing-demand-acquisition/references/hubspot-workflows.md +168 -0
  988. package/skills/marketing-demand-acquisition/references/international-playbooks.md +200 -0
  989. package/skills/marketing-demand-acquisition/scripts/calculate_cac.py +101 -0
  990. package/skills/marketing-ideas/SKILL.md +83 -0
  991. package/skills/marketing-ideas/references/ideas-by-category.md +347 -0
  992. package/skills/marketing-ops/SKILL.md +188 -0
  993. package/skills/marketing-ops/references/routing-matrix.md +37 -0
  994. package/skills/marketing-ops/scripts/campaign_tracker.py +156 -0
  995. package/skills/marketing-psychology/SKILL.md +121 -0
  996. package/skills/marketing-psychology/references/mental-models-catalog.md +397 -0
  997. package/skills/marketing-strategy-pmm/SKILL.md +130 -0
  998. package/skills/marketing-strategy-pmm/references/international-gtm.md +401 -0
  999. package/skills/marketing-strategy-pmm/references/launch-checklists.md +333 -0
  1000. package/skills/marketing-strategy-pmm/references/messaging-templates.md +446 -0
  1001. package/skills/marketing-strategy-pmm/references/positioning-frameworks.md +279 -0
  1002. package/skills/mcp-server-builder/SKILL.md +109 -0
  1003. package/skills/mcp-server-builder/references/openapi-extraction-guide.md +34 -0
  1004. package/skills/mcp-server-builder/references/python-server-template.md +22 -0
  1005. package/skills/mcp-server-builder/references/typescript-server-template.md +19 -0
  1006. package/skills/mcp-server-builder/references/validation-checklist.md +30 -0
  1007. package/skills/mcp-server-builder/scripts/mcp_validator.py +186 -0
  1008. package/skills/mcp-server-builder/scripts/openapi_to_mcp.py +284 -0
  1009. package/skills/mdr-745-specialist/SKILL.md +110 -0
  1010. package/skills/mdr-745-specialist/references/clinical-evidence-requirements.md +303 -0
  1011. package/skills/mdr-745-specialist/references/mdr-classification-guide.md +289 -0
  1012. package/skills/mdr-745-specialist/references/technical-documentation-templates.md +355 -0
  1013. package/skills/mdr-745-specialist/scripts/mdr_gap_analyzer.py +511 -0
  1014. package/skills/meeting-analyzer/SKILL.md +99 -0
  1015. package/skills/meeting-analyzer/references/analysis-modules.md +92 -0
  1016. package/skills/meeting-to-tasks/SKILL.md +63 -0
  1017. package/skills/mfa-setup/SKILL.md +111 -0
  1018. package/skills/mfa-setup/references/anti-patterns.md +15 -0
  1019. package/skills/mfa-setup/references/checklist.md +17 -0
  1020. package/skills/mfa-setup/references/rate-limiting.md +10 -0
  1021. package/skills/mfa-setup/references/role-rules.md +9 -0
  1022. package/skills/mfa-setup/references/schema-db.md +5 -0
  1023. package/skills/milestone-review/SKILL.md +46 -0
  1024. package/skills/monorepo-setup/SKILL.md +66 -0
  1025. package/skills/monorepo-setup/references/anti-patterns-and-checklist.md +27 -0
  1026. package/skills/ms365-tenant-manager/SKILL.md +104 -0
  1027. package/skills/ms365-tenant-manager/expected_output.json +86 -0
  1028. package/skills/ms365-tenant-manager/references/powershell-templates.md +704 -0
  1029. package/skills/ms365-tenant-manager/references/security-policies.md +357 -0
  1030. package/skills/ms365-tenant-manager/references/troubleshooting.md +411 -0
  1031. package/skills/ms365-tenant-manager/references/workflow-scripts.md +145 -0
  1032. package/skills/ms365-tenant-manager/sample_input.json +21 -0
  1033. package/skills/ms365-tenant-manager/scripts/powershell_generator.py +430 -0
  1034. package/skills/ms365-tenant-manager/scripts/tenant_setup.py +447 -0
  1035. package/skills/ms365-tenant-manager/scripts/user_management.py +447 -0
  1036. package/skills/oauth-setup/SKILL.md +92 -0
  1037. package/skills/observability/SKILL.md +88 -0
  1038. package/skills/observability-ops/SKILL.md +42 -0
  1039. package/skills/observability-ops/references/anti-patterns.md +14 -0
  1040. package/skills/observability-ops/references/slo-sli-framework.md +44 -0
  1041. package/skills/observability-ops/references/tracing-setup.md +35 -0
  1042. package/skills/observability-setup/SKILL.md +43 -0
  1043. package/skills/observability-setup/references/conventions-and-anti-patterns.md +32 -0
  1044. package/skills/observability-setup/references/stack-setup-details.md +23 -0
  1045. package/skills/onboard/SKILL.md +123 -0
  1046. package/skills/onboarding-cro/SKILL.md +149 -0
  1047. package/skills/onboarding-cro/references/experiments.md +89 -0
  1048. package/skills/onboarding-cro/scripts/activation_funnel_analyzer.py +217 -0
  1049. package/skills/optimize/SKILL.md +27 -0
  1050. package/skills/org-health-diagnostic/SKILL.md +79 -0
  1051. package/skills/org-health-diagnostic/references/health-benchmarks.md +217 -0
  1052. package/skills/org-health-diagnostic/scripts/health_scorer.py +585 -0
  1053. package/skills/owasp-top10-check/SKILL.md +110 -0
  1054. package/skills/owasp-top10-check/references/anti-patterns.md +19 -0
  1055. package/skills/owasp-top10-check/references/educabot-specifics.md +6 -0
  1056. package/skills/owasp-top10-check/references/tools.md +9 -0
  1057. package/skills/page-cro/SKILL.md +160 -0
  1058. package/skills/page-cro/references/experiments.md +71 -0
  1059. package/skills/page-cro/scripts/conversion_audit.py +427 -0
  1060. package/skills/paid-ads/SKILL.md +162 -0
  1061. package/skills/paid-ads/references/ad-copy-templates.md +200 -0
  1062. package/skills/paid-ads/references/audience-targeting.md +234 -0
  1063. package/skills/paid-ads/references/campaign-structure.md +103 -0
  1064. package/skills/paid-ads/references/platform-setup-checklists.md +269 -0
  1065. package/skills/paid-ads/scripts/roas_calculator.py +304 -0
  1066. package/skills/patch-notes/SKILL.md +51 -0
  1067. package/skills/paywall-upgrade-cro/SKILL.md +189 -0
  1068. package/skills/paywall-upgrade-cro/references/experiments.md +78 -0
  1069. package/skills/pdf-generator/SKILL.md +181 -0
  1070. package/skills/pdf-generator/design/design.md +381 -0
  1071. package/skills/pdf-generator/scripts/cover.py +1579 -0
  1072. package/skills/pdf-generator/scripts/fill_inspect.py +200 -0
  1073. package/skills/pdf-generator/scripts/fill_write.py +242 -0
  1074. package/skills/pdf-generator/scripts/make.sh +491 -0
  1075. package/skills/pdf-generator/scripts/merge.py +112 -0
  1076. package/skills/pdf-generator/scripts/palette.py +521 -0
  1077. package/skills/pdf-generator/scripts/reformat_parse.py +374 -0
  1078. package/skills/pdf-generator/scripts/render_body.py +1052 -0
  1079. package/skills/pdf-generator/scripts/render_cover.js +111 -0
  1080. package/skills/perf-profile/SKILL.md +82 -0
  1081. package/skills/performance/SKILL.md +37 -0
  1082. package/skills/performance/references/anti-patterns.md +25 -0
  1083. package/skills/performance/references/cache-strategy.md +48 -0
  1084. package/skills/performance/references/rate-limit-config.md +48 -0
  1085. package/skills/performance-test/SKILL.md +87 -0
  1086. package/skills/playtest-report/SKILL.md +45 -0
  1087. package/skills/playwright-pro/.mcp.json +27 -0
  1088. package/skills/playwright-pro/CLAUDE.md +84 -0
  1089. package/skills/playwright-pro/LICENSE +21 -0
  1090. package/skills/playwright-pro/SKILL.md +91 -0
  1091. package/skills/playwright-pro/agents/migration-planner.md +121 -0
  1092. package/skills/playwright-pro/agents/test-architect.md +105 -0
  1093. package/skills/playwright-pro/agents/test-debugger.md +117 -0
  1094. package/skills/playwright-pro/hooks/detect-playwright.sh +23 -0
  1095. package/skills/playwright-pro/hooks/hooks.json +25 -0
  1096. package/skills/playwright-pro/hooks/validate-test.sh +58 -0
  1097. package/skills/playwright-pro/references/assertions.md +89 -0
  1098. package/skills/playwright-pro/references/common-pitfalls.md +137 -0
  1099. package/skills/playwright-pro/references/fixtures.md +121 -0
  1100. package/skills/playwright-pro/references/flaky-tests.md +56 -0
  1101. package/skills/playwright-pro/references/golden-rules.md +12 -0
  1102. package/skills/playwright-pro/references/locators.md +77 -0
  1103. package/skills/playwright-pro/settings.json +8 -0
  1104. package/skills/playwright-pro/skills/browserstack/SKILL.md +169 -0
  1105. package/skills/playwright-pro/skills/fix/SKILL.md +114 -0
  1106. package/skills/playwright-pro/skills/fix/flaky-taxonomy.md +134 -0
  1107. package/skills/playwright-pro/skills/generate/SKILL.md +145 -0
  1108. package/skills/playwright-pro/skills/generate/patterns.md +163 -0
  1109. package/skills/playwright-pro/skills/init/SKILL.md +168 -0
  1110. package/skills/playwright-pro/skills/migrate/SKILL.md +136 -0
  1111. package/skills/playwright-pro/skills/migrate/cypress-mapping.md +79 -0
  1112. package/skills/playwright-pro/skills/migrate/selenium-mapping.md +94 -0
  1113. package/skills/playwright-pro/skills/report/SKILL.md +127 -0
  1114. package/skills/playwright-pro/skills/review/SKILL.md +103 -0
  1115. package/skills/playwright-pro/skills/review/anti-patterns.md +182 -0
  1116. package/skills/playwright-pro/skills/testrail/SKILL.md +130 -0
  1117. package/skills/playwright-pro/templates/README.md +123 -0
  1118. package/skills/playwright-pro/templates/accessibility/color-contrast.md +162 -0
  1119. package/skills/playwright-pro/templates/accessibility/keyboard-navigation.md +149 -0
  1120. package/skills/playwright-pro/templates/accessibility/screen-reader.md +159 -0
  1121. package/skills/playwright-pro/templates/api/auth-headers.md +148 -0
  1122. package/skills/playwright-pro/templates/api/error-responses.md +157 -0
  1123. package/skills/playwright-pro/templates/api/graphql.md +174 -0
  1124. package/skills/playwright-pro/templates/api/rate-limiting.md +152 -0
  1125. package/skills/playwright-pro/templates/api/rest-crud.md +152 -0
  1126. package/skills/playwright-pro/templates/auth/login.md +119 -0
  1127. package/skills/playwright-pro/templates/auth/logout.md +112 -0
  1128. package/skills/playwright-pro/templates/auth/mfa.md +125 -0
  1129. package/skills/playwright-pro/templates/auth/password-reset.md +129 -0
  1130. package/skills/playwright-pro/templates/auth/rbac.md +132 -0
  1131. package/skills/playwright-pro/templates/auth/remember-me.md +127 -0
  1132. package/skills/playwright-pro/templates/auth/session-timeout.md +113 -0
  1133. package/skills/playwright-pro/templates/auth/sso.md +115 -0
  1134. package/skills/playwright-pro/templates/checkout/add-to-cart.md +112 -0
  1135. package/skills/playwright-pro/templates/checkout/apply-coupon.md +123 -0
  1136. package/skills/playwright-pro/templates/checkout/order-confirm.md +108 -0
  1137. package/skills/playwright-pro/templates/checkout/order-history.md +119 -0
  1138. package/skills/playwright-pro/templates/checkout/payment.md +148 -0
  1139. package/skills/playwright-pro/templates/checkout/update-quantity.md +125 -0
  1140. package/skills/playwright-pro/templates/crud/bulk-operations.md +129 -0
  1141. package/skills/playwright-pro/templates/crud/create.md +118 -0
  1142. package/skills/playwright-pro/templates/crud/delete.md +116 -0
  1143. package/skills/playwright-pro/templates/crud/read.md +117 -0
  1144. package/skills/playwright-pro/templates/crud/soft-delete.md +113 -0
  1145. package/skills/playwright-pro/templates/crud/update.md +129 -0
  1146. package/skills/playwright-pro/templates/dashboard/chart-rendering.md +131 -0
  1147. package/skills/playwright-pro/templates/dashboard/data-loading.md +128 -0
  1148. package/skills/playwright-pro/templates/dashboard/date-range-filter.md +136 -0
  1149. package/skills/playwright-pro/templates/dashboard/export.md +146 -0
  1150. package/skills/playwright-pro/templates/dashboard/realtime-updates.md +143 -0
  1151. package/skills/playwright-pro/templates/forms/autosave.md +135 -0
  1152. package/skills/playwright-pro/templates/forms/conditional-fields.md +120 -0
  1153. package/skills/playwright-pro/templates/forms/file-upload.md +136 -0
  1154. package/skills/playwright-pro/templates/forms/multi-step.md +137 -0
  1155. package/skills/playwright-pro/templates/forms/single-step.md +124 -0
  1156. package/skills/playwright-pro/templates/forms/validation.md +141 -0
  1157. package/skills/playwright-pro/templates/notifications/in-app.md +125 -0
  1158. package/skills/playwright-pro/templates/notifications/notification-center.md +128 -0
  1159. package/skills/playwright-pro/templates/notifications/toast-messages.md +139 -0
  1160. package/skills/playwright-pro/templates/onboarding/email-verification.md +118 -0
  1161. package/skills/playwright-pro/templates/onboarding/first-time-setup.md +130 -0
  1162. package/skills/playwright-pro/templates/onboarding/registration.md +131 -0
  1163. package/skills/playwright-pro/templates/onboarding/welcome-tour.md +128 -0
  1164. package/skills/playwright-pro/templates/search/basic-search.md +118 -0
  1165. package/skills/playwright-pro/templates/search/empty-state.md +109 -0
  1166. package/skills/playwright-pro/templates/search/filters.md +128 -0
  1167. package/skills/playwright-pro/templates/search/pagination.md +123 -0
  1168. package/skills/playwright-pro/templates/search/sorting.md +131 -0
  1169. package/skills/playwright-pro/templates/settings/account-delete.md +136 -0
  1170. package/skills/playwright-pro/templates/settings/notification-prefs.md +139 -0
  1171. package/skills/playwright-pro/templates/settings/password-change.md +143 -0
  1172. package/skills/playwright-pro/templates/settings/profile-update.md +130 -0
  1173. package/skills/popup-cro/SKILL.md +142 -0
  1174. package/skills/popup-cro/references/experiments.md +88 -0
  1175. package/skills/popup-cro/references/popup-cro-playbook.md +261 -0
  1176. package/skills/postman/SKILL.md +79 -0
  1177. package/skills/pptx-generator/SKILL.md +246 -0
  1178. package/skills/pptx-generator/references/design-system.md +392 -0
  1179. package/skills/pptx-generator/references/editing.md +162 -0
  1180. package/skills/pptx-generator/references/pitfalls.md +112 -0
  1181. package/skills/pptx-generator/references/pptxgenjs.md +420 -0
  1182. package/skills/pptx-generator/references/slide-types.md +413 -0
  1183. package/skills/pricing-strategy/SKILL.md +101 -0
  1184. package/skills/pricing-strategy/references/pricing-models.md +194 -0
  1185. package/skills/pricing-strategy/references/pricing-page-playbook.md +221 -0
  1186. package/skills/pricing-strategy/scripts/pricing_modeler.py +283 -0
  1187. package/skills/product-analytics/SKILL.md +151 -0
  1188. package/skills/product-analytics/references/dashboard-templates.md +66 -0
  1189. package/skills/product-analytics/references/metrics-frameworks.md +84 -0
  1190. package/skills/product-analytics/scripts/metrics_calculator.py +195 -0
  1191. package/skills/product-discovery/SKILL.md +118 -0
  1192. package/skills/product-discovery/references/discovery-frameworks.md +72 -0
  1193. package/skills/product-discovery/scripts/assumption_mapper.py +123 -0
  1194. package/skills/product-manager-toolkit/SKILL.md +121 -0
  1195. package/skills/product-manager-toolkit/assets/prd_template.md +132 -0
  1196. package/skills/product-manager-toolkit/assets/rice_input_template.csv +4 -0
  1197. package/skills/product-manager-toolkit/references/frameworks.md +559 -0
  1198. package/skills/product-manager-toolkit/references/input-output-examples.md +156 -0
  1199. package/skills/product-manager-toolkit/references/prd_templates.md +317 -0
  1200. package/skills/product-manager-toolkit/scripts/customer_interview_analyzer.py +452 -0
  1201. package/skills/product-manager-toolkit/scripts/rice_prioritizer.py +296 -0
  1202. package/skills/product-spec/SKILL.md +65 -0
  1203. package/skills/product-strategist/SKILL.md +122 -0
  1204. package/skills/product-strategist/assets/okr_template.md +106 -0
  1205. package/skills/product-strategist/references/examples/sample_growth_okrs.json +366 -0
  1206. package/skills/product-strategist/references/okr_framework.md +328 -0
  1207. package/skills/product-strategist/references/strategy_types.md +320 -0
  1208. package/skills/product-strategist/scripts/okr_cascade_generator.py +592 -0
  1209. package/skills/programmatic-seo/SKILL.md +156 -0
  1210. package/skills/programmatic-seo/references/playbooks.md +72 -0
  1211. package/skills/programmatic-seo/scripts/url_pattern_generator.py +194 -0
  1212. package/skills/prompt-engineer-toolkit/README.md +51 -0
  1213. package/skills/prompt-engineer-toolkit/SKILL.md +136 -0
  1214. package/skills/prompt-engineer-toolkit/references/evaluation-rubric.md +14 -0
  1215. package/skills/prompt-engineer-toolkit/references/prompt-templates.md +105 -0
  1216. package/skills/prompt-engineer-toolkit/references/technique-guide.md +25 -0
  1217. package/skills/prompt-engineer-toolkit/scripts/prompt_tester.py +239 -0
  1218. package/skills/prompt-engineer-toolkit/scripts/prompt_versioner.py +235 -0
  1219. package/skills/prototype/SKILL.md +54 -0
  1220. package/skills/qa-plan/SKILL.md +77 -0
  1221. package/skills/qms-audit-expert/SKILL.md +116 -0
  1222. package/skills/qms-audit-expert/references/iso13485-audit-guide.md +388 -0
  1223. package/skills/qms-audit-expert/references/nonconformity-classification.md +221 -0
  1224. package/skills/qms-audit-expert/scripts/audit_schedule_optimizer.py +420 -0
  1225. package/skills/quality-documentation-manager/SKILL.md +140 -0
  1226. package/skills/quality-documentation-manager/references/21cfr11-compliance-guide.md +398 -0
  1227. package/skills/quality-documentation-manager/references/document-control-procedures.md +340 -0
  1228. package/skills/quality-documentation-manager/scripts/document_validator.py +646 -0
  1229. package/skills/quality-documentation-manager/scripts/document_version_control.py +466 -0
  1230. package/skills/quality-manager-qmr/SKILL.md +129 -0
  1231. package/skills/quality-manager-qmr/references/management-review-guide.md +378 -0
  1232. package/skills/quality-manager-qmr/references/quality-kpi-framework.md +296 -0
  1233. package/skills/quality-manager-qmr/scripts/management_review_tracker.py +580 -0
  1234. package/skills/quality-manager-qmr/scripts/quality_effectiveness_monitor.py +481 -0
  1235. package/skills/quality-manager-qms-iso13485/SKILL.md +129 -0
  1236. package/skills/quality-manager-qms-iso13485/references/iso13485-clause-requirements.md +726 -0
  1237. package/skills/quality-manager-qms-iso13485/references/qms-process-templates.md +876 -0
  1238. package/skills/quality-manager-qms-iso13485/scripts/qms_audit_checklist.py +886 -0
  1239. package/skills/query-optimization/SKILL.md +107 -0
  1240. package/skills/quick-design/SKILL.md +47 -0
  1241. package/skills/rag-architect/SKILL.md +117 -0
  1242. package/skills/rag-architect/references/chunking_strategies_comparison.md +287 -0
  1243. package/skills/rag-architect/references/embedding_model_benchmark.md +338 -0
  1244. package/skills/rag-architect/references/rag_evaluation_framework.md +431 -0
  1245. package/skills/rag-architect/scripts/chunking_optimizer.py +787 -0
  1246. package/skills/rag-architect/scripts/rag_pipeline_designer.py +680 -0
  1247. package/skills/rag-architect/scripts/retrieval_evaluator.py +578 -0
  1248. package/skills/rate-limiting/SKILL.md +114 -0
  1249. package/skills/rbac-abac/SKILL.md +70 -0
  1250. package/skills/rbac-abac/references/anti-patterns.md +14 -0
  1251. package/skills/rbac-abac/references/checklist.md +13 -0
  1252. package/skills/rbac-abac/references/schema-jwt-cache.md +27 -0
  1253. package/skills/react-native-dev/SKILL.md +139 -0
  1254. package/skills/react-native-dev/references/animations.md +254 -0
  1255. package/skills/react-native-dev/references/components.md +124 -0
  1256. package/skills/react-native-dev/references/engineering.md +527 -0
  1257. package/skills/react-native-dev/references/forms.md +300 -0
  1258. package/skills/react-native-dev/references/native-capabilities.md +163 -0
  1259. package/skills/react-native-dev/references/navigation.md +271 -0
  1260. package/skills/react-native-dev/references/networking.md +346 -0
  1261. package/skills/react-native-dev/references/performance.md +215 -0
  1262. package/skills/react-native-dev/references/state-management.md +230 -0
  1263. package/skills/react-native-dev/references/styling.md +117 -0
  1264. package/skills/react-native-dev/references/testing.md +342 -0
  1265. package/skills/read-replicas/SKILL.md +46 -0
  1266. package/skills/read-replicas/references/anti-patterns-checklist.md +26 -0
  1267. package/skills/read-replicas/references/consistency-connection.md +24 -0
  1268. package/skills/read-replicas/references/ha-dr.md +18 -0
  1269. package/skills/red-team/SKILL.md +120 -0
  1270. package/skills/red-team/references/attack-path-methodology.md +135 -0
  1271. package/skills/red-team/scripts/engagement_planner.py +420 -0
  1272. package/skills/referral-program/SKILL.md +189 -0
  1273. package/skills/referral-program/references/loop-and-incentives.md +81 -0
  1274. package/skills/referral-program/references/measurement-framework.md +199 -0
  1275. package/skills/referral-program/references/program-mechanics.md +212 -0
  1276. package/skills/referral-program/scripts/referral_roi_calculator.py +420 -0
  1277. package/skills/regression-suite/SKILL.md +89 -0
  1278. package/skills/regulatory-affairs-head/SKILL.md +117 -0
  1279. package/skills/regulatory-affairs-head/references/eu-mdr-submission-guide.md +95 -0
  1280. package/skills/regulatory-affairs-head/references/fda-submission-guide.md +127 -0
  1281. package/skills/regulatory-affairs-head/references/global-regulatory-pathways.md +283 -0
  1282. package/skills/regulatory-affairs-head/references/iso-regulatory-requirements.md +363 -0
  1283. package/skills/regulatory-affairs-head/scripts/regulatory_pathway_analyzer.py +557 -0
  1284. package/skills/regulatory-affairs-head/scripts/regulatory_tracker.py +199 -0
  1285. package/skills/release/SKILL.md +89 -0
  1286. package/skills/release-announce/SKILL.md +64 -0
  1287. package/skills/release-checklist/SKILL.md +63 -0
  1288. package/skills/research-summarizer/SKILL.md +94 -0
  1289. package/skills/research-summarizer/references/citation-formats.md +105 -0
  1290. package/skills/research-summarizer/references/summary-templates.md +120 -0
  1291. package/skills/research-summarizer/scripts/extract_citations.py +309 -0
  1292. package/skills/research-summarizer/scripts/format_summary.py +244 -0
  1293. package/skills/retrospective/SKILL.md +72 -0
  1294. package/skills/revenue-operations/SKILL.md +101 -0
  1295. package/skills/revenue-operations/assets/expected_output.json +117 -0
  1296. package/skills/revenue-operations/assets/forecast_report_template.md +149 -0
  1297. package/skills/revenue-operations/assets/gtm_dashboard_template.md +215 -0
  1298. package/skills/revenue-operations/assets/pipeline_review_template.md +138 -0
  1299. package/skills/revenue-operations/assets/sample_forecast_data.json +23 -0
  1300. package/skills/revenue-operations/assets/sample_gtm_data.json +24 -0
  1301. package/skills/revenue-operations/assets/sample_pipeline_data.json +160 -0
  1302. package/skills/revenue-operations/references/gtm-efficiency-benchmarks.md +257 -0
  1303. package/skills/revenue-operations/references/pipeline-management-framework.md +292 -0
  1304. package/skills/revenue-operations/references/revops-metrics-guide.md +304 -0
  1305. package/skills/revenue-operations/scripts/forecast_accuracy_tracker.py +531 -0
  1306. package/skills/revenue-operations/scripts/gtm_efficiency_calculator.py +658 -0
  1307. package/skills/revenue-operations/scripts/pipeline_analyzer.py +496 -0
  1308. package/skills/reverse-document/SKILL.md +70 -0
  1309. package/skills/risk-management-specialist/SKILL.md +125 -0
  1310. package/skills/risk-management-specialist/references/iso14971-implementation-guide.md +468 -0
  1311. package/skills/risk-management-specialist/references/risk-analysis-methods.md +415 -0
  1312. package/skills/risk-management-specialist/references/risk-assessment-templates.md +77 -0
  1313. package/skills/risk-management-specialist/scripts/fmea_analyzer.py +442 -0
  1314. package/skills/risk-management-specialist/scripts/risk_matrix_calculator.py +419 -0
  1315. package/skills/roadmap-communicator/SKILL.md +96 -0
  1316. package/skills/roadmap-communicator/references/communication-templates.md +63 -0
  1317. package/skills/roadmap-communicator/references/roadmap-templates.md +44 -0
  1318. package/skills/roadmap-communicator/scripts/changelog_generator.py +151 -0
  1319. package/skills/rollback-strategy/SKILL.md +80 -0
  1320. package/skills/rollback-strategy/references/anti-patterns.md +14 -0
  1321. package/skills/rollback-strategy/references/canary-auto-rollback.md +17 -0
  1322. package/skills/rollback-strategy/references/communication-protocol.md +6 -0
  1323. package/skills/rollback-strategy/references/mobile-rollback.md +10 -0
  1324. package/skills/rollback-strategy/references/pre-deploy-checklist.md +15 -0
  1325. package/skills/rollback-strategy/references/runbook-commands.md +147 -0
  1326. package/skills/run-migrations/SKILL.md +67 -0
  1327. package/skills/runbooks/SKILL.md +57 -0
  1328. package/skills/runbooks/references/anti-patterns.md +6 -0
  1329. package/skills/runbooks/references/checklist.md +13 -0
  1330. package/skills/runbooks/references/lifecycle.md +14 -0
  1331. package/skills/runbooks/references/writing-principles.md +9 -0
  1332. package/skills/runbooks/templates/runbook.md +80 -0
  1333. package/skills/saas-metrics-coach/SKILL.md +156 -0
  1334. package/skills/saas-metrics-coach/assets/input-template.md +29 -0
  1335. package/skills/saas-metrics-coach/references/benchmarks.md +101 -0
  1336. package/skills/saas-metrics-coach/references/formulas.md +103 -0
  1337. package/skills/saas-metrics-coach/scripts/metrics_calculator.py +217 -0
  1338. package/skills/saas-metrics-coach/scripts/quick_ratio_calculator.py +173 -0
  1339. package/skills/saas-metrics-coach/scripts/unit_economics_simulator.py +205 -0
  1340. package/skills/sales-engineer/SKILL.md +104 -0
  1341. package/skills/sales-engineer/assets/demo_script_template.md +232 -0
  1342. package/skills/sales-engineer/assets/expected_output.json +474 -0
  1343. package/skills/sales-engineer/assets/poc_scorecard_template.md +213 -0
  1344. package/skills/sales-engineer/assets/sample_rfp_data.json +219 -0
  1345. package/skills/sales-engineer/assets/technical_proposal_template.md +231 -0
  1346. package/skills/sales-engineer/references/competitive-positioning-framework.md +226 -0
  1347. package/skills/sales-engineer/references/poc-best-practices.md +277 -0
  1348. package/skills/sales-engineer/references/rfp-response-guide.md +189 -0
  1349. package/skills/sales-engineer/scripts/competitive_matrix_builder.py +525 -0
  1350. package/skills/sales-engineer/scripts/poc_planner.py +765 -0
  1351. package/skills/sales-engineer/scripts/rfp_response_analyzer.py +557 -0
  1352. package/skills/scaffold-fastify-ts/SKILL.md +77 -0
  1353. package/skills/scaffold-fastify-ts/references/anti-patterns.md +10 -0
  1354. package/skills/scaffold-fastify-ts/references/key-decisions.md +27 -0
  1355. package/skills/scaffold-go/SKILL.md +77 -0
  1356. package/skills/scaffold-go/references/patterns.md +22 -0
  1357. package/skills/scaffold-go/references/project-structure.md +15 -0
  1358. package/skills/scaffold-react-native/SKILL.md +69 -0
  1359. package/skills/scaffold-react-native/references/conventions.md +26 -0
  1360. package/skills/scaffold-react-native/references/workflow-and-navigation.md +22 -0
  1361. package/skills/scaffold-react-vite/SKILL.md +76 -0
  1362. package/skills/scaffold-react-vite/references/anti-patterns.md +9 -0
  1363. package/skills/scaffold-react-vite/references/dependency-baseline.md +22 -0
  1364. package/skills/scaffold-unity/SKILL.md +52 -0
  1365. package/skills/scaffold-unity/references/folder-structure-and-files.md +43 -0
  1366. package/skills/scaffold-unity/references/naming-conventions.md +11 -0
  1367. package/skills/scenario-war-room/SKILL.md +81 -0
  1368. package/skills/scenario-war-room/references/cascade-model.md +103 -0
  1369. package/skills/scenario-war-room/references/scenario-planning.md +212 -0
  1370. package/skills/scenario-war-room/scripts/scenario_modeler.py +486 -0
  1371. package/skills/schema-markup/SKILL.md +184 -0
  1372. package/skills/schema-markup/references/implementation-patterns.md +437 -0
  1373. package/skills/schema-markup/references/schema-types-guide.md +285 -0
  1374. package/skills/schema-markup/references/testing-and-mistakes.md +43 -0
  1375. package/skills/schema-markup/scripts/schema_validator.py +442 -0
  1376. package/skills/scope-check/SKILL.md +67 -0
  1377. package/skills/scope-check/references/report-template.md +56 -0
  1378. package/skills/scrum-master/SKILL.md +128 -0
  1379. package/skills/scrum-master/assets/expected_output.json +131 -0
  1380. package/skills/scrum-master/assets/expected_velocity_output.json +85 -0
  1381. package/skills/scrum-master/assets/sample_sprint_data.json +821 -0
  1382. package/skills/scrum-master/assets/sprint_report_template.md +214 -0
  1383. package/skills/scrum-master/assets/team_health_check_template.md +380 -0
  1384. package/skills/scrum-master/references/retro-formats.md +336 -0
  1385. package/skills/scrum-master/references/team-dynamics-framework.md +561 -0
  1386. package/skills/scrum-master/references/velocity-forecasting-guide.md +386 -0
  1387. package/skills/scrum-master/scripts/retrospective_analyzer.py +914 -0
  1388. package/skills/scrum-master/scripts/sprint_health_scorer.py +744 -0
  1389. package/skills/scrum-master/scripts/velocity_analyzer.py +580 -0
  1390. package/skills/search-setup/SKILL.md +49 -0
  1391. package/skills/search-setup/references/anti-patterns-checklist.md +24 -0
  1392. package/skills/search-setup/references/engine-details.md +15 -0
  1393. package/skills/search-setup/references/indexing-pipeline.md +11 -0
  1394. package/skills/search-setup/references/observability.md +6 -0
  1395. package/skills/secret-management/SKILL.md +49 -0
  1396. package/skills/secret-management/references/anti-patterns.md +7 -0
  1397. package/skills/secret-management/references/checklist.md +13 -0
  1398. package/skills/secret-management/references/implementation-details.md +37 -0
  1399. package/skills/security-audit/SKILL.md +86 -0
  1400. package/skills/security-pen-testing/SKILL.md +114 -0
  1401. package/skills/security-pen-testing/references/attack_patterns.md +629 -0
  1402. package/skills/security-pen-testing/references/owasp_top_10_checklist.md +440 -0
  1403. package/skills/security-pen-testing/references/responsible_disclosure.md +317 -0
  1404. package/skills/security-pen-testing/scripts/dependency_auditor.py +455 -0
  1405. package/skills/security-pen-testing/scripts/pentest_report_generator.py +462 -0
  1406. package/skills/security-pen-testing/scripts/vulnerability_scanner.py +545 -0
  1407. package/skills/self-improving-agent/.claude-plugin/plugin.json +13 -0
  1408. package/skills/self-improving-agent/CLAUDE.md +79 -0
  1409. package/skills/self-improving-agent/LICENSE +21 -0
  1410. package/skills/self-improving-agent/SKILL.md +112 -0
  1411. package/skills/self-improving-agent/agents/memory-analyst.md +74 -0
  1412. package/skills/self-improving-agent/agents/skill-extractor.md +110 -0
  1413. package/skills/self-improving-agent/hooks/error-capture.sh +110 -0
  1414. package/skills/self-improving-agent/hooks/hooks.json +15 -0
  1415. package/skills/self-improving-agent/reference/memory-architecture.md +131 -0
  1416. package/skills/self-improving-agent/reference/promotion-rules.md +83 -0
  1417. package/skills/self-improving-agent/reference/rules-directory-patterns.md +137 -0
  1418. package/skills/self-improving-agent/settings.json +28 -0
  1419. package/skills/self-improving-agent/skills/extract/SKILL.md +182 -0
  1420. package/skills/self-improving-agent/skills/promote/SKILL.md +148 -0
  1421. package/skills/self-improving-agent/skills/remember/SKILL.md +102 -0
  1422. package/skills/self-improving-agent/skills/review/SKILL.md +130 -0
  1423. package/skills/self-improving-agent/skills/status/SKILL.md +107 -0
  1424. package/skills/self-improving-agent/templates/rule-template.md +17 -0
  1425. package/skills/self-improving-agent/templates/skill-template.md +53 -0
  1426. package/skills/senior-computer-vision/SKILL.md +125 -0
  1427. package/skills/senior-computer-vision/references/computer_vision_architectures.md +683 -0
  1428. package/skills/senior-computer-vision/references/object_detection_optimization.md +885 -0
  1429. package/skills/senior-computer-vision/references/production_vision_systems.md +1226 -0
  1430. package/skills/senior-computer-vision/references/reference-docs-and-commands.md +96 -0
  1431. package/skills/senior-computer-vision/scripts/dataset_pipeline_builder.py +1699 -0
  1432. package/skills/senior-computer-vision/scripts/inference_optimizer.py +557 -0
  1433. package/skills/senior-computer-vision/scripts/vision_model_trainer.py +576 -0
  1434. package/skills/senior-data-engineer/SKILL.md +198 -0
  1435. package/skills/senior-data-engineer/references/data_modeling_patterns.md +1058 -0
  1436. package/skills/senior-data-engineer/references/data_pipeline_architecture.md +1100 -0
  1437. package/skills/senior-data-engineer/references/dataops_best_practices.md +1502 -0
  1438. package/skills/senior-data-engineer/references/troubleshooting.md +183 -0
  1439. package/skills/senior-data-engineer/references/workflows.md +624 -0
  1440. package/skills/senior-data-engineer/scripts/data_quality_validator.py +1636 -0
  1441. package/skills/senior-data-engineer/scripts/etl_performance_optimizer.py +1685 -0
  1442. package/skills/senior-data-engineer/scripts/pipeline_orchestrator.py +883 -0
  1443. package/skills/senior-data-scientist/SKILL.md +117 -0
  1444. package/skills/senior-data-scientist/references/experiment_design_frameworks.md +80 -0
  1445. package/skills/senior-data-scientist/references/feature_engineering_patterns.md +80 -0
  1446. package/skills/senior-data-scientist/references/statistical_methods_advanced.md +80 -0
  1447. package/skills/senior-data-scientist/scripts/experiment_designer.py +100 -0
  1448. package/skills/senior-data-scientist/scripts/feature_engineering_pipeline.py +100 -0
  1449. package/skills/senior-data-scientist/scripts/model_evaluation_suite.py +100 -0
  1450. package/skills/senior-ml-engineer/SKILL.md +121 -0
  1451. package/skills/senior-ml-engineer/references/llm_integration_guide.md +317 -0
  1452. package/skills/senior-ml-engineer/references/mlops_production_patterns.md +265 -0
  1453. package/skills/senior-ml-engineer/references/rag_system_architecture.md +371 -0
  1454. package/skills/senior-ml-engineer/scripts/ml_monitoring_suite.py +100 -0
  1455. package/skills/senior-ml-engineer/scripts/model_deployment_pipeline.py +100 -0
  1456. package/skills/senior-ml-engineer/scripts/rag_system_builder.py +100 -0
  1457. package/skills/senior-pm/SKILL.md +109 -0
  1458. package/skills/senior-pm/assets/executive_report_template.md +267 -0
  1459. package/skills/senior-pm/assets/expected_output.json +150 -0
  1460. package/skills/senior-pm/assets/project_charter_template.md +274 -0
  1461. package/skills/senior-pm/assets/raci_matrix_template.md +265 -0
  1462. package/skills/senior-pm/assets/sample_project_data.json +458 -0
  1463. package/skills/senior-pm/references/portfolio-kpis.md +32 -0
  1464. package/skills/senior-pm/references/portfolio-prioritization-models.md +645 -0
  1465. package/skills/senior-pm/references/risk-management-framework.md +485 -0
  1466. package/skills/senior-pm/scripts/project_health_dashboard.py +814 -0
  1467. package/skills/senior-pm/scripts/resource_capacity_planner.py +846 -0
  1468. package/skills/senior-pm/scripts/risk_matrix_analyzer.py +698 -0
  1469. package/skills/senior-prompt-engineer/SKILL.md +108 -0
  1470. package/skills/senior-prompt-engineer/references/agentic_system_design.md +646 -0
  1471. package/skills/senior-prompt-engineer/references/llm_evaluation_frameworks.md +524 -0
  1472. package/skills/senior-prompt-engineer/references/prompt_engineering_patterns.md +572 -0
  1473. package/skills/senior-prompt-engineer/scripts/agent_orchestrator.py +560 -0
  1474. package/skills/senior-prompt-engineer/scripts/prompt_optimizer.py +519 -0
  1475. package/skills/senior-prompt-engineer/scripts/rag_evaluator.py +574 -0
  1476. package/skills/seo-audit/SKILL.md +150 -0
  1477. package/skills/seo-audit/references/aeo-geo-patterns.md +110 -0
  1478. package/skills/seo-audit/references/ai-writing-detection.md +63 -0
  1479. package/skills/seo-audit/references/seo-audit-reference.md +289 -0
  1480. package/skills/seo-audit/scripts/seo_checker.py +361 -0
  1481. package/skills/shader-dev/SKILL.md +299 -0
  1482. package/skills/shader-dev/reference/ambient-occlusion.md +382 -0
  1483. package/skills/shader-dev/reference/analytic-ray-tracing.md +651 -0
  1484. package/skills/shader-dev/reference/anti-aliasing.md +71 -0
  1485. package/skills/shader-dev/reference/atmospheric-scattering.md +571 -0
  1486. package/skills/shader-dev/reference/camera-effects.md +80 -0
  1487. package/skills/shader-dev/reference/cellular-automata.md +635 -0
  1488. package/skills/shader-dev/reference/color-palette.md +481 -0
  1489. package/skills/shader-dev/reference/csg-boolean-operations.md +466 -0
  1490. package/skills/shader-dev/reference/domain-repetition.md +436 -0
  1491. package/skills/shader-dev/reference/domain-warping.md +419 -0
  1492. package/skills/shader-dev/reference/fluid-simulation.md +425 -0
  1493. package/skills/shader-dev/reference/fractal-rendering.md +525 -0
  1494. package/skills/shader-dev/reference/lighting-model.md +639 -0
  1495. package/skills/shader-dev/reference/matrix-transform.md +535 -0
  1496. package/skills/shader-dev/reference/multipass-buffer.md +571 -0
  1497. package/skills/shader-dev/reference/normal-estimation.md +418 -0
  1498. package/skills/shader-dev/reference/particle-system.md +589 -0
  1499. package/skills/shader-dev/reference/path-tracing-gi.md +602 -0
  1500. package/skills/shader-dev/reference/polar-uv-manipulation.md +521 -0
  1501. package/skills/shader-dev/reference/post-processing.md +375 -0
  1502. package/skills/shader-dev/reference/procedural-2d-pattern.md +439 -0
  1503. package/skills/shader-dev/reference/procedural-noise.md +551 -0
  1504. package/skills/shader-dev/reference/ray-marching.md +396 -0
  1505. package/skills/shader-dev/reference/sdf-2d.md +724 -0
  1506. package/skills/shader-dev/reference/sdf-3d.md +805 -0
  1507. package/skills/shader-dev/reference/sdf-tricks.md +63 -0
  1508. package/skills/shader-dev/reference/shadow-techniques.md +476 -0
  1509. package/skills/shader-dev/reference/simulation-physics.md +644 -0
  1510. package/skills/shader-dev/reference/sound-synthesis.md +578 -0
  1511. package/skills/shader-dev/reference/terrain-rendering.md +839 -0
  1512. package/skills/shader-dev/reference/texture-mapping-advanced.md +87 -0
  1513. package/skills/shader-dev/reference/texture-sampling.md +553 -0
  1514. package/skills/shader-dev/reference/volumetric-rendering.md +608 -0
  1515. package/skills/shader-dev/reference/voronoi-cellular-noise.md +486 -0
  1516. package/skills/shader-dev/reference/voxel-rendering.md +701 -0
  1517. package/skills/shader-dev/reference/water-ocean.md +445 -0
  1518. package/skills/shader-dev/reference/webgl-pitfalls.md +41 -0
  1519. package/skills/shader-dev/techniques/ambient-occlusion.md +364 -0
  1520. package/skills/shader-dev/techniques/analytic-ray-tracing.md +542 -0
  1521. package/skills/shader-dev/techniques/anti-aliasing.md +124 -0
  1522. package/skills/shader-dev/techniques/atmospheric-scattering.md +522 -0
  1523. package/skills/shader-dev/techniques/camera-effects.md +115 -0
  1524. package/skills/shader-dev/techniques/cellular-automata.md +531 -0
  1525. package/skills/shader-dev/techniques/color-palette.md +380 -0
  1526. package/skills/shader-dev/techniques/csg-boolean-operations.md +491 -0
  1527. package/skills/shader-dev/techniques/domain-repetition.md +333 -0
  1528. package/skills/shader-dev/techniques/domain-warping.md +414 -0
  1529. package/skills/shader-dev/techniques/fluid-simulation.md +1175 -0
  1530. package/skills/shader-dev/techniques/fractal-rendering.md +436 -0
  1531. package/skills/shader-dev/techniques/lighting-model.md +527 -0
  1532. package/skills/shader-dev/techniques/matrix-transform.md +455 -0
  1533. package/skills/shader-dev/techniques/multipass-buffer.md +922 -0
  1534. package/skills/shader-dev/techniques/normal-estimation.md +318 -0
  1535. package/skills/shader-dev/techniques/particle-system.md +1203 -0
  1536. package/skills/shader-dev/techniques/path-tracing-gi.md +623 -0
  1537. package/skills/shader-dev/techniques/polar-uv-manipulation.md +373 -0
  1538. package/skills/shader-dev/techniques/post-processing.md +788 -0
  1539. package/skills/shader-dev/techniques/procedural-2d-pattern.md +346 -0
  1540. package/skills/shader-dev/techniques/procedural-noise.md +554 -0
  1541. package/skills/shader-dev/techniques/ray-marching.md +467 -0
  1542. package/skills/shader-dev/techniques/sdf-2d.md +631 -0
  1543. package/skills/shader-dev/techniques/sdf-3d.md +589 -0
  1544. package/skills/shader-dev/techniques/sdf-tricks.md +100 -0
  1545. package/skills/shader-dev/techniques/shadow-techniques.md +776 -0
  1546. package/skills/shader-dev/techniques/simulation-physics.md +1542 -0
  1547. package/skills/shader-dev/techniques/sound-synthesis.md +490 -0
  1548. package/skills/shader-dev/techniques/terrain-rendering.md +408 -0
  1549. package/skills/shader-dev/techniques/texture-mapping-advanced.md +121 -0
  1550. package/skills/shader-dev/techniques/texture-sampling.md +382 -0
  1551. package/skills/shader-dev/techniques/volumetric-rendering.md +375 -0
  1552. package/skills/shader-dev/techniques/voronoi-cellular-noise.md +458 -0
  1553. package/skills/shader-dev/techniques/voxel-rendering.md +985 -0
  1554. package/skills/shader-dev/techniques/water-ocean.md +490 -0
  1555. package/skills/shader-dev/techniques/webgl-pitfalls.md +170 -0
  1556. package/skills/signup-flow-cro/SKILL.md +150 -0
  1557. package/skills/signup-flow-cro/references/experiments.md +76 -0
  1558. package/skills/signup-flow-cro/references/signup-cro-playbook.md +180 -0
  1559. package/skills/signup-flow-cro/scripts/funnel_drop_analyzer.py +320 -0
  1560. package/skills/site-architecture/SKILL.md +167 -0
  1561. package/skills/site-architecture/references/internal-linking-playbook.md +216 -0
  1562. package/skills/site-architecture/references/navigation-design.md +32 -0
  1563. package/skills/site-architecture/references/silo-and-linking-guide.md +80 -0
  1564. package/skills/site-architecture/references/url-design-guide.md +220 -0
  1565. package/skills/site-architecture/scripts/sitemap_analyzer.py +375 -0
  1566. package/skills/skill-auditor/SKILL.md +159 -0
  1567. package/skills/skill-auditor/references/frontmatter-spec.md +113 -0
  1568. package/skills/skill-auditor/references/lazy-loading-guide.md +98 -0
  1569. package/skills/skill-improve/SKILL.md +59 -0
  1570. package/skills/skill-test/SKILL.md +45 -0
  1571. package/skills/skill-test/references/audit-mode-procedure.md +7 -0
  1572. package/skills/skill-test/references/category-mode-procedure.md +7 -0
  1573. package/skills/skill-test/references/next-steps-guide.md +9 -0
  1574. package/skills/skill-test/references/spec-mode-procedure.md +8 -0
  1575. package/skills/skill-test/references/static-checks.md +13 -0
  1576. package/skills/slack/SKILL.md +45 -0
  1577. package/skills/slo-sli/SKILL.md +92 -0
  1578. package/skills/slo-sli/references/alerting-burn-rate.md +22 -0
  1579. package/skills/slo-sli/references/anti-patterns.md +12 -0
  1580. package/skills/slo-sli/references/checklist.md +14 -0
  1581. package/skills/smoke-check/SKILL.md +77 -0
  1582. package/skills/snowflake-development/SKILL.md +119 -0
  1583. package/skills/snowflake-development/references/cortex_ai_and_agents.md +280 -0
  1584. package/skills/snowflake-development/references/snowflake_sql_and_pipelines.md +281 -0
  1585. package/skills/snowflake-development/references/troubleshooting.md +155 -0
  1586. package/skills/snowflake-development/scripts/snowflake_query_helper.py +233 -0
  1587. package/skills/soc2-compliance/SKILL.md +132 -0
  1588. package/skills/soc2-compliance/references/evidence_collection_guide.md +227 -0
  1589. package/skills/soc2-compliance/references/trust_service_criteria.md +273 -0
  1590. package/skills/soc2-compliance/references/type1_vs_type2.md +273 -0
  1591. package/skills/soc2-compliance/scripts/control_matrix_builder.py +679 -0
  1592. package/skills/soc2-compliance/scripts/evidence_tracker.py +240 -0
  1593. package/skills/soc2-compliance/scripts/gap_analyzer.py +479 -0
  1594. package/skills/social-content/SKILL.md +155 -0
  1595. package/skills/social-content/references/hooks-and-repurposing.md +74 -0
  1596. package/skills/social-content/references/platforms.md +163 -0
  1597. package/skills/social-content/references/post-templates.md +171 -0
  1598. package/skills/social-content/references/reverse-engineering.md +190 -0
  1599. package/skills/social-media-analyzer/HOW_TO_USE.md +39 -0
  1600. package/skills/social-media-analyzer/SKILL.md +190 -0
  1601. package/skills/social-media-analyzer/assets/expected_output.json +61 -0
  1602. package/skills/social-media-analyzer/assets/sample_input.json +42 -0
  1603. package/skills/social-media-analyzer/references/platform-benchmarks.md +226 -0
  1604. package/skills/social-media-analyzer/scripts/analyze_performance.py +180 -0
  1605. package/skills/social-media-analyzer/scripts/calculate_metrics.py +147 -0
  1606. package/skills/social-media-manager/SKILL.md +195 -0
  1607. package/skills/social-media-manager/scripts/social_calendar_generator.py +399 -0
  1608. package/skills/sprint-ceremony/SKILL.md +75 -0
  1609. package/skills/sprint-plan/SKILL.md +47 -0
  1610. package/skills/sprint-report/SKILL.md +124 -0
  1611. package/skills/standup-report/SKILL.md +51 -0
  1612. package/skills/start/SKILL.md +67 -0
  1613. package/skills/start-service/SKILL.md +45 -0
  1614. package/skills/state-management/SKILL.md +75 -0
  1615. package/skills/story-done/SKILL.md +69 -0
  1616. package/skills/story-done/references/review-gates.md +9 -0
  1617. package/skills/story-done/references/test-evidence-traceability.md +17 -0
  1618. package/skills/story-readiness/SKILL.md +57 -0
  1619. package/skills/story-readiness/references/context-loading.md +9 -0
  1620. package/skills/story-readiness/references/output-format.md +7 -0
  1621. package/skills/story-readiness/references/readiness-checklist.md +33 -0
  1622. package/skills/strategic-alignment/SKILL.md +79 -0
  1623. package/skills/strategic-alignment/references/alignment-playbook.md +205 -0
  1624. package/skills/strategic-alignment/scripts/alignment_checker.py +455 -0
  1625. package/skills/stripe-integration-expert/SKILL.md +65 -0
  1626. package/skills/stripe-integration-expert/references/stripe-code-examples.md +372 -0
  1627. package/skills/tdd-guide/HOW_TO_USE.md +313 -0
  1628. package/skills/tdd-guide/SKILL.md +114 -0
  1629. package/skills/tdd-guide/assets/expected_output.json +77 -0
  1630. package/skills/tdd-guide/assets/sample_coverage_report.lcov +56 -0
  1631. package/skills/tdd-guide/assets/sample_input_python.json +39 -0
  1632. package/skills/tdd-guide/assets/sample_input_typescript.json +36 -0
  1633. package/skills/tdd-guide/references/ci-integration.md +195 -0
  1634. package/skills/tdd-guide/references/framework-guide.md +206 -0
  1635. package/skills/tdd-guide/references/tdd-best-practices.md +128 -0
  1636. package/skills/tdd-guide/references/tdd-code-examples.md +229 -0
  1637. package/skills/tdd-guide/scripts/coverage_analyzer.py +434 -0
  1638. package/skills/tdd-guide/scripts/fixture_generator.py +440 -0
  1639. package/skills/tdd-guide/scripts/format_detector.py +384 -0
  1640. package/skills/tdd-guide/scripts/framework_adapter.py +428 -0
  1641. package/skills/tdd-guide/scripts/metrics_calculator.py +456 -0
  1642. package/skills/tdd-guide/scripts/output_formatter.py +354 -0
  1643. package/skills/tdd-guide/scripts/tdd_workflow.py +474 -0
  1644. package/skills/tdd-guide/scripts/test_generator.py +438 -0
  1645. package/skills/team-communications/SKILL.md +69 -0
  1646. package/skills/team-communications/references/3p-updates.md +47 -0
  1647. package/skills/team-communications/references/company-newsletter.md +65 -0
  1648. package/skills/team-communications/references/faq-answers.md +30 -0
  1649. package/skills/team-communications/references/general-comms.md +16 -0
  1650. package/skills/team-vn/SKILL.md +187 -0
  1651. package/skills/tech-debt/SKILL.md +91 -0
  1652. package/skills/tech-debt/references/register-format.md +20 -0
  1653. package/skills/tech-debt/references/scan-indicators.md +22 -0
  1654. package/skills/tech-stack-evaluator/SKILL.md +111 -0
  1655. package/skills/tech-stack-evaluator/assets/expected_output_comparison.json +82 -0
  1656. package/skills/tech-stack-evaluator/assets/sample_input_structured.json +39 -0
  1657. package/skills/tech-stack-evaluator/assets/sample_input_tco.json +42 -0
  1658. package/skills/tech-stack-evaluator/assets/sample_input_text.json +4 -0
  1659. package/skills/tech-stack-evaluator/references/examples.md +383 -0
  1660. package/skills/tech-stack-evaluator/references/metrics.md +242 -0
  1661. package/skills/tech-stack-evaluator/references/workflows.md +362 -0
  1662. package/skills/tech-stack-evaluator/scripts/ecosystem_analyzer.py +501 -0
  1663. package/skills/tech-stack-evaluator/scripts/format_detector.py +430 -0
  1664. package/skills/tech-stack-evaluator/scripts/migration_analyzer.py +587 -0
  1665. package/skills/tech-stack-evaluator/scripts/report_generator.py +460 -0
  1666. package/skills/tech-stack-evaluator/scripts/security_assessor.py +518 -0
  1667. package/skills/tech-stack-evaluator/scripts/stack_comparator.py +389 -0
  1668. package/skills/tech-stack-evaluator/scripts/tco_calculator.py +458 -0
  1669. package/skills/terraform-init/SKILL.md +80 -0
  1670. package/skills/terraform-init/references/anti-patterns.md +11 -0
  1671. package/skills/terraform-init/references/security-checklist.md +10 -0
  1672. package/skills/test-flakiness/SKILL.md +90 -0
  1673. package/skills/test-helpers/SKILL.md +50 -0
  1674. package/skills/test-setup/SKILL.md +58 -0
  1675. package/skills/testing/SKILL.md +32 -0
  1676. package/skills/testing/references/anti-patterns.md +11 -0
  1677. package/skills/testing/references/coverage-strategy.md +11 -0
  1678. package/skills/testing/references/framework-setup.md +25 -0
  1679. package/skills/testing/references/helper-patterns.md +9 -0
  1680. package/skills/threat-detection/SKILL.md +114 -0
  1681. package/skills/threat-detection/references/hunt-playbooks.md +131 -0
  1682. package/skills/threat-detection/scripts/threat_signal_analyzer.py +571 -0
  1683. package/skills/unity-game-architecture/SKILL.md +45 -0
  1684. package/skills/unity-game-architecture/references/anti-patterns.md +15 -0
  1685. package/skills/unity-game-architecture/references/checklist.md +16 -0
  1686. package/skills/unity-game-architecture/references/performance-and-systems.md +29 -0
  1687. package/skills/user-persona/SKILL.md +65 -0
  1688. package/skills/user-persona/references/persona-template.md +27 -0
  1689. package/skills/ux-design/SKILL.md +60 -0
  1690. package/skills/ux-design/references/cross-reference-and-routing.md +19 -0
  1691. package/skills/ux-design/references/spec-sections.md +19 -0
  1692. package/skills/ux-review/SKILL.md +70 -0
  1693. package/skills/video-content-strategist/SKILL.md +181 -0
  1694. package/skills/video-content-strategist/references/scripts-and-anti-patterns.md +48 -0
  1695. package/skills/visual-regression/SKILL.md +86 -0
  1696. package/skills/vn-asset-pipeline/SKILL.md +166 -0
  1697. package/skills/vn-character-design/SKILL.md +220 -0
  1698. package/skills/vn-comfyui-gen/SKILL.md +235 -0
  1699. package/skills/vn-comfyui-gen/references/comfyui-vn-workflows.md +197 -0
  1700. package/skills/vn-dialogue-tree/SKILL.md +126 -0
  1701. package/skills/vn-gdd/SKILL.md +133 -0
  1702. package/skills/vn-narrative-design/SKILL.md +185 -0
  1703. package/skills/vn-renpy-setup/SKILL.md +136 -0
  1704. package/skills/vn-scene-compose/SKILL.md +234 -0
  1705. package/skills/vn-script/SKILL.md +140 -0
  1706. package/skills/vn-script/references/renpy-cheatsheet.md +169 -0
  1707. package/skills/vn-testing/SKILL.md +178 -0
  1708. package/skills/vn-ui-design/SKILL.md +220 -0
  1709. package/skills/web-security/SKILL.md +92 -0
  1710. package/skills/web-security/references/csp-and-frontend.md +36 -0
  1711. package/skills/webhooks/SKILL.md +102 -0
  1712. package/skills/websocket-realtime-rooms/SKILL.md +46 -0
  1713. package/skills/websocket-realtime-rooms/references/anti-patterns-checklist.md +27 -0
  1714. package/skills/websocket-realtime-rooms/references/auth-security.md +9 -0
  1715. package/skills/websocket-realtime-rooms/references/client-implementation.md +15 -0
  1716. package/skills/websocket-realtime-rooms/references/heartbeat-reconnect-backpressure.md +17 -0
  1717. package/skills/weekly-digest/SKILL.md +51 -0
  1718. package/skills/worktree-isolation/README.md +193 -0
  1719. package/skills/worktree-isolation/SKILL.md +87 -0
  1720. package/skills/worktree-isolation/scripts/apply.py +178 -0
  1721. package/skills/worktree-isolation/scripts/lib.py +371 -0
  1722. package/skills/worktree-isolation-setup/README.md +137 -0
  1723. package/skills/worktree-isolation-setup/SKILL.md +192 -0
  1724. package/skills/worktree-isolation-setup/scripts/apply.py +178 -0
  1725. package/skills/worktree-isolation-setup/scripts/install_hook.py +118 -0
  1726. package/skills/worktree-isolation-setup/scripts/lib.py +371 -0
  1727. package/skills/x-twitter-growth/SKILL.md +91 -0
  1728. package/skills/x-twitter-growth/references/algorithm-signals.md +70 -0
  1729. package/skills/x-twitter-growth/scripts/competitor_analyzer.py +235 -0
  1730. package/skills/x-twitter-growth/scripts/content_planner.py +210 -0
  1731. package/skills/x-twitter-growth/scripts/growth_tracker.py +259 -0
  1732. package/skills/x-twitter-growth/scripts/profile_auditor.py +294 -0
  1733. package/skills/x-twitter-growth/scripts/tweet_composer.py +290 -0
  1734. package/skills/xlsx-generator/SKILL.md +135 -0
  1735. package/skills/xlsx-generator/references/create.md +691 -0
  1736. package/skills/xlsx-generator/references/edit.md +684 -0
  1737. package/skills/xlsx-generator/references/fix.md +37 -0
  1738. package/skills/xlsx-generator/references/format.md +768 -0
  1739. package/skills/xlsx-generator/references/ooxml-cheatsheet.md +231 -0
  1740. package/skills/xlsx-generator/references/read-analyze.md +97 -0
  1741. package/skills/xlsx-generator/references/validate.md +772 -0
  1742. package/skills/xlsx-generator/scripts/formula_check.py +422 -0
  1743. package/skills/xlsx-generator/scripts/libreoffice_recalc.py +248 -0
  1744. package/skills/xlsx-generator/scripts/shared_strings_builder.py +163 -0
  1745. package/skills/xlsx-generator/scripts/style_audit.py +575 -0
  1746. package/skills/xlsx-generator/scripts/xlsx_add_column.py +395 -0
  1747. package/skills/xlsx-generator/scripts/xlsx_insert_row.py +274 -0
  1748. package/skills/xlsx-generator/scripts/xlsx_pack.py +87 -0
  1749. package/skills/xlsx-generator/scripts/xlsx_reader.py +362 -0
  1750. package/skills/xlsx-generator/scripts/xlsx_shift_rows.py +396 -0
  1751. package/skills/xlsx-generator/scripts/xlsx_unpack.py +130 -0
  1752. package/skills/xlsx-generator/templates/minimal_xlsx/[Content_Types].xml +9 -0
  1753. package/skills/xlsx-generator/templates/minimal_xlsx/_rels/.rels +6 -0
  1754. package/skills/xlsx-generator/templates/minimal_xlsx/xl/_rels/workbook.xml.rels +19 -0
  1755. package/skills/xlsx-generator/templates/minimal_xlsx/xl/sharedStrings.xml +33 -0
  1756. package/skills/xlsx-generator/templates/minimal_xlsx/xl/styles.xml +160 -0
  1757. package/skills/xlsx-generator/templates/minimal_xlsx/xl/workbook.xml +30 -0
  1758. package/skills/xlsx-generator/templates/minimal_xlsx/xl/worksheets/sheet1.xml +70 -0
  1759. package/templates/gamedev/architecture-decision-record.md +176 -0
  1760. package/templates/gamedev/art-bible.md +80 -0
  1761. package/templates/gamedev/concept-doc-from-prototype.md +304 -0
  1762. package/templates/gamedev/difficulty-curve.md +330 -0
  1763. package/templates/gamedev/economy-model.md +130 -0
  1764. package/templates/gamedev/faction-design.md +166 -0
  1765. package/templates/gamedev/game-concept.md +316 -0
  1766. package/templates/gamedev/game-design-document.md +219 -0
  1767. package/templates/gamedev/game-pillars.md +313 -0
  1768. package/templates/gamedev/hud-design.md +505 -0
  1769. package/templates/gamedev/level-design-document.md +111 -0
  1770. package/templates/gamedev/narrative-character-sheet.md +111 -0
  1771. package/templates/gamedev/pitch-document.md +140 -0
  1772. package/templates/gamedev/player-journey.md +357 -0
  1773. package/templates/gamedev/project-stage-report.md +199 -0
  1774. package/templates/gamedev/sound-bible.md +130 -0
  1775. package/templates/gamedev/systems-index.md +146 -0
  1776. package/templates/gamedev/technical-design-document.md +96 -0
  1777. package/templates/gamedev/test-evidence.md +86 -0
  1778. package/templates/gamedev/test-plan.md +144 -0
@@ -0,0 +1,1685 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ ETL Performance Optimizer
4
+ Comprehensive ETL/ELT performance analysis and optimization tool.
5
+
6
+ Features:
7
+ - SQL query analysis and optimization recommendations
8
+ - Spark job configuration analysis
9
+ - Data skew detection and mitigation
10
+ - Partition strategy recommendations
11
+ - Join optimization suggestions
12
+ - Memory and shuffle analysis
13
+ - Cost estimation for cloud warehouses
14
+
15
+ Usage:
16
+ python etl_performance_optimizer.py analyze-sql query.sql
17
+ python etl_performance_optimizer.py analyze-spark spark-history.json
18
+ python etl_performance_optimizer.py optimize-partition data_stats.json
19
+ python etl_performance_optimizer.py estimate-cost query.sql --warehouse snowflake
20
+ """
21
+
22
+ import os
23
+ import sys
24
+ import json
25
+ import re
26
+ import argparse
27
+ import logging
28
+ import math
29
+ from pathlib import Path
30
+ from typing import Dict, List, Optional, Any, Tuple, Set
31
+ from dataclasses import dataclass, field, asdict
32
+ from datetime import datetime
33
+ from collections import defaultdict
34
+ from abc import ABC, abstractmethod
35
+
36
+ logging.basicConfig(
37
+ level=logging.INFO,
38
+ format='%(asctime)s - %(levelname)s - %(message)s'
39
+ )
40
+ logger = logging.getLogger(__name__)
41
+
42
+
43
+ # =============================================================================
44
+ # Data Classes
45
+ # =============================================================================
46
+
47
+ @dataclass
48
+ class SQLQueryInfo:
49
+ """Parsed information about a SQL query"""
50
+ query_type: str # SELECT, INSERT, UPDATE, DELETE, MERGE, CREATE
51
+ tables: List[str]
52
+ columns: List[str]
53
+ joins: List[Dict[str, str]]
54
+ where_conditions: List[str]
55
+ group_by: List[str]
56
+ order_by: List[str]
57
+ aggregations: List[str]
58
+ subqueries: int
59
+ distinct: bool
60
+ limit: Optional[int]
61
+ ctes: List[str]
62
+ window_functions: List[str]
63
+ estimated_complexity: str # low, medium, high, very_high
64
+
65
+
66
+ @dataclass
67
+ class OptimizationRecommendation:
68
+ """A single optimization recommendation"""
69
+ category: str # index, partition, join, filter, aggregation, memory, shuffle
70
+ severity: str # critical, high, medium, low
71
+ title: str
72
+ description: str
73
+ current_issue: str
74
+ recommendation: str
75
+ expected_improvement: str
76
+ implementation: str
77
+ priority: int = 1
78
+
79
+
80
+ @dataclass
81
+ class SparkJobMetrics:
82
+ """Metrics from a Spark job"""
83
+ job_id: str
84
+ duration_ms: int
85
+ stages: int
86
+ tasks: int
87
+ shuffle_read_bytes: int
88
+ shuffle_write_bytes: int
89
+ input_bytes: int
90
+ output_bytes: int
91
+ peak_memory_bytes: int
92
+ gc_time_ms: int
93
+ failed_tasks: int
94
+ speculative_tasks: int
95
+ skew_ratio: float # max_task_time / median_task_time
96
+
97
+
98
+ @dataclass
99
+ class PartitionStrategy:
100
+ """Recommended partition strategy"""
101
+ column: str
102
+ partition_type: str # range, hash, list
103
+ num_partitions: Optional[int]
104
+ partition_size_mb: float
105
+ reasoning: str
106
+ implementation: str
107
+
108
+
109
+ @dataclass
110
+ class CostEstimate:
111
+ """Cost estimate for a query"""
112
+ warehouse: str
113
+ compute_cost: float
114
+ storage_cost: float
115
+ data_transfer_cost: float
116
+ total_cost: float
117
+ currency: str = "USD"
118
+ assumptions: List[str] = field(default_factory=list)
119
+
120
+
121
+ # =============================================================================
122
+ # SQL Parser
123
+ # =============================================================================
124
+
125
+ class SQLParser:
126
+ """Parse and analyze SQL queries"""
127
+
128
+ # Common SQL patterns
129
+ PATTERNS = {
130
+ 'select': re.compile(r'\bSELECT\b', re.IGNORECASE),
131
+ 'from': re.compile(r'\bFROM\b', re.IGNORECASE),
132
+ 'join': re.compile(r'\b(INNER|LEFT|RIGHT|FULL|CROSS)?\s*JOIN\b', re.IGNORECASE),
133
+ 'where': re.compile(r'\bWHERE\b', re.IGNORECASE),
134
+ 'group_by': re.compile(r'\bGROUP\s+BY\b', re.IGNORECASE),
135
+ 'order_by': re.compile(r'\bORDER\s+BY\b', re.IGNORECASE),
136
+ 'having': re.compile(r'\bHAVING\b', re.IGNORECASE),
137
+ 'distinct': re.compile(r'\bDISTINCT\b', re.IGNORECASE),
138
+ 'limit': re.compile(r'\bLIMIT\s+(\d+)', re.IGNORECASE),
139
+ 'cte': re.compile(r'\bWITH\b', re.IGNORECASE),
140
+ 'subquery': re.compile(r'\(\s*SELECT\b', re.IGNORECASE),
141
+ 'window': re.compile(r'\bOVER\s*\(', re.IGNORECASE),
142
+ 'aggregation': re.compile(r'\b(COUNT|SUM|AVG|MIN|MAX|STDDEV|VARIANCE)\s*\(', re.IGNORECASE),
143
+ 'insert': re.compile(r'\bINSERT\s+INTO\b', re.IGNORECASE),
144
+ 'update': re.compile(r'\bUPDATE\b', re.IGNORECASE),
145
+ 'delete': re.compile(r'\bDELETE\s+FROM\b', re.IGNORECASE),
146
+ 'merge': re.compile(r'\bMERGE\s+INTO\b', re.IGNORECASE),
147
+ 'create': re.compile(r'\bCREATE\s+(TABLE|VIEW|INDEX)\b', re.IGNORECASE),
148
+ }
149
+
150
+ def parse(self, sql: str) -> SQLQueryInfo:
151
+ """Parse a SQL query and extract information"""
152
+ # Clean up the query
153
+ sql = self._clean_sql(sql)
154
+
155
+ # Determine query type
156
+ query_type = self._detect_query_type(sql)
157
+
158
+ # Extract tables
159
+ tables = self._extract_tables(sql)
160
+
161
+ # Extract columns (for SELECT queries)
162
+ columns = self._extract_columns(sql) if query_type == 'SELECT' else []
163
+
164
+ # Extract joins
165
+ joins = self._extract_joins(sql)
166
+
167
+ # Extract WHERE conditions
168
+ where_conditions = self._extract_where_conditions(sql)
169
+
170
+ # Extract GROUP BY
171
+ group_by = self._extract_group_by(sql)
172
+
173
+ # Extract ORDER BY
174
+ order_by = self._extract_order_by(sql)
175
+
176
+ # Extract aggregations
177
+ aggregations = self._extract_aggregations(sql)
178
+
179
+ # Count subqueries
180
+ subqueries = len(self.PATTERNS['subquery'].findall(sql))
181
+
182
+ # Check for DISTINCT
183
+ distinct = bool(self.PATTERNS['distinct'].search(sql))
184
+
185
+ # Extract LIMIT
186
+ limit_match = self.PATTERNS['limit'].search(sql)
187
+ limit = int(limit_match.group(1)) if limit_match else None
188
+
189
+ # Extract CTEs
190
+ ctes = self._extract_ctes(sql)
191
+
192
+ # Extract window functions
193
+ window_functions = self._extract_window_functions(sql)
194
+
195
+ # Estimate complexity
196
+ complexity = self._estimate_complexity(
197
+ tables, joins, subqueries, aggregations, window_functions
198
+ )
199
+
200
+ return SQLQueryInfo(
201
+ query_type=query_type,
202
+ tables=tables,
203
+ columns=columns,
204
+ joins=joins,
205
+ where_conditions=where_conditions,
206
+ group_by=group_by,
207
+ order_by=order_by,
208
+ aggregations=aggregations,
209
+ subqueries=subqueries,
210
+ distinct=distinct,
211
+ limit=limit,
212
+ ctes=ctes,
213
+ window_functions=window_functions,
214
+ estimated_complexity=complexity
215
+ )
216
+
217
+ def _clean_sql(self, sql: str) -> str:
218
+ """Clean and normalize SQL"""
219
+ # Remove comments
220
+ sql = re.sub(r'--.*$', '', sql, flags=re.MULTILINE)
221
+ sql = re.sub(r'/\*.*?\*/', '', sql, flags=re.DOTALL)
222
+ # Normalize whitespace
223
+ sql = ' '.join(sql.split())
224
+ return sql
225
+
226
+ def _detect_query_type(self, sql: str) -> str:
227
+ """Detect the type of SQL query"""
228
+ sql_upper = sql.upper().strip()
229
+
230
+ if sql_upper.startswith('WITH') or sql_upper.startswith('SELECT'):
231
+ return 'SELECT'
232
+ elif self.PATTERNS['insert'].search(sql):
233
+ return 'INSERT'
234
+ elif self.PATTERNS['update'].search(sql):
235
+ return 'UPDATE'
236
+ elif self.PATTERNS['delete'].search(sql):
237
+ return 'DELETE'
238
+ elif self.PATTERNS['merge'].search(sql):
239
+ return 'MERGE'
240
+ elif self.PATTERNS['create'].search(sql):
241
+ return 'CREATE'
242
+ else:
243
+ return 'UNKNOWN'
244
+
245
+ def _extract_tables(self, sql: str) -> List[str]:
246
+ """Extract table names from SQL"""
247
+ tables = []
248
+
249
+ # FROM clause tables
250
+ from_pattern = re.compile(
251
+ r'\bFROM\s+([a-zA-Z_][a-zA-Z0-9_]*(?:\.[a-zA-Z_][a-zA-Z0-9_]*)?)',
252
+ re.IGNORECASE
253
+ )
254
+ tables.extend(from_pattern.findall(sql))
255
+
256
+ # JOIN clause tables
257
+ join_pattern = re.compile(
258
+ r'\bJOIN\s+([a-zA-Z_][a-zA-Z0-9_]*(?:\.[a-zA-Z_][a-zA-Z0-9_]*)?)',
259
+ re.IGNORECASE
260
+ )
261
+ tables.extend(join_pattern.findall(sql))
262
+
263
+ # INSERT INTO table
264
+ insert_pattern = re.compile(
265
+ r'\bINSERT\s+INTO\s+([a-zA-Z_][a-zA-Z0-9_]*(?:\.[a-zA-Z_][a-zA-Z0-9_]*)?)',
266
+ re.IGNORECASE
267
+ )
268
+ tables.extend(insert_pattern.findall(sql))
269
+
270
+ # UPDATE table
271
+ update_pattern = re.compile(
272
+ r'\bUPDATE\s+([a-zA-Z_][a-zA-Z0-9_]*(?:\.[a-zA-Z_][a-zA-Z0-9_]*)?)',
273
+ re.IGNORECASE
274
+ )
275
+ tables.extend(update_pattern.findall(sql))
276
+
277
+ return list(set(tables))
278
+
279
+ def _extract_columns(self, sql: str) -> List[str]:
280
+ """Extract column references from SELECT clause"""
281
+ # Find SELECT ... FROM
282
+ match = re.search(r'\bSELECT\s+(.*?)\s+FROM\b', sql, re.IGNORECASE | re.DOTALL)
283
+ if not match:
284
+ return []
285
+
286
+ select_clause = match.group(1)
287
+
288
+ # Handle SELECT *
289
+ if '*' in select_clause and 'COUNT(*)' not in select_clause.upper():
290
+ return ['*']
291
+
292
+ # Extract column names (simplified)
293
+ columns = []
294
+ for part in select_clause.split(','):
295
+ part = part.strip()
296
+ # Handle aliases
297
+ alias_match = re.search(r'\bAS\s+(\w+)\s*$', part, re.IGNORECASE)
298
+ if alias_match:
299
+ columns.append(alias_match.group(1))
300
+ else:
301
+ # Get the last identifier
302
+ col_match = re.search(r'([a-zA-Z_][a-zA-Z0-9_]*)(?:\s*$|\s+AS\b)', part, re.IGNORECASE)
303
+ if col_match:
304
+ columns.append(col_match.group(1))
305
+
306
+ return columns
307
+
308
+ def _extract_joins(self, sql: str) -> List[Dict[str, str]]:
309
+ """Extract join information"""
310
+ joins = []
311
+
312
+ join_pattern = re.compile(
313
+ r'\b(INNER|LEFT\s+OUTER?|RIGHT\s+OUTER?|FULL\s+OUTER?|CROSS)?\s*JOIN\s+'
314
+ r'([a-zA-Z_][a-zA-Z0-9_.]*)\s*(?:AS\s+)?(\w+)?\s*'
315
+ r'(?:ON\s+(.+?))?(?=\s+(?:INNER|LEFT|RIGHT|FULL|CROSS|WHERE|GROUP|ORDER|HAVING|LIMIT|$))',
316
+ re.IGNORECASE | re.DOTALL
317
+ )
318
+
319
+ for match in join_pattern.finditer(sql):
320
+ join_type = match.group(1) or 'INNER'
321
+ table = match.group(2)
322
+ alias = match.group(3)
323
+ condition = match.group(4)
324
+
325
+ joins.append({
326
+ 'type': join_type.strip().upper(),
327
+ 'table': table,
328
+ 'alias': alias,
329
+ 'condition': condition.strip() if condition else None
330
+ })
331
+
332
+ return joins
333
+
334
+ def _extract_where_conditions(self, sql: str) -> List[str]:
335
+ """Extract WHERE clause conditions"""
336
+ # Find WHERE ... (GROUP BY | ORDER BY | HAVING | LIMIT | end)
337
+ match = re.search(
338
+ r'\bWHERE\s+(.*?)(?=\s+(?:GROUP\s+BY|ORDER\s+BY|HAVING|LIMIT)|$)',
339
+ sql, re.IGNORECASE | re.DOTALL
340
+ )
341
+ if not match:
342
+ return []
343
+
344
+ where_clause = match.group(1).strip()
345
+
346
+ # Split by AND/OR (simplified)
347
+ conditions = re.split(r'\s+AND\s+|\s+OR\s+', where_clause, flags=re.IGNORECASE)
348
+ return [c.strip() for c in conditions if c.strip()]
349
+
350
+ def _extract_group_by(self, sql: str) -> List[str]:
351
+ """Extract GROUP BY columns"""
352
+ match = re.search(
353
+ r'\bGROUP\s+BY\s+(.*?)(?=\s+(?:HAVING|ORDER\s+BY|LIMIT)|$)',
354
+ sql, re.IGNORECASE | re.DOTALL
355
+ )
356
+ if not match:
357
+ return []
358
+
359
+ group_clause = match.group(1).strip()
360
+ columns = [c.strip() for c in group_clause.split(',')]
361
+ return columns
362
+
363
+ def _extract_order_by(self, sql: str) -> List[str]:
364
+ """Extract ORDER BY columns"""
365
+ match = re.search(
366
+ r'\bORDER\s+BY\s+(.*?)(?=\s+LIMIT|$)',
367
+ sql, re.IGNORECASE | re.DOTALL
368
+ )
369
+ if not match:
370
+ return []
371
+
372
+ order_clause = match.group(1).strip()
373
+ columns = [c.strip() for c in order_clause.split(',')]
374
+ return columns
375
+
376
+ def _extract_aggregations(self, sql: str) -> List[str]:
377
+ """Extract aggregation functions used"""
378
+ agg_pattern = re.compile(
379
+ r'\b(COUNT|SUM|AVG|MIN|MAX|STDDEV|VARIANCE|MEDIAN|PERCENTILE_CONT|PERCENTILE_DISC)\s*\(',
380
+ re.IGNORECASE
381
+ )
382
+ return list(set(m.upper() for m in agg_pattern.findall(sql)))
383
+
384
+ def _extract_ctes(self, sql: str) -> List[str]:
385
+ """Extract CTE names"""
386
+ cte_pattern = re.compile(
387
+ r'\bWITH\s+(\w+)\s+AS\s*\(|,\s*(\w+)\s+AS\s*\(',
388
+ re.IGNORECASE
389
+ )
390
+ ctes = []
391
+ for match in cte_pattern.finditer(sql):
392
+ cte_name = match.group(1) or match.group(2)
393
+ if cte_name:
394
+ ctes.append(cte_name)
395
+ return ctes
396
+
397
+ def _extract_window_functions(self, sql: str) -> List[str]:
398
+ """Extract window function patterns"""
399
+ window_pattern = re.compile(
400
+ r'\b(\w+)\s*\([^)]*\)\s+OVER\s*\(',
401
+ re.IGNORECASE
402
+ )
403
+ return list(set(m.upper() for m in window_pattern.findall(sql)))
404
+
405
+ def _estimate_complexity(self, tables: List[str], joins: List[Dict],
406
+ subqueries: int, aggregations: List[str],
407
+ window_functions: List[str]) -> str:
408
+ """Estimate query complexity"""
409
+ score = 0
410
+
411
+ # Table count
412
+ score += len(tables) * 10
413
+
414
+ # Join count and types
415
+ for join in joins:
416
+ if join['type'] in ('CROSS', 'FULL OUTER'):
417
+ score += 30
418
+ elif join['type'] in ('LEFT OUTER', 'RIGHT OUTER'):
419
+ score += 20
420
+ else:
421
+ score += 15
422
+
423
+ # Subqueries
424
+ score += subqueries * 25
425
+
426
+ # Aggregations
427
+ score += len(aggregations) * 5
428
+
429
+ # Window functions
430
+ score += len(window_functions) * 15
431
+
432
+ if score < 30:
433
+ return 'low'
434
+ elif score < 60:
435
+ return 'medium'
436
+ elif score < 100:
437
+ return 'high'
438
+ else:
439
+ return 'very_high'
440
+
441
+
442
+ # =============================================================================
443
+ # SQL Optimizer
444
+ # =============================================================================
445
+
446
+ class SQLOptimizer:
447
+ """Analyze SQL queries and provide optimization recommendations"""
448
+
449
+ def analyze(self, query_info: SQLQueryInfo, sql: str) -> List[OptimizationRecommendation]:
450
+ """Analyze a SQL query and generate optimization recommendations"""
451
+ recommendations = []
452
+
453
+ # Check for SELECT *
454
+ if '*' in query_info.columns:
455
+ recommendations.append(self._recommend_explicit_columns())
456
+
457
+ # Check for missing WHERE clause on large tables
458
+ if not query_info.where_conditions and query_info.tables:
459
+ recommendations.append(self._recommend_add_filters())
460
+
461
+ # Check for inefficient joins
462
+ join_recs = self._analyze_joins(query_info)
463
+ recommendations.extend(join_recs)
464
+
465
+ # Check for DISTINCT usage
466
+ if query_info.distinct:
467
+ recommendations.append(self._recommend_distinct_alternative())
468
+
469
+ # Check for ORDER BY without LIMIT
470
+ if query_info.order_by and not query_info.limit:
471
+ recommendations.append(self._recommend_add_limit())
472
+
473
+ # Check for subquery optimization
474
+ if query_info.subqueries > 0:
475
+ recommendations.append(self._recommend_cte_conversion())
476
+
477
+ # Check for index opportunities
478
+ index_recs = self._analyze_index_opportunities(query_info)
479
+ recommendations.extend(index_recs)
480
+
481
+ # Check for partition pruning
482
+ partition_recs = self._analyze_partition_pruning(query_info, sql)
483
+ recommendations.extend(partition_recs)
484
+
485
+ # Check for aggregation optimization
486
+ if query_info.aggregations and query_info.group_by:
487
+ agg_recs = self._analyze_aggregation(query_info)
488
+ recommendations.extend(agg_recs)
489
+
490
+ # Sort by priority
491
+ recommendations.sort(key=lambda r: r.priority)
492
+
493
+ return recommendations
494
+
495
+ def _recommend_explicit_columns(self) -> OptimizationRecommendation:
496
+ return OptimizationRecommendation(
497
+ category="query_structure",
498
+ severity="medium",
499
+ title="Avoid SELECT *",
500
+ description="Using SELECT * retrieves all columns, increasing I/O and memory usage.",
501
+ current_issue="Query uses SELECT * which fetches unnecessary columns",
502
+ recommendation="Specify only the columns you need",
503
+ expected_improvement="10-50% reduction in data scanned depending on table width",
504
+ implementation="Replace SELECT * with SELECT col1, col2, col3 ...",
505
+ priority=2
506
+ )
507
+
508
+ def _recommend_add_filters(self) -> OptimizationRecommendation:
509
+ return OptimizationRecommendation(
510
+ category="filter",
511
+ severity="high",
512
+ title="Add WHERE Clause Filters",
513
+ description="Query scans entire tables without filtering, causing full table scans.",
514
+ current_issue="No WHERE clause filters found - full table scan required",
515
+ recommendation="Add appropriate WHERE conditions to filter data early",
516
+ expected_improvement="Up to 90%+ reduction in data processed if highly selective",
517
+ implementation="Add WHERE column = value or WHERE date_column >= '2024-01-01'",
518
+ priority=1
519
+ )
520
+
521
+ def _analyze_joins(self, query_info: SQLQueryInfo) -> List[OptimizationRecommendation]:
522
+ """Analyze joins for optimization opportunities"""
523
+ recommendations = []
524
+
525
+ for join in query_info.joins:
526
+ # Check for CROSS JOIN
527
+ if join['type'] == 'CROSS':
528
+ recommendations.append(OptimizationRecommendation(
529
+ category="join",
530
+ severity="critical",
531
+ title="Avoid CROSS JOIN",
532
+ description="CROSS JOIN creates a Cartesian product, which can explode data volume.",
533
+ current_issue=f"CROSS JOIN with table {join['table']} detected",
534
+ recommendation="Replace with appropriate INNER/LEFT JOIN with ON condition",
535
+ expected_improvement="Exponential reduction in intermediate data",
536
+ implementation=f"Convert CROSS JOIN {join['table']} to INNER JOIN {join['table']} ON ...",
537
+ priority=1
538
+ ))
539
+
540
+ # Check for missing join condition
541
+ if not join.get('condition'):
542
+ recommendations.append(OptimizationRecommendation(
543
+ category="join",
544
+ severity="high",
545
+ title="Missing Join Condition",
546
+ description="Join without explicit ON condition may cause Cartesian product.",
547
+ current_issue=f"JOIN with {join['table']} has no explicit ON condition",
548
+ recommendation="Add explicit ON condition to the join",
549
+ expected_improvement="Prevents accidental Cartesian products",
550
+ implementation=f"Add ON {join['table']}.id = other_table.foreign_key",
551
+ priority=1
552
+ ))
553
+
554
+ # Check for many joins
555
+ if len(query_info.joins) > 5:
556
+ recommendations.append(OptimizationRecommendation(
557
+ category="join",
558
+ severity="medium",
559
+ title="High Number of Joins",
560
+ description="Many joins can lead to complex execution plans and performance issues.",
561
+ current_issue=f"{len(query_info.joins)} joins detected in single query",
562
+ recommendation="Consider breaking into smaller queries or pre-aggregating",
563
+ expected_improvement="Better plan optimization and memory usage",
564
+ implementation="Use CTEs to materialize intermediate results, or denormalize frequently joined data",
565
+ priority=3
566
+ ))
567
+
568
+ return recommendations
569
+
570
+ def _recommend_distinct_alternative(self) -> OptimizationRecommendation:
571
+ return OptimizationRecommendation(
572
+ category="query_structure",
573
+ severity="medium",
574
+ title="Consider Alternatives to DISTINCT",
575
+ description="DISTINCT requires sorting/hashing all rows which can be expensive.",
576
+ current_issue="DISTINCT used - may indicate data quality or join issues",
577
+ recommendation="Review if DISTINCT is necessary or if joins produce duplicates",
578
+ expected_improvement="Eliminates expensive deduplication step if not needed",
579
+ implementation="Review join conditions, or use GROUP BY if aggregating anyway",
580
+ priority=3
581
+ )
582
+
583
+ def _recommend_add_limit(self) -> OptimizationRecommendation:
584
+ return OptimizationRecommendation(
585
+ category="query_structure",
586
+ severity="low",
587
+ title="Add LIMIT to ORDER BY",
588
+ description="ORDER BY without LIMIT sorts entire result set unnecessarily.",
589
+ current_issue="ORDER BY present without LIMIT clause",
590
+ recommendation="Add LIMIT if only top N rows are needed",
591
+ expected_improvement="Significant reduction in sorting overhead for large results",
592
+ implementation="Add LIMIT 100 (or appropriate number) after ORDER BY",
593
+ priority=4
594
+ )
595
+
596
+ def _recommend_cte_conversion(self) -> OptimizationRecommendation:
597
+ return OptimizationRecommendation(
598
+ category="query_structure",
599
+ severity="medium",
600
+ title="Convert Subqueries to CTEs",
601
+ description="Subqueries can be harder to optimize and maintain than CTEs.",
602
+ current_issue="Subqueries detected in the query",
603
+ recommendation="Convert correlated subqueries to CTEs or JOINs",
604
+ expected_improvement="Better query plan optimization and readability",
605
+ implementation="WITH subquery_name AS (SELECT ...) SELECT ... FROM main_table JOIN subquery_name",
606
+ priority=3
607
+ )
608
+
609
+ def _analyze_index_opportunities(self, query_info: SQLQueryInfo) -> List[OptimizationRecommendation]:
610
+ """Identify potential index opportunities"""
611
+ recommendations = []
612
+
613
+ # Columns in WHERE clause are index candidates
614
+ where_columns = set()
615
+ for condition in query_info.where_conditions:
616
+ # Extract column names from conditions
617
+ col_pattern = re.compile(r'\b([a-zA-Z_][a-zA-Z0-9_]*)\s*(?:=|>|<|>=|<=|<>|!=|LIKE|IN|BETWEEN)', re.IGNORECASE)
618
+ where_columns.update(col_pattern.findall(condition))
619
+
620
+ if where_columns:
621
+ recommendations.append(OptimizationRecommendation(
622
+ category="index",
623
+ severity="medium",
624
+ title="Consider Indexes on Filter Columns",
625
+ description="Columns used in WHERE clauses benefit from indexes.",
626
+ current_issue=f"Filter columns detected: {', '.join(where_columns)}",
627
+ recommendation="Create indexes on frequently filtered columns",
628
+ expected_improvement="Orders of magnitude faster for selective queries",
629
+ implementation=f"CREATE INDEX idx_name ON table ({', '.join(list(where_columns)[:3])})",
630
+ priority=2
631
+ ))
632
+
633
+ # JOIN columns are index candidates
634
+ join_columns = set()
635
+ for join in query_info.joins:
636
+ if join.get('condition'):
637
+ col_pattern = re.compile(r'\.([a-zA-Z_][a-zA-Z0-9_]*)\s*=', re.IGNORECASE)
638
+ join_columns.update(col_pattern.findall(join['condition']))
639
+
640
+ if join_columns:
641
+ recommendations.append(OptimizationRecommendation(
642
+ category="index",
643
+ severity="high",
644
+ title="Index Join Columns",
645
+ description="Join columns without indexes cause expensive full table scans.",
646
+ current_issue=f"Join columns detected: {', '.join(join_columns)}",
647
+ recommendation="Ensure indexes exist on join key columns",
648
+ expected_improvement="Dramatic improvement in join performance",
649
+ implementation=f"CREATE INDEX idx_join ON table ({list(join_columns)[0]})",
650
+ priority=1
651
+ ))
652
+
653
+ return recommendations
654
+
655
+ def _analyze_partition_pruning(self, query_info: SQLQueryInfo, sql: str) -> List[OptimizationRecommendation]:
656
+ """Check for partition pruning opportunities"""
657
+ recommendations = []
658
+
659
+ # Look for date/time columns in WHERE clause
660
+ date_pattern = re.compile(
661
+ r'\b(date|time|timestamp|created|updated|modified)_?\w*\s*(?:=|>|<|>=|<=|BETWEEN)',
662
+ re.IGNORECASE
663
+ )
664
+
665
+ if date_pattern.search(sql):
666
+ recommendations.append(OptimizationRecommendation(
667
+ category="partition",
668
+ severity="medium",
669
+ title="Leverage Partition Pruning",
670
+ description="Date-based filters can leverage partitioned tables for massive speedups.",
671
+ current_issue="Date/time filter detected - ensure table is partitioned",
672
+ recommendation="Partition table by date column and ensure filter format matches",
673
+ expected_improvement="90%+ reduction in data scanned for time-bounded queries",
674
+ implementation="CREATE TABLE ... PARTITION BY RANGE (date_column) or use dynamic partitioning",
675
+ priority=2
676
+ ))
677
+
678
+ return recommendations
679
+
680
+ def _analyze_aggregation(self, query_info: SQLQueryInfo) -> List[OptimizationRecommendation]:
681
+ """Analyze aggregation patterns"""
682
+ recommendations = []
683
+
684
+ # High cardinality GROUP BY warning
685
+ if len(query_info.group_by) > 3:
686
+ recommendations.append(OptimizationRecommendation(
687
+ category="aggregation",
688
+ severity="medium",
689
+ title="High Cardinality GROUP BY",
690
+ description="Grouping by many columns increases memory usage and reduces aggregation benefit.",
691
+ current_issue=f"GROUP BY with {len(query_info.group_by)} columns detected",
692
+ recommendation="Review if all group by columns are necessary",
693
+ expected_improvement="Reduced memory and faster aggregation",
694
+ implementation="Remove non-essential GROUP BY columns or pre-aggregate",
695
+ priority=3
696
+ ))
697
+
698
+ # COUNT DISTINCT optimization
699
+ if 'COUNT' in query_info.aggregations and query_info.distinct:
700
+ recommendations.append(OptimizationRecommendation(
701
+ category="aggregation",
702
+ severity="medium",
703
+ title="Optimize COUNT DISTINCT",
704
+ description="COUNT DISTINCT can be expensive for high cardinality columns.",
705
+ current_issue="COUNT DISTINCT pattern detected",
706
+ recommendation="Consider HyperLogLog approximation for very large datasets",
707
+ expected_improvement="Massive speedup with ~2% error tolerance",
708
+ implementation="Use APPROX_COUNT_DISTINCT() if available in your warehouse",
709
+ priority=3
710
+ ))
711
+
712
+ return recommendations
713
+
714
+
715
+ # =============================================================================
716
+ # Spark Job Analyzer
717
+ # =============================================================================
718
+
719
+ class SparkJobAnalyzer:
720
+ """Analyze Spark job metrics and provide optimization recommendations"""
721
+
722
+ def analyze(self, metrics: SparkJobMetrics) -> List[OptimizationRecommendation]:
723
+ """Analyze Spark job metrics"""
724
+ recommendations = []
725
+
726
+ # Check for data skew
727
+ if metrics.skew_ratio > 5:
728
+ recommendations.append(self._recommend_skew_mitigation(metrics))
729
+
730
+ # Check for excessive shuffle
731
+ shuffle_ratio = metrics.shuffle_write_bytes / max(metrics.input_bytes, 1)
732
+ if shuffle_ratio > 1.5:
733
+ recommendations.append(self._recommend_reduce_shuffle(metrics, shuffle_ratio))
734
+
735
+ # Check for GC overhead
736
+ gc_ratio = metrics.gc_time_ms / max(metrics.duration_ms, 1)
737
+ if gc_ratio > 0.1:
738
+ recommendations.append(self._recommend_memory_tuning(metrics, gc_ratio))
739
+
740
+ # Check for failed tasks
741
+ if metrics.failed_tasks > 0:
742
+ fail_ratio = metrics.failed_tasks / max(metrics.tasks, 1)
743
+ recommendations.append(self._recommend_failure_handling(metrics, fail_ratio))
744
+
745
+ # Check for speculative execution overhead
746
+ if metrics.speculative_tasks > metrics.tasks * 0.1:
747
+ recommendations.append(self._recommend_reduce_speculation(metrics))
748
+
749
+ # Check task count
750
+ if metrics.tasks > 10000:
751
+ recommendations.append(self._recommend_reduce_tasks(metrics))
752
+ elif metrics.tasks < 10 and metrics.input_bytes > 1e9:
753
+ recommendations.append(self._recommend_increase_parallelism(metrics))
754
+
755
+ return recommendations
756
+
757
+ def _recommend_skew_mitigation(self, metrics: SparkJobMetrics) -> OptimizationRecommendation:
758
+ return OptimizationRecommendation(
759
+ category="skew",
760
+ severity="critical",
761
+ title="Severe Data Skew Detected",
762
+ description=f"Skew ratio of {metrics.skew_ratio:.1f}x indicates uneven data distribution.",
763
+ current_issue=f"Task execution time varies by {metrics.skew_ratio:.1f}x, causing stragglers",
764
+ recommendation="Apply skew handling techniques to rebalance data",
765
+ expected_improvement="Up to 80% reduction in job time by eliminating stragglers",
766
+ implementation="""Options:
767
+ 1. Salting: Add random prefix to skewed keys
768
+ df.withColumn("salted_key", concat(col("key"), lit("_"), (rand() * 10).cast("int")))
769
+ 2. Broadcast join for small tables:
770
+ df1.join(broadcast(df2), "key")
771
+ 3. Adaptive Query Execution (Spark 3.0+):
772
+ spark.conf.set("spark.sql.adaptive.enabled", "true")
773
+ spark.conf.set("spark.sql.adaptive.skewJoin.enabled", "true")""",
774
+ priority=1
775
+ )
776
+
777
+ def _recommend_reduce_shuffle(self, metrics: SparkJobMetrics, ratio: float) -> OptimizationRecommendation:
778
+ return OptimizationRecommendation(
779
+ category="shuffle",
780
+ severity="high",
781
+ title="Excessive Shuffle Data",
782
+ description=f"Shuffle writes {ratio:.1f}x the input data size.",
783
+ current_issue=f"Shuffle write: {metrics.shuffle_write_bytes / 1e9:.2f} GB vs input: {metrics.input_bytes / 1e9:.2f} GB",
784
+ recommendation="Reduce shuffle through partitioning and early aggregation",
785
+ expected_improvement="Significant network I/O and storage reduction",
786
+ implementation="""Options:
787
+ 1. Pre-aggregate before shuffle:
788
+ df.groupBy("key").agg(sum("value")).repartition("key")
789
+ 2. Use map-side combining:
790
+ df.reduceByKey((a, b) => a + b)
791
+ 3. Optimize partition count:
792
+ spark.conf.set("spark.sql.shuffle.partitions", optimal_count)
793
+ 4. Use bucketing for repeated joins:
794
+ df.write.bucketBy(200, "key").saveAsTable("bucketed_table")""",
795
+ priority=1
796
+ )
797
+
798
+ def _recommend_memory_tuning(self, metrics: SparkJobMetrics, gc_ratio: float) -> OptimizationRecommendation:
799
+ return OptimizationRecommendation(
800
+ category="memory",
801
+ severity="high",
802
+ title="High GC Overhead",
803
+ description=f"GC time is {gc_ratio * 100:.1f}% of total execution time.",
804
+ current_issue=f"GC time: {metrics.gc_time_ms / 1000:.1f}s out of {metrics.duration_ms / 1000:.1f}s total",
805
+ recommendation="Tune memory settings to reduce garbage collection",
806
+ expected_improvement="20-50% faster execution with proper memory config",
807
+ implementation="""Memory tuning options:
808
+ 1. Increase executor memory:
809
+ --executor-memory 8g
810
+ 2. Adjust memory fractions:
811
+ spark.memory.fraction=0.6
812
+ spark.memory.storageFraction=0.5
813
+ 3. Use off-heap memory:
814
+ spark.memory.offHeap.enabled=true
815
+ spark.memory.offHeap.size=4g
816
+ 4. Reduce cached data:
817
+ df.unpersist() when no longer needed
818
+ 5. Use Kryo serialization:
819
+ spark.serializer=org.apache.spark.serializer.KryoSerializer""",
820
+ priority=2
821
+ )
822
+
823
+ def _recommend_failure_handling(self, metrics: SparkJobMetrics, fail_ratio: float) -> OptimizationRecommendation:
824
+ return OptimizationRecommendation(
825
+ category="reliability",
826
+ severity="high" if fail_ratio > 0.1 else "medium",
827
+ title="Task Failures Detected",
828
+ description=f"{metrics.failed_tasks} tasks failed ({fail_ratio * 100:.1f}% failure rate).",
829
+ current_issue="Task failures increase job time and resource usage due to retries",
830
+ recommendation="Investigate failure causes and add resilience",
831
+ expected_improvement="Reduced retries and more predictable job times",
832
+ implementation="""Failure handling options:
833
+ 1. Check executor logs for OOM:
834
+ spark.executor.memoryOverhead=2g
835
+ 2. Handle data issues:
836
+ df.filter(col("value").isNotNull())
837
+ 3. Increase task retries:
838
+ spark.task.maxFailures=4
839
+ 4. Add checkpointing for long jobs:
840
+ df.checkpoint()
841
+ 5. Check for network timeouts:
842
+ spark.network.timeout=300s""",
843
+ priority=1
844
+ )
845
+
846
+ def _recommend_reduce_speculation(self, metrics: SparkJobMetrics) -> OptimizationRecommendation:
847
+ return OptimizationRecommendation(
848
+ category="execution",
849
+ severity="medium",
850
+ title="High Speculative Execution",
851
+ description=f"{metrics.speculative_tasks} speculative tasks launched.",
852
+ current_issue="Excessive speculation wastes resources and indicates underlying issues",
853
+ recommendation="Address root cause of slow tasks instead of speculation",
854
+ expected_improvement="Better resource utilization",
855
+ implementation="""Options:
856
+ 1. Disable speculation if not needed:
857
+ spark.speculation=false
858
+ 2. Or tune speculation settings:
859
+ spark.speculation.multiplier=1.5
860
+ spark.speculation.quantile=0.9
861
+ 3. Fix underlying skew/memory issues first""",
862
+ priority=3
863
+ )
864
+
865
+ def _recommend_reduce_tasks(self, metrics: SparkJobMetrics) -> OptimizationRecommendation:
866
+ return OptimizationRecommendation(
867
+ category="parallelism",
868
+ severity="medium",
869
+ title="Too Many Tasks",
870
+ description=f"{metrics.tasks} tasks may cause excessive scheduling overhead.",
871
+ current_issue="Very high task count increases driver overhead",
872
+ recommendation="Reduce partition count for better efficiency",
873
+ expected_improvement="Reduced scheduling overhead and driver memory usage",
874
+ implementation=f"""
875
+ 1. Reduce shuffle partitions:
876
+ spark.sql.shuffle.partitions={max(200, metrics.tasks // 10)}
877
+ 2. Coalesce partitions:
878
+ df.coalesce({max(200, metrics.tasks // 10)})
879
+ 3. Use adaptive partitioning (Spark 3.0+):
880
+ spark.sql.adaptive.enabled=true""",
881
+ priority=3
882
+ )
883
+
884
+ def _recommend_increase_parallelism(self, metrics: SparkJobMetrics) -> OptimizationRecommendation:
885
+ recommended_partitions = max(200, int(metrics.input_bytes / (128 * 1e6))) # 128MB per partition
886
+ return OptimizationRecommendation(
887
+ category="parallelism",
888
+ severity="high",
889
+ title="Low Parallelism",
890
+ description=f"Only {metrics.tasks} tasks for {metrics.input_bytes / 1e9:.2f} GB of data.",
891
+ current_issue="Under-utilization of cluster resources",
892
+ recommendation="Increase parallelism to better utilize cluster",
893
+ expected_improvement="Linear speedup with added parallelism",
894
+ implementation=f"""
895
+ 1. Increase shuffle partitions:
896
+ spark.sql.shuffle.partitions={recommended_partitions}
897
+ 2. Repartition input:
898
+ df.repartition({recommended_partitions})
899
+ 3. Adjust default parallelism:
900
+ spark.default.parallelism={recommended_partitions}""",
901
+ priority=2
902
+ )
903
+
904
+
905
+ # =============================================================================
906
+ # Partition Strategy Advisor
907
+ # =============================================================================
908
+
909
+ class PartitionAdvisor:
910
+ """Recommend partitioning strategies based on data characteristics"""
911
+
912
+ def recommend(self, data_stats: Dict) -> List[PartitionStrategy]:
913
+ """Generate partition recommendations from data statistics"""
914
+ recommendations = []
915
+
916
+ columns = data_stats.get('columns', {})
917
+ total_size_bytes = data_stats.get('total_size_bytes', 0)
918
+ row_count = data_stats.get('row_count', 0)
919
+
920
+ for col_name, col_stats in columns.items():
921
+ strategy = self._evaluate_column(col_name, col_stats, total_size_bytes, row_count)
922
+ if strategy:
923
+ recommendations.append(strategy)
924
+
925
+ # Sort by partition effectiveness
926
+ recommendations.sort(key=lambda s: s.partition_size_mb)
927
+
928
+ return recommendations[:3] # Top 3 recommendations
929
+
930
+ def _evaluate_column(self, col_name: str, col_stats: Dict,
931
+ total_size_bytes: int, row_count: int) -> Optional[PartitionStrategy]:
932
+ """Evaluate a column for partitioning potential"""
933
+ cardinality = col_stats.get('cardinality', 0)
934
+ data_type = col_stats.get('data_type', 'string')
935
+ null_percentage = col_stats.get('null_percentage', 0)
936
+
937
+ # Skip high-null columns
938
+ if null_percentage > 20:
939
+ return None
940
+
941
+ # Date/timestamp columns are ideal for range partitioning
942
+ if data_type in ('date', 'timestamp', 'datetime'):
943
+ return self._recommend_date_partition(col_name, col_stats, total_size_bytes, row_count)
944
+
945
+ # Low cardinality columns are good for list partitioning
946
+ if cardinality and cardinality <= 100:
947
+ return self._recommend_list_partition(col_name, col_stats, total_size_bytes, cardinality)
948
+
949
+ # Medium cardinality columns can use hash partitioning
950
+ if cardinality and 100 < cardinality <= 10000:
951
+ return self._recommend_hash_partition(col_name, col_stats, total_size_bytes)
952
+
953
+ return None
954
+
955
+ def _recommend_date_partition(self, col_name: str, col_stats: Dict,
956
+ total_size_bytes: int, row_count: int) -> PartitionStrategy:
957
+ # Estimate daily partition size (assume 365 days of data)
958
+ estimated_days = 365
959
+ partition_size_mb = (total_size_bytes / estimated_days) / (1024 * 1024)
960
+
961
+ return PartitionStrategy(
962
+ column=col_name,
963
+ partition_type="range",
964
+ num_partitions=None, # Dynamic based on date range
965
+ partition_size_mb=partition_size_mb,
966
+ reasoning=f"Date column '{col_name}' is ideal for range partitioning. "
967
+ f"Estimated daily partition size: {partition_size_mb:.1f} MB",
968
+ implementation=f"""
969
+ -- BigQuery
970
+ CREATE TABLE table_name
971
+ PARTITION BY DATE({col_name})
972
+ AS SELECT * FROM source_table;
973
+
974
+ -- Snowflake
975
+ CREATE TABLE table_name
976
+ CLUSTER BY (DATE_TRUNC('DAY', {col_name}));
977
+
978
+ -- Spark/Hive
979
+ df.write.partitionBy("{col_name}").parquet("path")
980
+
981
+ -- PostgreSQL
982
+ CREATE TABLE table_name (...)
983
+ PARTITION BY RANGE ({col_name});"""
984
+ )
985
+
986
+ def _recommend_list_partition(self, col_name: str, col_stats: Dict,
987
+ total_size_bytes: int, cardinality: int) -> PartitionStrategy:
988
+ partition_size_mb = (total_size_bytes / cardinality) / (1024 * 1024)
989
+
990
+ return PartitionStrategy(
991
+ column=col_name,
992
+ partition_type="list",
993
+ num_partitions=cardinality,
994
+ partition_size_mb=partition_size_mb,
995
+ reasoning=f"Column '{col_name}' has {cardinality} distinct values - ideal for list partitioning. "
996
+ f"Estimated partition size: {partition_size_mb:.1f} MB",
997
+ implementation=f"""
998
+ -- Spark/Hive
999
+ df.write.partitionBy("{col_name}").parquet("path")
1000
+
1001
+ -- PostgreSQL
1002
+ CREATE TABLE table_name (...)
1003
+ PARTITION BY LIST ({col_name});
1004
+
1005
+ -- Note: List partitioning works best with stable, low-cardinality values"""
1006
+ )
1007
+
1008
+ def _recommend_hash_partition(self, col_name: str, col_stats: Dict,
1009
+ total_size_bytes: int) -> PartitionStrategy:
1010
+ # Target ~128MB partitions
1011
+ target_partition_size = 128 * 1024 * 1024
1012
+ num_partitions = max(1, int(total_size_bytes / target_partition_size))
1013
+
1014
+ # Round to power of 2 for better distribution
1015
+ num_partitions = 2 ** int(math.log2(num_partitions) + 0.5)
1016
+ partition_size_mb = (total_size_bytes / num_partitions) / (1024 * 1024)
1017
+
1018
+ return PartitionStrategy(
1019
+ column=col_name,
1020
+ partition_type="hash",
1021
+ num_partitions=num_partitions,
1022
+ partition_size_mb=partition_size_mb,
1023
+ reasoning=f"Column '{col_name}' has medium cardinality - hash partitioning provides even distribution. "
1024
+ f"Recommended {num_partitions} partitions (~{partition_size_mb:.1f} MB each)",
1025
+ implementation=f"""
1026
+ -- Spark
1027
+ df.repartition({num_partitions}, col("{col_name}"))
1028
+
1029
+ -- PostgreSQL
1030
+ CREATE TABLE table_name (...)
1031
+ PARTITION BY HASH ({col_name});
1032
+
1033
+ -- Snowflake (clustering)
1034
+ ALTER TABLE table_name CLUSTER BY ({col_name});"""
1035
+ )
1036
+
1037
+
1038
+ # =============================================================================
1039
+ # Cost Estimator
1040
+ # =============================================================================
1041
+
1042
+ class CostEstimator:
1043
+ """Estimate query costs for cloud data warehouses"""
1044
+
1045
+ # Pricing (approximate, varies by region and contract)
1046
+ PRICING = {
1047
+ 'snowflake': {
1048
+ 'compute_per_credit': 2.00, # USD per credit
1049
+ 'credits_per_hour': {
1050
+ 'x-small': 1,
1051
+ 'small': 2,
1052
+ 'medium': 4,
1053
+ 'large': 8,
1054
+ 'x-large': 16,
1055
+ },
1056
+ 'storage_per_tb_month': 23.00,
1057
+ },
1058
+ 'bigquery': {
1059
+ 'on_demand_per_tb': 5.00, # USD per TB scanned
1060
+ 'storage_per_tb_month': 20.00,
1061
+ 'streaming_insert_per_gb': 0.01,
1062
+ },
1063
+ 'redshift': {
1064
+ 'dc2_large_per_hour': 0.25,
1065
+ 'ra3_xlarge_per_hour': 1.086,
1066
+ 'storage_per_gb_month': 0.024,
1067
+ },
1068
+ 'databricks': {
1069
+ 'dbu_per_hour_sql': 0.22,
1070
+ 'dbu_per_hour_jobs': 0.15,
1071
+ }
1072
+ }
1073
+
1074
+ def estimate(self, query_info: SQLQueryInfo, warehouse: str,
1075
+ data_stats: Optional[Dict] = None) -> CostEstimate:
1076
+ """Estimate query cost"""
1077
+ warehouse = warehouse.lower()
1078
+
1079
+ if warehouse not in self.PRICING:
1080
+ raise ValueError(f"Unknown warehouse: {warehouse}. Supported: {list(self.PRICING.keys())}")
1081
+
1082
+ # Estimate data scanned
1083
+ data_scanned_bytes = self._estimate_data_scanned(query_info, data_stats)
1084
+ data_scanned_tb = data_scanned_bytes / (1024 ** 4)
1085
+
1086
+ if warehouse == 'bigquery':
1087
+ return self._estimate_bigquery(query_info, data_scanned_tb, data_stats)
1088
+ elif warehouse == 'snowflake':
1089
+ return self._estimate_snowflake(query_info, data_scanned_tb, data_stats)
1090
+ elif warehouse == 'redshift':
1091
+ return self._estimate_redshift(query_info, data_scanned_tb, data_stats)
1092
+ elif warehouse == 'databricks':
1093
+ return self._estimate_databricks(query_info, data_scanned_tb, data_stats)
1094
+
1095
+ def _estimate_data_scanned(self, query_info: SQLQueryInfo,
1096
+ data_stats: Optional[Dict]) -> int:
1097
+ """Estimate bytes of data that will be scanned"""
1098
+ if data_stats and 'total_size_bytes' in data_stats:
1099
+ base_size = data_stats['total_size_bytes']
1100
+ else:
1101
+ # Default assumption: 1GB per table
1102
+ base_size = len(query_info.tables) * 1e9
1103
+
1104
+ # Adjust for filters
1105
+ filter_factor = 1.0
1106
+ if query_info.where_conditions:
1107
+ # Assume each filter reduces data by 50% (very rough)
1108
+ filter_factor = 0.5 ** min(len(query_info.where_conditions), 3)
1109
+
1110
+ # Adjust for column projection
1111
+ if '*' not in query_info.columns and query_info.columns:
1112
+ # Assume selecting specific columns reduces scan by 50%
1113
+ filter_factor *= 0.5
1114
+
1115
+ return int(base_size * filter_factor)
1116
+
1117
+ def _estimate_bigquery(self, query_info: SQLQueryInfo,
1118
+ data_scanned_tb: float, data_stats: Optional[Dict]) -> CostEstimate:
1119
+ pricing = self.PRICING['bigquery']
1120
+
1121
+ compute_cost = data_scanned_tb * pricing['on_demand_per_tb']
1122
+
1123
+ # Minimum billing of 10MB
1124
+ if data_scanned_tb < 10 / (1024 ** 2):
1125
+ compute_cost = 10 / (1024 ** 2) * pricing['on_demand_per_tb']
1126
+
1127
+ return CostEstimate(
1128
+ warehouse='BigQuery',
1129
+ compute_cost=compute_cost,
1130
+ storage_cost=0, # Storage cost separate
1131
+ data_transfer_cost=0,
1132
+ total_cost=compute_cost,
1133
+ assumptions=[
1134
+ f"Estimated {data_scanned_tb * 1024:.2f} GB data scanned",
1135
+ "Using on-demand pricing ($5/TB)",
1136
+ "Assumes no slot reservations",
1137
+ "Actual cost depends on partitioning and clustering"
1138
+ ]
1139
+ )
1140
+
1141
+ def _estimate_snowflake(self, query_info: SQLQueryInfo,
1142
+ data_scanned_tb: float, data_stats: Optional[Dict]) -> CostEstimate:
1143
+ pricing = self.PRICING['snowflake']
1144
+
1145
+ # Estimate warehouse size and time
1146
+ complexity_to_size = {
1147
+ 'low': 'x-small',
1148
+ 'medium': 'small',
1149
+ 'high': 'medium',
1150
+ 'very_high': 'large'
1151
+ }
1152
+ warehouse_size = complexity_to_size.get(query_info.estimated_complexity, 'small')
1153
+ credits_per_hour = pricing['credits_per_hour'][warehouse_size]
1154
+
1155
+ # Estimate runtime (very rough)
1156
+ estimated_seconds = max(1, data_scanned_tb * 1024 * 10) # 10 seconds per GB
1157
+ estimated_hours = estimated_seconds / 3600
1158
+
1159
+ credits_used = credits_per_hour * estimated_hours
1160
+ compute_cost = credits_used * pricing['compute_per_credit']
1161
+
1162
+ # Minimum 1 minute billing
1163
+ min_cost = (credits_per_hour / 60) * pricing['compute_per_credit']
1164
+ compute_cost = max(compute_cost, min_cost)
1165
+
1166
+ return CostEstimate(
1167
+ warehouse='Snowflake',
1168
+ compute_cost=compute_cost,
1169
+ storage_cost=0,
1170
+ data_transfer_cost=0,
1171
+ total_cost=compute_cost,
1172
+ assumptions=[
1173
+ f"Warehouse size: {warehouse_size}",
1174
+ f"Estimated runtime: {estimated_seconds:.1f} seconds",
1175
+ f"Credits used: {credits_used:.4f}",
1176
+ "Minimum 1-minute billing applies",
1177
+ "Actual cost depends on warehouse auto-suspend settings"
1178
+ ]
1179
+ )
1180
+
1181
+ def _estimate_redshift(self, query_info: SQLQueryInfo,
1182
+ data_scanned_tb: float, data_stats: Optional[Dict]) -> CostEstimate:
1183
+ pricing = self.PRICING['redshift']
1184
+
1185
+ # Assume RA3 xl node type
1186
+ hourly_rate = pricing['ra3_xlarge_per_hour']
1187
+
1188
+ # Estimate runtime
1189
+ estimated_seconds = max(1, data_scanned_tb * 1024 * 15) # 15 seconds per GB
1190
+ estimated_hours = estimated_seconds / 3600
1191
+
1192
+ compute_cost = hourly_rate * estimated_hours
1193
+
1194
+ return CostEstimate(
1195
+ warehouse='Redshift',
1196
+ compute_cost=compute_cost,
1197
+ storage_cost=0,
1198
+ data_transfer_cost=0,
1199
+ total_cost=compute_cost,
1200
+ assumptions=[
1201
+ f"Using RA3.xlplus node type",
1202
+ f"Estimated runtime: {estimated_seconds:.1f} seconds",
1203
+ "Assumes dedicated cluster (not serverless)",
1204
+ "Actual cost depends on cluster configuration"
1205
+ ]
1206
+ )
1207
+
1208
+ def _estimate_databricks(self, query_info: SQLQueryInfo,
1209
+ data_scanned_tb: float, data_stats: Optional[Dict]) -> CostEstimate:
1210
+ pricing = self.PRICING['databricks']
1211
+
1212
+ # Estimate DBUs
1213
+ estimated_seconds = max(1, data_scanned_tb * 1024 * 12)
1214
+ estimated_hours = estimated_seconds / 3600
1215
+
1216
+ dbu_cost = pricing['dbu_per_hour_sql'] * estimated_hours
1217
+
1218
+ return CostEstimate(
1219
+ warehouse='Databricks',
1220
+ compute_cost=dbu_cost,
1221
+ storage_cost=0,
1222
+ data_transfer_cost=0,
1223
+ total_cost=dbu_cost,
1224
+ assumptions=[
1225
+ f"Using SQL warehouse",
1226
+ f"Estimated runtime: {estimated_seconds:.1f} seconds",
1227
+ "DBU rate may vary by workspace tier",
1228
+ "Does not include underlying cloud costs"
1229
+ ]
1230
+ )
1231
+
1232
+
1233
+ # =============================================================================
1234
+ # Report Generator
1235
+ # =============================================================================
1236
+
1237
+ class ReportGenerator:
1238
+ """Generate optimization reports"""
1239
+
1240
+ def generate_text_report(self, query_info: SQLQueryInfo,
1241
+ recommendations: List[OptimizationRecommendation],
1242
+ cost_estimate: Optional[CostEstimate] = None) -> str:
1243
+ """Generate a text report"""
1244
+ lines = []
1245
+ lines.append("=" * 80)
1246
+ lines.append("ETL PERFORMANCE OPTIMIZATION REPORT")
1247
+ lines.append("=" * 80)
1248
+ lines.append(f"\nGenerated: {datetime.now().isoformat()}")
1249
+
1250
+ # Query summary
1251
+ lines.append("\n" + "-" * 40)
1252
+ lines.append("QUERY ANALYSIS")
1253
+ lines.append("-" * 40)
1254
+ lines.append(f"Query Type: {query_info.query_type}")
1255
+ lines.append(f"Tables: {', '.join(query_info.tables) or 'None'}")
1256
+ lines.append(f"Joins: {len(query_info.joins)}")
1257
+ lines.append(f"Subqueries: {query_info.subqueries}")
1258
+ lines.append(f"Aggregations: {', '.join(query_info.aggregations) or 'None'}")
1259
+ lines.append(f"Window Functions: {', '.join(query_info.window_functions) or 'None'}")
1260
+ lines.append(f"Complexity: {query_info.estimated_complexity.upper()}")
1261
+
1262
+ # Cost estimate
1263
+ if cost_estimate:
1264
+ lines.append("\n" + "-" * 40)
1265
+ lines.append("COST ESTIMATE")
1266
+ lines.append("-" * 40)
1267
+ lines.append(f"Warehouse: {cost_estimate.warehouse}")
1268
+ lines.append(f"Estimated Cost: ${cost_estimate.total_cost:.4f} {cost_estimate.currency}")
1269
+ lines.append("Assumptions:")
1270
+ for assumption in cost_estimate.assumptions:
1271
+ lines.append(f" - {assumption}")
1272
+
1273
+ # Recommendations
1274
+ if recommendations:
1275
+ lines.append("\n" + "-" * 40)
1276
+ lines.append(f"OPTIMIZATION RECOMMENDATIONS ({len(recommendations)} found)")
1277
+ lines.append("-" * 40)
1278
+
1279
+ for i, rec in enumerate(recommendations, 1):
1280
+ severity_icon = {
1281
+ 'critical': '🔴',
1282
+ 'high': '🟠',
1283
+ 'medium': '🟡',
1284
+ 'low': '🟢'
1285
+ }.get(rec.severity, '⚪')
1286
+
1287
+ lines.append(f"\n{i}. {severity_icon} [{rec.severity.upper()}] {rec.title}")
1288
+ lines.append(f" Category: {rec.category}")
1289
+ lines.append(f" Issue: {rec.current_issue}")
1290
+ lines.append(f" Recommendation: {rec.recommendation}")
1291
+ lines.append(f" Expected Improvement: {rec.expected_improvement}")
1292
+ lines.append(f"\n Implementation:")
1293
+ for impl_line in rec.implementation.strip().split('\n'):
1294
+ lines.append(f" {impl_line}")
1295
+ else:
1296
+ lines.append("\n✅ No optimization issues detected")
1297
+
1298
+ lines.append("\n" + "=" * 80)
1299
+
1300
+ return "\n".join(lines)
1301
+
1302
+ def generate_json_report(self, query_info: SQLQueryInfo,
1303
+ recommendations: List[OptimizationRecommendation],
1304
+ cost_estimate: Optional[CostEstimate] = None) -> Dict:
1305
+ """Generate a JSON report"""
1306
+ return {
1307
+ "report_type": "etl_performance_optimization",
1308
+ "generated_at": datetime.now().isoformat(),
1309
+ "query_analysis": {
1310
+ "query_type": query_info.query_type,
1311
+ "tables": query_info.tables,
1312
+ "joins": query_info.joins,
1313
+ "subqueries": query_info.subqueries,
1314
+ "aggregations": query_info.aggregations,
1315
+ "window_functions": query_info.window_functions,
1316
+ "complexity": query_info.estimated_complexity
1317
+ },
1318
+ "cost_estimate": asdict(cost_estimate) if cost_estimate else None,
1319
+ "recommendations": [asdict(r) for r in recommendations],
1320
+ "summary": {
1321
+ "total_recommendations": len(recommendations),
1322
+ "critical": sum(1 for r in recommendations if r.severity == "critical"),
1323
+ "high": sum(1 for r in recommendations if r.severity == "high"),
1324
+ "medium": sum(1 for r in recommendations if r.severity == "medium"),
1325
+ "low": sum(1 for r in recommendations if r.severity == "low")
1326
+ }
1327
+ }
1328
+
1329
+
1330
+ # =============================================================================
1331
+ # CLI Commands
1332
+ # =============================================================================
1333
+
1334
+ def cmd_analyze_sql(args):
1335
+ """Analyze SQL query for optimization opportunities"""
1336
+ # Load SQL
1337
+ sql_path = Path(args.input)
1338
+ if sql_path.exists():
1339
+ with open(sql_path, 'r') as f:
1340
+ sql = f.read()
1341
+ else:
1342
+ sql = args.input # Treat as inline SQL
1343
+
1344
+ # Parse and analyze
1345
+ parser = SQLParser()
1346
+ query_info = parser.parse(sql)
1347
+
1348
+ optimizer = SQLOptimizer()
1349
+ recommendations = optimizer.analyze(query_info, sql)
1350
+
1351
+ # Cost estimate if warehouse specified
1352
+ cost_estimate = None
1353
+ if args.warehouse:
1354
+ estimator = CostEstimator()
1355
+ data_stats = None
1356
+ if args.stats:
1357
+ with open(args.stats, 'r') as f:
1358
+ data_stats = json.load(f)
1359
+ cost_estimate = estimator.estimate(query_info, args.warehouse, data_stats)
1360
+
1361
+ # Generate report
1362
+ reporter = ReportGenerator()
1363
+
1364
+ if args.json:
1365
+ report = reporter.generate_json_report(query_info, recommendations, cost_estimate)
1366
+ output = json.dumps(report, indent=2)
1367
+ else:
1368
+ output = reporter.generate_text_report(query_info, recommendations, cost_estimate)
1369
+
1370
+ if args.output:
1371
+ with open(args.output, 'w') as f:
1372
+ f.write(output)
1373
+ logger.info(f"Report saved to {args.output}")
1374
+ else:
1375
+ print(output)
1376
+
1377
+
1378
+ def cmd_analyze_spark(args):
1379
+ """Analyze Spark job metrics"""
1380
+ with open(args.input, 'r') as f:
1381
+ metrics_data = json.load(f)
1382
+
1383
+ # Handle both single job and array of jobs
1384
+ if isinstance(metrics_data, list):
1385
+ jobs = metrics_data
1386
+ else:
1387
+ jobs = [metrics_data]
1388
+
1389
+ all_recommendations = []
1390
+ analyzer = SparkJobAnalyzer()
1391
+
1392
+ for job_data in jobs:
1393
+ metrics = SparkJobMetrics(
1394
+ job_id=job_data.get('jobId', 'unknown'),
1395
+ duration_ms=job_data.get('duration', 0),
1396
+ stages=job_data.get('numStages', 0),
1397
+ tasks=job_data.get('numTasks', 0),
1398
+ shuffle_read_bytes=job_data.get('shuffleReadBytes', 0),
1399
+ shuffle_write_bytes=job_data.get('shuffleWriteBytes', 0),
1400
+ input_bytes=job_data.get('inputBytes', 0),
1401
+ output_bytes=job_data.get('outputBytes', 0),
1402
+ peak_memory_bytes=job_data.get('peakMemoryBytes', 0),
1403
+ gc_time_ms=job_data.get('gcTime', 0),
1404
+ failed_tasks=job_data.get('failedTasks', 0),
1405
+ speculative_tasks=job_data.get('speculativeTasks', 0),
1406
+ skew_ratio=job_data.get('skewRatio', 1.0)
1407
+ )
1408
+
1409
+ recommendations = analyzer.analyze(metrics)
1410
+ all_recommendations.extend(recommendations)
1411
+
1412
+ # Deduplicate similar recommendations
1413
+ unique_recs = []
1414
+ seen_titles = set()
1415
+ for rec in all_recommendations:
1416
+ if rec.title not in seen_titles:
1417
+ unique_recs.append(rec)
1418
+ seen_titles.add(rec.title)
1419
+
1420
+ # Output
1421
+ if args.json:
1422
+ output = json.dumps([asdict(r) for r in unique_recs], indent=2)
1423
+ else:
1424
+ lines = []
1425
+ lines.append("=" * 60)
1426
+ lines.append("SPARK JOB OPTIMIZATION REPORT")
1427
+ lines.append("=" * 60)
1428
+ lines.append(f"\nJobs Analyzed: {len(jobs)}")
1429
+ lines.append(f"Recommendations: {len(unique_recs)}")
1430
+
1431
+ for i, rec in enumerate(unique_recs, 1):
1432
+ lines.append(f"\n{i}. [{rec.severity.upper()}] {rec.title}")
1433
+ lines.append(f" {rec.description}")
1434
+ lines.append(f" Implementation: {rec.implementation[:200]}...")
1435
+
1436
+ output = "\n".join(lines)
1437
+
1438
+ if args.output:
1439
+ with open(args.output, 'w') as f:
1440
+ f.write(output)
1441
+ else:
1442
+ print(output)
1443
+
1444
+
1445
+ def cmd_optimize_partition(args):
1446
+ """Recommend partition strategies"""
1447
+ with open(args.input, 'r') as f:
1448
+ data_stats = json.load(f)
1449
+
1450
+ advisor = PartitionAdvisor()
1451
+ strategies = advisor.recommend(data_stats)
1452
+
1453
+ if args.json:
1454
+ output = json.dumps([asdict(s) for s in strategies], indent=2)
1455
+ else:
1456
+ lines = []
1457
+ lines.append("=" * 60)
1458
+ lines.append("PARTITION STRATEGY RECOMMENDATIONS")
1459
+ lines.append("=" * 60)
1460
+
1461
+ if not strategies:
1462
+ lines.append("\nNo partition recommendations based on provided data statistics.")
1463
+ else:
1464
+ for i, strategy in enumerate(strategies, 1):
1465
+ lines.append(f"\n{i}. Partition by: {strategy.column}")
1466
+ lines.append(f" Type: {strategy.partition_type}")
1467
+ if strategy.num_partitions:
1468
+ lines.append(f" Partitions: {strategy.num_partitions}")
1469
+ lines.append(f" Estimated size: {strategy.partition_size_mb:.1f} MB per partition")
1470
+ lines.append(f" Reasoning: {strategy.reasoning}")
1471
+ lines.append(f"\n Implementation:")
1472
+ for impl_line in strategy.implementation.strip().split('\n'):
1473
+ lines.append(f" {impl_line}")
1474
+
1475
+ output = "\n".join(lines)
1476
+
1477
+ if args.output:
1478
+ with open(args.output, 'w') as f:
1479
+ f.write(output)
1480
+ else:
1481
+ print(output)
1482
+
1483
+
1484
+ def cmd_estimate_cost(args):
1485
+ """Estimate query cost"""
1486
+ # Load SQL
1487
+ sql_path = Path(args.input)
1488
+ if sql_path.exists():
1489
+ with open(sql_path, 'r') as f:
1490
+ sql = f.read()
1491
+ else:
1492
+ sql = args.input
1493
+
1494
+ # Parse
1495
+ parser = SQLParser()
1496
+ query_info = parser.parse(sql)
1497
+
1498
+ # Load data stats if provided
1499
+ data_stats = None
1500
+ if args.stats:
1501
+ with open(args.stats, 'r') as f:
1502
+ data_stats = json.load(f)
1503
+
1504
+ # Estimate cost
1505
+ estimator = CostEstimator()
1506
+ cost = estimator.estimate(query_info, args.warehouse, data_stats)
1507
+
1508
+ if args.json:
1509
+ output = json.dumps(asdict(cost), indent=2)
1510
+ else:
1511
+ lines = []
1512
+ lines.append(f"Cost Estimate for {cost.warehouse}")
1513
+ lines.append("=" * 40)
1514
+ lines.append(f"Compute Cost: ${cost.compute_cost:.4f}")
1515
+ lines.append(f"Storage Cost: ${cost.storage_cost:.4f}")
1516
+ lines.append(f"Data Transfer: ${cost.data_transfer_cost:.4f}")
1517
+ lines.append("-" * 40)
1518
+ lines.append(f"Total: ${cost.total_cost:.4f} {cost.currency}")
1519
+ lines.append("\nAssumptions:")
1520
+ for assumption in cost.assumptions:
1521
+ lines.append(f" - {assumption}")
1522
+
1523
+ output = "\n".join(lines)
1524
+
1525
+ if args.output:
1526
+ with open(args.output, 'w') as f:
1527
+ f.write(output)
1528
+ else:
1529
+ print(output)
1530
+
1531
+
1532
+ def cmd_generate_template(args):
1533
+ """Generate template files"""
1534
+ templates = {
1535
+ 'data_stats': {
1536
+ "total_size_bytes": 10737418240,
1537
+ "row_count": 10000000,
1538
+ "columns": {
1539
+ "id": {
1540
+ "data_type": "integer",
1541
+ "cardinality": 10000000,
1542
+ "null_percentage": 0
1543
+ },
1544
+ "created_at": {
1545
+ "data_type": "timestamp",
1546
+ "cardinality": 1000000,
1547
+ "null_percentage": 0
1548
+ },
1549
+ "category": {
1550
+ "data_type": "string",
1551
+ "cardinality": 50,
1552
+ "null_percentage": 2
1553
+ },
1554
+ "amount": {
1555
+ "data_type": "float",
1556
+ "cardinality": 100000,
1557
+ "null_percentage": 5
1558
+ }
1559
+ }
1560
+ },
1561
+ 'spark_metrics': {
1562
+ "jobId": "job_12345",
1563
+ "duration": 300000,
1564
+ "numStages": 5,
1565
+ "numTasks": 200,
1566
+ "shuffleReadBytes": 5368709120,
1567
+ "shuffleWriteBytes": 2147483648,
1568
+ "inputBytes": 10737418240,
1569
+ "outputBytes": 1073741824,
1570
+ "peakMemoryBytes": 4294967296,
1571
+ "gcTime": 15000,
1572
+ "failedTasks": 2,
1573
+ "speculativeTasks": 5,
1574
+ "skewRatio": 3.5
1575
+ }
1576
+ }
1577
+
1578
+ if args.template not in templates:
1579
+ logger.error(f"Unknown template: {args.template}. Available: {list(templates.keys())}")
1580
+ sys.exit(1)
1581
+
1582
+ output = json.dumps(templates[args.template], indent=2)
1583
+
1584
+ if args.output:
1585
+ with open(args.output, 'w') as f:
1586
+ f.write(output)
1587
+ logger.info(f"Template saved to {args.output}")
1588
+ else:
1589
+ print(output)
1590
+
1591
+
1592
+ def main():
1593
+ """Main entry point"""
1594
+ parser = argparse.ArgumentParser(
1595
+ description="ETL Performance Optimizer - Analyze and optimize data pipelines",
1596
+ formatter_class=argparse.RawDescriptionHelpFormatter,
1597
+ epilog="""
1598
+ Examples:
1599
+ # Analyze SQL query
1600
+ python etl_performance_optimizer.py analyze-sql query.sql
1601
+
1602
+ # Analyze with cost estimate
1603
+ python etl_performance_optimizer.py analyze-sql query.sql --warehouse bigquery
1604
+
1605
+ # Analyze Spark job metrics
1606
+ python etl_performance_optimizer.py analyze-spark spark-history.json
1607
+
1608
+ # Get partition recommendations
1609
+ python etl_performance_optimizer.py optimize-partition data_stats.json
1610
+
1611
+ # Estimate query cost
1612
+ python etl_performance_optimizer.py estimate-cost query.sql --warehouse snowflake
1613
+
1614
+ # Generate template files
1615
+ python etl_performance_optimizer.py template data_stats --output stats.json
1616
+ """
1617
+ )
1618
+
1619
+ parser.add_argument('--verbose', '-v', action='store_true', help='Verbose output')
1620
+
1621
+ subparsers = parser.add_subparsers(dest='command', help='Command to run')
1622
+
1623
+ # Analyze SQL command
1624
+ sql_parser = subparsers.add_parser('analyze-sql', help='Analyze SQL query')
1625
+ sql_parser.add_argument('input', help='SQL file or inline query')
1626
+ sql_parser.add_argument('--warehouse', '-w', choices=['bigquery', 'snowflake', 'redshift', 'databricks'],
1627
+ help='Warehouse for cost estimation')
1628
+ sql_parser.add_argument('--stats', '-s', help='Data statistics JSON file')
1629
+ sql_parser.add_argument('--output', '-o', help='Output file')
1630
+ sql_parser.add_argument('--json', action='store_true', help='Output as JSON')
1631
+ sql_parser.set_defaults(func=cmd_analyze_sql)
1632
+
1633
+ # Analyze Spark command
1634
+ spark_parser = subparsers.add_parser('analyze-spark', help='Analyze Spark job metrics')
1635
+ spark_parser.add_argument('input', help='Spark metrics JSON file')
1636
+ spark_parser.add_argument('--output', '-o', help='Output file')
1637
+ spark_parser.add_argument('--json', action='store_true', help='Output as JSON')
1638
+ spark_parser.set_defaults(func=cmd_analyze_spark)
1639
+
1640
+ # Optimize partition command
1641
+ partition_parser = subparsers.add_parser('optimize-partition', help='Recommend partition strategies')
1642
+ partition_parser.add_argument('input', help='Data statistics JSON file')
1643
+ partition_parser.add_argument('--output', '-o', help='Output file')
1644
+ partition_parser.add_argument('--json', action='store_true', help='Output as JSON')
1645
+ partition_parser.set_defaults(func=cmd_optimize_partition)
1646
+
1647
+ # Estimate cost command
1648
+ cost_parser = subparsers.add_parser('estimate-cost', help='Estimate query cost')
1649
+ cost_parser.add_argument('input', help='SQL file or inline query')
1650
+ cost_parser.add_argument('--warehouse', '-w', required=True,
1651
+ choices=['bigquery', 'snowflake', 'redshift', 'databricks'],
1652
+ help='Target warehouse')
1653
+ cost_parser.add_argument('--stats', '-s', help='Data statistics JSON file')
1654
+ cost_parser.add_argument('--output', '-o', help='Output file')
1655
+ cost_parser.add_argument('--json', action='store_true', help='Output as JSON')
1656
+ cost_parser.set_defaults(func=cmd_estimate_cost)
1657
+
1658
+ # Template command
1659
+ template_parser = subparsers.add_parser('template', help='Generate template files')
1660
+ template_parser.add_argument('template', choices=['data_stats', 'spark_metrics'],
1661
+ help='Template type')
1662
+ template_parser.add_argument('--output', '-o', help='Output file')
1663
+ template_parser.set_defaults(func=cmd_generate_template)
1664
+
1665
+ args = parser.parse_args()
1666
+
1667
+ if args.verbose:
1668
+ logging.getLogger().setLevel(logging.DEBUG)
1669
+
1670
+ if not args.command:
1671
+ parser.print_help()
1672
+ sys.exit(1)
1673
+
1674
+ try:
1675
+ args.func(args)
1676
+ except Exception as e:
1677
+ logger.error(f"Error: {e}")
1678
+ if args.verbose:
1679
+ import traceback
1680
+ traceback.print_exc()
1681
+ sys.exit(1)
1682
+
1683
+
1684
+ if __name__ == '__main__':
1685
+ main()