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,1699 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Dataset Pipeline Builder for Computer Vision
4
+
5
+ Production-grade tool for building and managing CV dataset pipelines.
6
+ Supports format conversion, splitting, augmentation config, and validation.
7
+
8
+ Supported formats:
9
+ - COCO (JSON annotations)
10
+ - YOLO (txt per image)
11
+ - Pascal VOC (XML annotations)
12
+ - CVAT (XML export)
13
+
14
+ Usage:
15
+ python dataset_pipeline_builder.py analyze --input /path/to/dataset
16
+ python dataset_pipeline_builder.py convert --input /path/to/coco --output /path/to/yolo --format yolo
17
+ python dataset_pipeline_builder.py split --input /path/to/dataset --train 0.8 --val 0.1 --test 0.1
18
+ python dataset_pipeline_builder.py augment-config --task detection --output augmentations.yaml
19
+ python dataset_pipeline_builder.py validate --input /path/to/dataset --format coco
20
+ """
21
+
22
+ import os
23
+ import sys
24
+ import json
25
+ import random
26
+ import shutil
27
+ import logging
28
+ import argparse
29
+ import hashlib
30
+ from pathlib import Path
31
+ from typing import Dict, List, Optional, Tuple, Set, Any
32
+ from datetime import datetime
33
+ from collections import defaultdict
34
+ import xml.etree.ElementTree as ET
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
+ # Dataset Format Definitions
45
+ # ============================================================================
46
+
47
+ SUPPORTED_IMAGE_EXTENSIONS = {'.jpg', '.jpeg', '.png', '.bmp', '.tiff', '.webp'}
48
+
49
+ COCO_CATEGORIES_TEMPLATE = {
50
+ "info": {
51
+ "description": "Custom Dataset",
52
+ "version": "1.0",
53
+ "year": datetime.now().year,
54
+ "contributor": "Dataset Pipeline Builder",
55
+ "date_created": datetime.now().isoformat()
56
+ },
57
+ "licenses": [{"id": 1, "name": "Unknown", "url": ""}],
58
+ "images": [],
59
+ "annotations": [],
60
+ "categories": []
61
+ }
62
+
63
+ YOLO_DATA_YAML_TEMPLATE = """# YOLO Dataset Configuration
64
+ # Generated by Dataset Pipeline Builder
65
+
66
+ path: {dataset_path}
67
+ train: {train_path}
68
+ val: {val_path}
69
+ test: {test_path}
70
+
71
+ # Classes
72
+ nc: {num_classes}
73
+ names: {class_names}
74
+
75
+ # Optional: Download script
76
+ # download:
77
+ """
78
+
79
+ AUGMENTATION_PRESETS = {
80
+ 'detection': {
81
+ 'light': {
82
+ 'horizontal_flip': 0.5,
83
+ 'vertical_flip': 0.0,
84
+ 'rotate': {'limit': 10, 'p': 0.3},
85
+ 'brightness_contrast': {'brightness_limit': 0.1, 'contrast_limit': 0.1, 'p': 0.3},
86
+ 'blur': {'blur_limit': 3, 'p': 0.1}
87
+ },
88
+ 'medium': {
89
+ 'horizontal_flip': 0.5,
90
+ 'vertical_flip': 0.1,
91
+ 'rotate': {'limit': 15, 'p': 0.5},
92
+ 'scale': {'scale_limit': 0.2, 'p': 0.5},
93
+ 'brightness_contrast': {'brightness_limit': 0.2, 'contrast_limit': 0.2, 'p': 0.5},
94
+ 'hue_saturation': {'hue_shift_limit': 10, 'sat_shift_limit': 20, 'p': 0.3},
95
+ 'blur': {'blur_limit': 5, 'p': 0.2},
96
+ 'noise': {'var_limit': (10, 50), 'p': 0.2}
97
+ },
98
+ 'heavy': {
99
+ 'horizontal_flip': 0.5,
100
+ 'vertical_flip': 0.2,
101
+ 'rotate': {'limit': 30, 'p': 0.7},
102
+ 'scale': {'scale_limit': 0.3, 'p': 0.6},
103
+ 'brightness_contrast': {'brightness_limit': 0.3, 'contrast_limit': 0.3, 'p': 0.6},
104
+ 'hue_saturation': {'hue_shift_limit': 20, 'sat_shift_limit': 30, 'p': 0.5},
105
+ 'blur': {'blur_limit': 7, 'p': 0.3},
106
+ 'noise': {'var_limit': (10, 80), 'p': 0.3},
107
+ 'mosaic': {'p': 0.5},
108
+ 'mixup': {'p': 0.3},
109
+ 'cutout': {'num_holes': 8, 'max_h_size': 32, 'max_w_size': 32, 'p': 0.3}
110
+ }
111
+ },
112
+ 'segmentation': {
113
+ 'light': {
114
+ 'horizontal_flip': 0.5,
115
+ 'rotate': {'limit': 10, 'p': 0.3},
116
+ 'elastic_transform': {'alpha': 50, 'sigma': 5, 'p': 0.1}
117
+ },
118
+ 'medium': {
119
+ 'horizontal_flip': 0.5,
120
+ 'vertical_flip': 0.2,
121
+ 'rotate': {'limit': 20, 'p': 0.5},
122
+ 'scale': {'scale_limit': 0.2, 'p': 0.4},
123
+ 'elastic_transform': {'alpha': 100, 'sigma': 10, 'p': 0.3},
124
+ 'grid_distortion': {'num_steps': 5, 'distort_limit': 0.3, 'p': 0.3}
125
+ },
126
+ 'heavy': {
127
+ 'horizontal_flip': 0.5,
128
+ 'vertical_flip': 0.3,
129
+ 'rotate': {'limit': 45, 'p': 0.7},
130
+ 'scale': {'scale_limit': 0.4, 'p': 0.6},
131
+ 'elastic_transform': {'alpha': 200, 'sigma': 20, 'p': 0.5},
132
+ 'grid_distortion': {'num_steps': 7, 'distort_limit': 0.5, 'p': 0.4},
133
+ 'optical_distortion': {'distort_limit': 0.5, 'shift_limit': 0.5, 'p': 0.3}
134
+ }
135
+ },
136
+ 'classification': {
137
+ 'light': {
138
+ 'horizontal_flip': 0.5,
139
+ 'rotate': {'limit': 15, 'p': 0.3},
140
+ 'brightness_contrast': {'p': 0.3}
141
+ },
142
+ 'medium': {
143
+ 'horizontal_flip': 0.5,
144
+ 'rotate': {'limit': 30, 'p': 0.5},
145
+ 'color_jitter': {'brightness': 0.2, 'contrast': 0.2, 'saturation': 0.2, 'hue': 0.1, 'p': 0.5},
146
+ 'random_crop': {'height': 224, 'width': 224, 'p': 0.5},
147
+ 'cutout': {'num_holes': 1, 'max_h_size': 40, 'max_w_size': 40, 'p': 0.3}
148
+ },
149
+ 'heavy': {
150
+ 'horizontal_flip': 0.5,
151
+ 'vertical_flip': 0.2,
152
+ 'rotate': {'limit': 45, 'p': 0.7},
153
+ 'color_jitter': {'brightness': 0.4, 'contrast': 0.4, 'saturation': 0.4, 'hue': 0.2, 'p': 0.7},
154
+ 'random_resized_crop': {'height': 224, 'width': 224, 'scale': (0.5, 1.0), 'p': 0.6},
155
+ 'cutout': {'num_holes': 4, 'max_h_size': 60, 'max_w_size': 60, 'p': 0.5},
156
+ 'auto_augment': {'policy': 'imagenet', 'p': 0.5},
157
+ 'rand_augment': {'num_ops': 2, 'magnitude': 9, 'p': 0.5}
158
+ }
159
+ }
160
+ }
161
+
162
+
163
+ # ============================================================================
164
+ # Dataset Analysis
165
+ # ============================================================================
166
+
167
+ class DatasetAnalyzer:
168
+ """Analyze dataset structure and statistics."""
169
+
170
+ def __init__(self, dataset_path: str):
171
+ self.dataset_path = Path(dataset_path)
172
+ self.stats = {}
173
+
174
+ def analyze(self) -> Dict[str, Any]:
175
+ """Run full dataset analysis."""
176
+ logger.info(f"Analyzing dataset at: {self.dataset_path}")
177
+
178
+ # Detect format
179
+ detected_format = self._detect_format()
180
+ self.stats['format'] = detected_format
181
+
182
+ # Count images
183
+ images = self._find_images()
184
+ self.stats['total_images'] = len(images)
185
+
186
+ # Analyze images
187
+ self.stats['image_stats'] = self._analyze_images(images)
188
+
189
+ # Analyze annotations based on format
190
+ if detected_format == 'coco':
191
+ self.stats['annotations'] = self._analyze_coco()
192
+ elif detected_format == 'yolo':
193
+ self.stats['annotations'] = self._analyze_yolo()
194
+ elif detected_format == 'voc':
195
+ self.stats['annotations'] = self._analyze_voc()
196
+ else:
197
+ self.stats['annotations'] = {'error': 'Unknown format'}
198
+
199
+ # Dataset quality checks
200
+ self.stats['quality'] = self._quality_checks()
201
+
202
+ return self.stats
203
+
204
+ def _detect_format(self) -> str:
205
+ """Auto-detect dataset format."""
206
+ # Check for COCO JSON
207
+ for json_file in self.dataset_path.rglob('*.json'):
208
+ try:
209
+ with open(json_file) as f:
210
+ data = json.load(f)
211
+ if 'annotations' in data and 'images' in data:
212
+ return 'coco'
213
+ except:
214
+ pass
215
+
216
+ # Check for YOLO txt files
217
+ txt_files = list(self.dataset_path.rglob('*.txt'))
218
+ if txt_files:
219
+ # Check if txt contains YOLO format (class x_center y_center width height)
220
+ for txt_file in txt_files[:5]:
221
+ if txt_file.name == 'classes.txt':
222
+ continue
223
+ try:
224
+ with open(txt_file) as f:
225
+ line = f.readline().strip()
226
+ if line:
227
+ parts = line.split()
228
+ if len(parts) == 5 and all(self._is_float(p) for p in parts):
229
+ return 'yolo'
230
+ except:
231
+ pass
232
+
233
+ # Check for VOC XML
234
+ xml_files = list(self.dataset_path.rglob('*.xml'))
235
+ for xml_file in xml_files[:5]:
236
+ try:
237
+ tree = ET.parse(xml_file)
238
+ root = tree.getroot()
239
+ if root.tag == 'annotation' and root.find('object') is not None:
240
+ return 'voc'
241
+ except:
242
+ pass
243
+
244
+ return 'unknown'
245
+
246
+ def _is_float(self, s: str) -> bool:
247
+ """Check if string is a float."""
248
+ try:
249
+ float(s)
250
+ return True
251
+ except ValueError:
252
+ return False
253
+
254
+ def _find_images(self) -> List[Path]:
255
+ """Find all images in dataset."""
256
+ images = []
257
+ for ext in SUPPORTED_IMAGE_EXTENSIONS:
258
+ images.extend(self.dataset_path.rglob(f'*{ext}'))
259
+ images.extend(self.dataset_path.rglob(f'*{ext.upper()}'))
260
+ return images
261
+
262
+ def _analyze_images(self, images: List[Path]) -> Dict:
263
+ """Analyze image files without loading them."""
264
+ stats = {
265
+ 'count': len(images),
266
+ 'extensions': defaultdict(int),
267
+ 'sizes': [],
268
+ 'locations': defaultdict(int)
269
+ }
270
+
271
+ for img in images:
272
+ stats['extensions'][img.suffix.lower()] += 1
273
+ stats['sizes'].append(img.stat().st_size)
274
+ # Track which subdirectory
275
+ rel_path = img.relative_to(self.dataset_path)
276
+ if len(rel_path.parts) > 1:
277
+ stats['locations'][rel_path.parts[0]] += 1
278
+ else:
279
+ stats['locations']['root'] += 1
280
+
281
+ if stats['sizes']:
282
+ stats['total_size_mb'] = sum(stats['sizes']) / (1024 * 1024)
283
+ stats['avg_size_kb'] = (sum(stats['sizes']) / len(stats['sizes'])) / 1024
284
+ stats['min_size_kb'] = min(stats['sizes']) / 1024
285
+ stats['max_size_kb'] = max(stats['sizes']) / 1024
286
+
287
+ stats['extensions'] = dict(stats['extensions'])
288
+ stats['locations'] = dict(stats['locations'])
289
+ del stats['sizes'] # Don't include raw sizes
290
+
291
+ return stats
292
+
293
+ def _analyze_coco(self) -> Dict:
294
+ """Analyze COCO format annotations."""
295
+ stats = {
296
+ 'total_annotations': 0,
297
+ 'classes': {},
298
+ 'images_with_annotations': 0,
299
+ 'annotations_per_image': {},
300
+ 'bbox_stats': {}
301
+ }
302
+
303
+ # Find COCO JSON files
304
+ for json_file in self.dataset_path.rglob('*.json'):
305
+ try:
306
+ with open(json_file) as f:
307
+ data = json.load(f)
308
+
309
+ if 'annotations' not in data:
310
+ continue
311
+
312
+ # Build category mapping
313
+ cat_map = {}
314
+ if 'categories' in data:
315
+ for cat in data['categories']:
316
+ cat_map[cat['id']] = cat['name']
317
+
318
+ # Count annotations per class
319
+ img_annotations = defaultdict(int)
320
+ bbox_widths = []
321
+ bbox_heights = []
322
+ bbox_areas = []
323
+
324
+ for ann in data['annotations']:
325
+ stats['total_annotations'] += 1
326
+ cat_id = ann.get('category_id')
327
+ cat_name = cat_map.get(cat_id, f'class_{cat_id}')
328
+ stats['classes'][cat_name] = stats['classes'].get(cat_name, 0) + 1
329
+ img_annotations[ann.get('image_id')] += 1
330
+
331
+ # Bbox stats
332
+ if 'bbox' in ann:
333
+ bbox = ann['bbox'] # [x, y, width, height]
334
+ if len(bbox) == 4:
335
+ bbox_widths.append(bbox[2])
336
+ bbox_heights.append(bbox[3])
337
+ bbox_areas.append(bbox[2] * bbox[3])
338
+
339
+ stats['images_with_annotations'] = len(img_annotations)
340
+ if img_annotations:
341
+ counts = list(img_annotations.values())
342
+ stats['annotations_per_image'] = {
343
+ 'min': min(counts),
344
+ 'max': max(counts),
345
+ 'avg': sum(counts) / len(counts)
346
+ }
347
+
348
+ if bbox_areas:
349
+ stats['bbox_stats'] = {
350
+ 'avg_width': sum(bbox_widths) / len(bbox_widths),
351
+ 'avg_height': sum(bbox_heights) / len(bbox_heights),
352
+ 'avg_area': sum(bbox_areas) / len(bbox_areas),
353
+ 'min_area': min(bbox_areas),
354
+ 'max_area': max(bbox_areas)
355
+ }
356
+
357
+ except Exception as e:
358
+ logger.warning(f"Error parsing {json_file}: {e}")
359
+
360
+ return stats
361
+
362
+ def _analyze_yolo(self) -> Dict:
363
+ """Analyze YOLO format annotations."""
364
+ stats = {
365
+ 'total_annotations': 0,
366
+ 'classes': defaultdict(int),
367
+ 'images_with_annotations': 0,
368
+ 'bbox_stats': {}
369
+ }
370
+
371
+ # Find classes.txt if exists
372
+ class_names = {}
373
+ classes_file = self.dataset_path / 'classes.txt'
374
+ if classes_file.exists():
375
+ with open(classes_file) as f:
376
+ for i, line in enumerate(f):
377
+ class_names[i] = line.strip()
378
+
379
+ bbox_widths = []
380
+ bbox_heights = []
381
+
382
+ for txt_file in self.dataset_path.rglob('*.txt'):
383
+ if txt_file.name == 'classes.txt':
384
+ continue
385
+
386
+ try:
387
+ with open(txt_file) as f:
388
+ lines = f.readlines()
389
+
390
+ if lines:
391
+ stats['images_with_annotations'] += 1
392
+
393
+ for line in lines:
394
+ parts = line.strip().split()
395
+ if len(parts) >= 5:
396
+ stats['total_annotations'] += 1
397
+ class_id = int(parts[0])
398
+ class_name = class_names.get(class_id, f'class_{class_id}')
399
+ stats['classes'][class_name] += 1
400
+
401
+ # Bbox stats (normalized coords)
402
+ w = float(parts[3])
403
+ h = float(parts[4])
404
+ bbox_widths.append(w)
405
+ bbox_heights.append(h)
406
+
407
+ except Exception as e:
408
+ logger.warning(f"Error parsing {txt_file}: {e}")
409
+
410
+ stats['classes'] = dict(stats['classes'])
411
+
412
+ if bbox_widths:
413
+ stats['bbox_stats'] = {
414
+ 'avg_width_normalized': sum(bbox_widths) / len(bbox_widths),
415
+ 'avg_height_normalized': sum(bbox_heights) / len(bbox_heights),
416
+ 'min_width_normalized': min(bbox_widths),
417
+ 'max_width_normalized': max(bbox_widths)
418
+ }
419
+
420
+ return stats
421
+
422
+ def _analyze_voc(self) -> Dict:
423
+ """Analyze Pascal VOC format annotations."""
424
+ stats = {
425
+ 'total_annotations': 0,
426
+ 'classes': defaultdict(int),
427
+ 'images_with_annotations': 0,
428
+ 'difficulties': {'easy': 0, 'difficult': 0}
429
+ }
430
+
431
+ for xml_file in self.dataset_path.rglob('*.xml'):
432
+ try:
433
+ tree = ET.parse(xml_file)
434
+ root = tree.getroot()
435
+
436
+ if root.tag != 'annotation':
437
+ continue
438
+
439
+ objects = root.findall('object')
440
+ if objects:
441
+ stats['images_with_annotations'] += 1
442
+
443
+ for obj in objects:
444
+ stats['total_annotations'] += 1
445
+ name = obj.find('name')
446
+ if name is not None:
447
+ stats['classes'][name.text] += 1
448
+
449
+ difficult = obj.find('difficult')
450
+ if difficult is not None and difficult.text == '1':
451
+ stats['difficulties']['difficult'] += 1
452
+ else:
453
+ stats['difficulties']['easy'] += 1
454
+
455
+ except Exception as e:
456
+ logger.warning(f"Error parsing {xml_file}: {e}")
457
+
458
+ stats['classes'] = dict(stats['classes'])
459
+ return stats
460
+
461
+ def _quality_checks(self) -> Dict:
462
+ """Run quality checks on dataset."""
463
+ checks = {
464
+ 'issues': [],
465
+ 'warnings': [],
466
+ 'recommendations': []
467
+ }
468
+
469
+ # Check class imbalance
470
+ if 'annotations' in self.stats and 'classes' in self.stats['annotations']:
471
+ classes = self.stats['annotations']['classes']
472
+ if classes:
473
+ counts = list(classes.values())
474
+ max_count = max(counts)
475
+ min_count = min(counts)
476
+
477
+ if max_count > 0 and min_count / max_count < 0.1:
478
+ checks['warnings'].append(
479
+ f"Severe class imbalance detected: ratio {min_count/max_count:.2%}"
480
+ )
481
+ checks['recommendations'].append(
482
+ "Consider oversampling minority classes or using focal loss"
483
+ )
484
+ elif max_count > 0 and min_count / max_count < 0.3:
485
+ checks['warnings'].append(
486
+ f"Moderate class imbalance: ratio {min_count/max_count:.2%}"
487
+ )
488
+
489
+ # Check image count
490
+ if self.stats.get('total_images', 0) < 100:
491
+ checks['warnings'].append(
492
+ f"Small dataset: only {self.stats.get('total_images', 0)} images"
493
+ )
494
+ checks['recommendations'].append(
495
+ "Consider data augmentation or transfer learning"
496
+ )
497
+
498
+ # Check for missing annotations
499
+ if 'annotations' in self.stats:
500
+ ann_stats = self.stats['annotations']
501
+ total_images = self.stats.get('total_images', 0)
502
+ images_with_ann = ann_stats.get('images_with_annotations', 0)
503
+
504
+ if total_images > 0 and images_with_ann < total_images:
505
+ missing = total_images - images_with_ann
506
+ checks['warnings'].append(
507
+ f"{missing} images have no annotations"
508
+ )
509
+
510
+ return checks
511
+
512
+
513
+ # ============================================================================
514
+ # Format Conversion
515
+ # ============================================================================
516
+
517
+ class FormatConverter:
518
+ """Convert between dataset formats."""
519
+
520
+ def __init__(self, input_path: str, output_path: str):
521
+ self.input_path = Path(input_path)
522
+ self.output_path = Path(output_path)
523
+
524
+ def convert(self, target_format: str, source_format: str = None) -> Dict:
525
+ """Convert dataset to target format."""
526
+ # Auto-detect source format if not specified
527
+ if source_format is None:
528
+ analyzer = DatasetAnalyzer(str(self.input_path))
529
+ analyzer.analyze()
530
+ source_format = analyzer.stats.get('format', 'unknown')
531
+
532
+ logger.info(f"Converting from {source_format} to {target_format}")
533
+
534
+ conversion_key = f"{source_format}_to_{target_format}"
535
+
536
+ converters = {
537
+ 'coco_to_yolo': self._coco_to_yolo,
538
+ 'yolo_to_coco': self._yolo_to_coco,
539
+ 'voc_to_coco': self._voc_to_coco,
540
+ 'voc_to_yolo': self._voc_to_yolo,
541
+ 'coco_to_voc': self._coco_to_voc,
542
+ }
543
+
544
+ if conversion_key not in converters:
545
+ return {'error': f"Unsupported conversion: {source_format} -> {target_format}"}
546
+
547
+ return converters[conversion_key]()
548
+
549
+ def _coco_to_yolo(self) -> Dict:
550
+ """Convert COCO format to YOLO format."""
551
+ results = {'converted_images': 0, 'converted_annotations': 0}
552
+
553
+ # Find COCO JSON
554
+ coco_files = list(self.input_path.rglob('*.json'))
555
+
556
+ for coco_file in coco_files:
557
+ try:
558
+ with open(coco_file) as f:
559
+ coco_data = json.load(f)
560
+
561
+ if 'annotations' not in coco_data:
562
+ continue
563
+
564
+ # Create output directories
565
+ self.output_path.mkdir(parents=True, exist_ok=True)
566
+ labels_dir = self.output_path / 'labels'
567
+ labels_dir.mkdir(exist_ok=True)
568
+
569
+ # Build category and image mappings
570
+ cat_map = {}
571
+ for i, cat in enumerate(coco_data.get('categories', [])):
572
+ cat_map[cat['id']] = i
573
+
574
+ img_map = {}
575
+ for img in coco_data.get('images', []):
576
+ img_map[img['id']] = {
577
+ 'file_name': img['file_name'],
578
+ 'width': img['width'],
579
+ 'height': img['height']
580
+ }
581
+
582
+ # Group annotations by image
583
+ annotations_by_image = defaultdict(list)
584
+ for ann in coco_data['annotations']:
585
+ annotations_by_image[ann['image_id']].append(ann)
586
+
587
+ # Write YOLO format labels
588
+ for img_id, annotations in annotations_by_image.items():
589
+ if img_id not in img_map:
590
+ continue
591
+
592
+ img_info = img_map[img_id]
593
+ label_name = Path(img_info['file_name']).stem + '.txt'
594
+ label_path = labels_dir / label_name
595
+
596
+ with open(label_path, 'w') as f:
597
+ for ann in annotations:
598
+ if 'bbox' not in ann:
599
+ continue
600
+
601
+ bbox = ann['bbox'] # [x, y, width, height]
602
+ cat_id = cat_map.get(ann['category_id'], 0)
603
+
604
+ # Convert to YOLO format (normalized x_center, y_center, width, height)
605
+ x_center = (bbox[0] + bbox[2] / 2) / img_info['width']
606
+ y_center = (bbox[1] + bbox[3] / 2) / img_info['height']
607
+ w = bbox[2] / img_info['width']
608
+ h = bbox[3] / img_info['height']
609
+
610
+ f.write(f"{cat_id} {x_center:.6f} {y_center:.6f} {w:.6f} {h:.6f}\n")
611
+ results['converted_annotations'] += 1
612
+
613
+ results['converted_images'] += 1
614
+
615
+ # Write classes.txt
616
+ classes = [None] * len(cat_map)
617
+ for cat in coco_data.get('categories', []):
618
+ idx = cat_map[cat['id']]
619
+ classes[idx] = cat['name']
620
+
621
+ with open(self.output_path / 'classes.txt', 'w') as f:
622
+ for class_name in classes:
623
+ f.write(f"{class_name}\n")
624
+
625
+ # Write data.yaml for YOLO training
626
+ yaml_content = YOLO_DATA_YAML_TEMPLATE.format(
627
+ dataset_path=str(self.output_path.absolute()),
628
+ train_path='images/train',
629
+ val_path='images/val',
630
+ test_path='images/test',
631
+ num_classes=len(classes),
632
+ class_names=classes
633
+ )
634
+ with open(self.output_path / 'data.yaml', 'w') as f:
635
+ f.write(yaml_content)
636
+
637
+ except Exception as e:
638
+ logger.error(f"Error converting {coco_file}: {e}")
639
+
640
+ return results
641
+
642
+ def _yolo_to_coco(self) -> Dict:
643
+ """Convert YOLO format to COCO format."""
644
+ results = {'converted_images': 0, 'converted_annotations': 0}
645
+
646
+ coco_data = COCO_CATEGORIES_TEMPLATE.copy()
647
+ coco_data['images'] = []
648
+ coco_data['annotations'] = []
649
+ coco_data['categories'] = []
650
+
651
+ # Read classes
652
+ classes_file = self.input_path / 'classes.txt'
653
+ class_names = []
654
+ if classes_file.exists():
655
+ with open(classes_file) as f:
656
+ class_names = [line.strip() for line in f.readlines()]
657
+
658
+ for i, name in enumerate(class_names):
659
+ coco_data['categories'].append({
660
+ 'id': i,
661
+ 'name': name,
662
+ 'supercategory': 'object'
663
+ })
664
+
665
+ # Find images and labels
666
+ images = []
667
+ for ext in SUPPORTED_IMAGE_EXTENSIONS:
668
+ images.extend(self.input_path.rglob(f'*{ext}'))
669
+
670
+ annotation_id = 1
671
+ for img_id, img_path in enumerate(images, 1):
672
+ # Try to get image dimensions (without PIL)
673
+ # Assume 640x640 if can't determine
674
+ width, height = 640, 640
675
+
676
+ coco_data['images'].append({
677
+ 'id': img_id,
678
+ 'file_name': img_path.name,
679
+ 'width': width,
680
+ 'height': height
681
+ })
682
+ results['converted_images'] += 1
683
+
684
+ # Find corresponding label
685
+ label_path = img_path.with_suffix('.txt')
686
+ if not label_path.exists():
687
+ # Try labels subdirectory
688
+ label_path = img_path.parent.parent / 'labels' / (img_path.stem + '.txt')
689
+
690
+ if label_path.exists():
691
+ with open(label_path) as f:
692
+ for line in f:
693
+ parts = line.strip().split()
694
+ if len(parts) >= 5:
695
+ class_id = int(parts[0])
696
+ x_center = float(parts[1]) * width
697
+ y_center = float(parts[2]) * height
698
+ w = float(parts[3]) * width
699
+ h = float(parts[4]) * height
700
+
701
+ # Convert to COCO format [x, y, width, height]
702
+ x = x_center - w / 2
703
+ y = y_center - h / 2
704
+
705
+ coco_data['annotations'].append({
706
+ 'id': annotation_id,
707
+ 'image_id': img_id,
708
+ 'category_id': class_id,
709
+ 'bbox': [x, y, w, h],
710
+ 'area': w * h,
711
+ 'iscrowd': 0
712
+ })
713
+ annotation_id += 1
714
+ results['converted_annotations'] += 1
715
+
716
+ # Write COCO JSON
717
+ self.output_path.mkdir(parents=True, exist_ok=True)
718
+ with open(self.output_path / 'annotations.json', 'w') as f:
719
+ json.dump(coco_data, f, indent=2)
720
+
721
+ return results
722
+
723
+ def _voc_to_coco(self) -> Dict:
724
+ """Convert Pascal VOC format to COCO format."""
725
+ results = {'converted_images': 0, 'converted_annotations': 0}
726
+
727
+ coco_data = COCO_CATEGORIES_TEMPLATE.copy()
728
+ coco_data['images'] = []
729
+ coco_data['annotations'] = []
730
+ coco_data['categories'] = []
731
+
732
+ class_to_id = {}
733
+ annotation_id = 1
734
+
735
+ for img_id, xml_file in enumerate(self.input_path.rglob('*.xml'), 1):
736
+ try:
737
+ tree = ET.parse(xml_file)
738
+ root = tree.getroot()
739
+
740
+ if root.tag != 'annotation':
741
+ continue
742
+
743
+ # Get image info
744
+ filename = root.find('filename')
745
+ size = root.find('size')
746
+
747
+ if filename is None or size is None:
748
+ continue
749
+
750
+ width = int(size.find('width').text)
751
+ height = int(size.find('height').text)
752
+
753
+ coco_data['images'].append({
754
+ 'id': img_id,
755
+ 'file_name': filename.text,
756
+ 'width': width,
757
+ 'height': height
758
+ })
759
+ results['converted_images'] += 1
760
+
761
+ # Convert objects
762
+ for obj in root.findall('object'):
763
+ name = obj.find('name').text
764
+
765
+ if name not in class_to_id:
766
+ class_to_id[name] = len(class_to_id)
767
+ coco_data['categories'].append({
768
+ 'id': class_to_id[name],
769
+ 'name': name,
770
+ 'supercategory': 'object'
771
+ })
772
+
773
+ bndbox = obj.find('bndbox')
774
+ xmin = float(bndbox.find('xmin').text)
775
+ ymin = float(bndbox.find('ymin').text)
776
+ xmax = float(bndbox.find('xmax').text)
777
+ ymax = float(bndbox.find('ymax').text)
778
+
779
+ coco_data['annotations'].append({
780
+ 'id': annotation_id,
781
+ 'image_id': img_id,
782
+ 'category_id': class_to_id[name],
783
+ 'bbox': [xmin, ymin, xmax - xmin, ymax - ymin],
784
+ 'area': (xmax - xmin) * (ymax - ymin),
785
+ 'iscrowd': 0
786
+ })
787
+ annotation_id += 1
788
+ results['converted_annotations'] += 1
789
+
790
+ except Exception as e:
791
+ logger.warning(f"Error parsing {xml_file}: {e}")
792
+
793
+ # Write output
794
+ self.output_path.mkdir(parents=True, exist_ok=True)
795
+ with open(self.output_path / 'annotations.json', 'w') as f:
796
+ json.dump(coco_data, f, indent=2)
797
+
798
+ return results
799
+
800
+ def _voc_to_yolo(self) -> Dict:
801
+ """Convert Pascal VOC format to YOLO format."""
802
+ # First convert to COCO, then to YOLO
803
+ temp_coco = self.output_path / '_temp_coco'
804
+
805
+ converter1 = FormatConverter(str(self.input_path), str(temp_coco))
806
+ converter1._voc_to_coco()
807
+
808
+ converter2 = FormatConverter(str(temp_coco), str(self.output_path))
809
+ results = converter2._coco_to_yolo()
810
+
811
+ # Clean up temp
812
+ shutil.rmtree(temp_coco, ignore_errors=True)
813
+
814
+ return results
815
+
816
+ def _coco_to_voc(self) -> Dict:
817
+ """Convert COCO format to Pascal VOC format."""
818
+ results = {'converted_images': 0, 'converted_annotations': 0}
819
+
820
+ self.output_path.mkdir(parents=True, exist_ok=True)
821
+ annotations_dir = self.output_path / 'Annotations'
822
+ annotations_dir.mkdir(exist_ok=True)
823
+
824
+ for coco_file in self.input_path.rglob('*.json'):
825
+ try:
826
+ with open(coco_file) as f:
827
+ coco_data = json.load(f)
828
+
829
+ if 'annotations' not in coco_data:
830
+ continue
831
+
832
+ # Build mappings
833
+ cat_map = {cat['id']: cat['name'] for cat in coco_data.get('categories', [])}
834
+ img_map = {img['id']: img for img in coco_data.get('images', [])}
835
+
836
+ # Group by image
837
+ ann_by_image = defaultdict(list)
838
+ for ann in coco_data['annotations']:
839
+ ann_by_image[ann['image_id']].append(ann)
840
+
841
+ for img_id, annotations in ann_by_image.items():
842
+ if img_id not in img_map:
843
+ continue
844
+
845
+ img_info = img_map[img_id]
846
+
847
+ # Create VOC XML
848
+ annotation = ET.Element('annotation')
849
+
850
+ ET.SubElement(annotation, 'folder').text = 'images'
851
+ ET.SubElement(annotation, 'filename').text = img_info['file_name']
852
+
853
+ size = ET.SubElement(annotation, 'size')
854
+ ET.SubElement(size, 'width').text = str(img_info['width'])
855
+ ET.SubElement(size, 'height').text = str(img_info['height'])
856
+ ET.SubElement(size, 'depth').text = '3'
857
+
858
+ for ann in annotations:
859
+ obj = ET.SubElement(annotation, 'object')
860
+ ET.SubElement(obj, 'name').text = cat_map.get(ann['category_id'], 'unknown')
861
+ ET.SubElement(obj, 'difficult').text = '0'
862
+
863
+ bbox = ann['bbox']
864
+ bndbox = ET.SubElement(obj, 'bndbox')
865
+ ET.SubElement(bndbox, 'xmin').text = str(int(bbox[0]))
866
+ ET.SubElement(bndbox, 'ymin').text = str(int(bbox[1]))
867
+ ET.SubElement(bndbox, 'xmax').text = str(int(bbox[0] + bbox[2]))
868
+ ET.SubElement(bndbox, 'ymax').text = str(int(bbox[1] + bbox[3]))
869
+
870
+ results['converted_annotations'] += 1
871
+
872
+ # Write XML
873
+ xml_name = Path(img_info['file_name']).stem + '.xml'
874
+ tree = ET.ElementTree(annotation)
875
+ tree.write(annotations_dir / xml_name)
876
+ results['converted_images'] += 1
877
+
878
+ except Exception as e:
879
+ logger.error(f"Error converting {coco_file}: {e}")
880
+
881
+ return results
882
+
883
+
884
+ # ============================================================================
885
+ # Dataset Splitting
886
+ # ============================================================================
887
+
888
+ class DatasetSplitter:
889
+ """Split dataset into train/val/test sets."""
890
+
891
+ def __init__(self, dataset_path: str, output_path: str = None):
892
+ self.dataset_path = Path(dataset_path)
893
+ self.output_path = Path(output_path) if output_path else self.dataset_path
894
+
895
+ def split(self, train: float = 0.8, val: float = 0.1, test: float = 0.1,
896
+ stratify: bool = True, seed: int = 42) -> Dict:
897
+ """Split dataset with optional stratification."""
898
+
899
+ if abs(train + val + test - 1.0) > 0.001:
900
+ raise ValueError(f"Split ratios must sum to 1.0, got {train + val + test}")
901
+
902
+ random.seed(seed)
903
+ logger.info(f"Splitting dataset: train={train}, val={val}, test={test}")
904
+
905
+ # Detect format and find images
906
+ analyzer = DatasetAnalyzer(str(self.dataset_path))
907
+ analyzer.analyze()
908
+ detected_format = analyzer.stats.get('format', 'unknown')
909
+
910
+ images = []
911
+ for ext in SUPPORTED_IMAGE_EXTENSIONS:
912
+ images.extend(self.dataset_path.rglob(f'*{ext}'))
913
+
914
+ if not images:
915
+ return {'error': 'No images found'}
916
+
917
+ # Stratify if requested and we have class info
918
+ if stratify and detected_format in ['coco', 'yolo']:
919
+ splits = self._stratified_split(images, detected_format, train, val, test)
920
+ else:
921
+ splits = self._random_split(images, train, val, test)
922
+
923
+ # Create output directories and copy/link files
924
+ results = self._create_split_directories(splits, detected_format)
925
+
926
+ return results
927
+
928
+ def _random_split(self, images: List[Path], train: float, val: float, test: float) -> Dict:
929
+ """Perform random split."""
930
+ images = list(images)
931
+ random.shuffle(images)
932
+
933
+ n = len(images)
934
+ train_end = int(n * train)
935
+ val_end = train_end + int(n * val)
936
+
937
+ return {
938
+ 'train': images[:train_end],
939
+ 'val': images[train_end:val_end],
940
+ 'test': images[val_end:]
941
+ }
942
+
943
+ def _stratified_split(self, images: List[Path], format: str,
944
+ train: float, val: float, test: float) -> Dict:
945
+ """Perform stratified split based on class distribution."""
946
+
947
+ # Group images by their primary class
948
+ image_classes = {}
949
+
950
+ for img in images:
951
+ if format == 'yolo':
952
+ label_path = img.with_suffix('.txt')
953
+ if not label_path.exists():
954
+ label_path = img.parent.parent / 'labels' / (img.stem + '.txt')
955
+
956
+ if label_path.exists():
957
+ with open(label_path) as f:
958
+ line = f.readline()
959
+ if line:
960
+ class_id = int(line.split()[0])
961
+ image_classes[img] = class_id
962
+ else:
963
+ image_classes[img] = -1 # No annotation
964
+ else:
965
+ image_classes[img] = -1 # Default for other formats
966
+
967
+ # Group by class
968
+ class_images = defaultdict(list)
969
+ for img, class_id in image_classes.items():
970
+ class_images[class_id].append(img)
971
+
972
+ # Split each class proportionally
973
+ splits = {'train': [], 'val': [], 'test': []}
974
+
975
+ for class_id, class_imgs in class_images.items():
976
+ random.shuffle(class_imgs)
977
+ n = len(class_imgs)
978
+ train_end = int(n * train)
979
+ val_end = train_end + int(n * val)
980
+
981
+ splits['train'].extend(class_imgs[:train_end])
982
+ splits['val'].extend(class_imgs[train_end:val_end])
983
+ splits['test'].extend(class_imgs[val_end:])
984
+
985
+ # Shuffle final splits
986
+ for key in splits:
987
+ random.shuffle(splits[key])
988
+
989
+ return splits
990
+
991
+ def _create_split_directories(self, splits: Dict, format: str) -> Dict:
992
+ """Create split directories and organize files."""
993
+ results = {
994
+ 'train_count': len(splits['train']),
995
+ 'val_count': len(splits['val']),
996
+ 'test_count': len(splits['test']),
997
+ 'output_path': str(self.output_path)
998
+ }
999
+
1000
+ # Create directory structure
1001
+ for split_name in ['train', 'val', 'test']:
1002
+ images_dir = self.output_path / 'images' / split_name
1003
+ labels_dir = self.output_path / 'labels' / split_name
1004
+ images_dir.mkdir(parents=True, exist_ok=True)
1005
+ labels_dir.mkdir(parents=True, exist_ok=True)
1006
+
1007
+ for img_path in splits[split_name]:
1008
+ # Create symlink for image
1009
+ dst_img = images_dir / img_path.name
1010
+ if not dst_img.exists():
1011
+ try:
1012
+ dst_img.symlink_to(img_path.absolute())
1013
+ except OSError:
1014
+ # Fall back to copy if symlink fails
1015
+ shutil.copy2(img_path, dst_img)
1016
+
1017
+ # Handle label file
1018
+ if format == 'yolo':
1019
+ label_path = img_path.with_suffix('.txt')
1020
+ if not label_path.exists():
1021
+ label_path = img_path.parent.parent / 'labels' / (img_path.stem + '.txt')
1022
+
1023
+ if label_path.exists():
1024
+ dst_label = labels_dir / (img_path.stem + '.txt')
1025
+ if not dst_label.exists():
1026
+ try:
1027
+ dst_label.symlink_to(label_path.absolute())
1028
+ except OSError:
1029
+ shutil.copy2(label_path, dst_label)
1030
+
1031
+ # Generate data.yaml for YOLO
1032
+ if format == 'yolo':
1033
+ # Read classes
1034
+ classes_file = self.dataset_path / 'classes.txt'
1035
+ class_names = []
1036
+ if classes_file.exists():
1037
+ with open(classes_file) as f:
1038
+ class_names = [line.strip() for line in f.readlines()]
1039
+
1040
+ yaml_content = YOLO_DATA_YAML_TEMPLATE.format(
1041
+ dataset_path=str(self.output_path.absolute()),
1042
+ train_path='images/train',
1043
+ val_path='images/val',
1044
+ test_path='images/test',
1045
+ num_classes=len(class_names),
1046
+ class_names=class_names
1047
+ )
1048
+ with open(self.output_path / 'data.yaml', 'w') as f:
1049
+ f.write(yaml_content)
1050
+
1051
+ return results
1052
+
1053
+
1054
+ # ============================================================================
1055
+ # Augmentation Configuration
1056
+ # ============================================================================
1057
+
1058
+ class AugmentationConfigGenerator:
1059
+ """Generate augmentation configurations for different CV tasks."""
1060
+
1061
+ @staticmethod
1062
+ def generate(task: str, intensity: str = 'medium',
1063
+ framework: str = 'albumentations') -> Dict:
1064
+ """Generate augmentation config for task and intensity."""
1065
+
1066
+ if task not in AUGMENTATION_PRESETS:
1067
+ return {'error': f"Unknown task: {task}. Use: detection, segmentation, classification"}
1068
+
1069
+ if intensity not in AUGMENTATION_PRESETS[task]:
1070
+ return {'error': f"Unknown intensity: {intensity}. Use: light, medium, heavy"}
1071
+
1072
+ base_config = AUGMENTATION_PRESETS[task][intensity]
1073
+
1074
+ if framework == 'albumentations':
1075
+ return AugmentationConfigGenerator._to_albumentations(base_config, task)
1076
+ elif framework == 'torchvision':
1077
+ return AugmentationConfigGenerator._to_torchvision(base_config, task)
1078
+ elif framework == 'ultralytics':
1079
+ return AugmentationConfigGenerator._to_ultralytics(base_config, task)
1080
+ else:
1081
+ return base_config
1082
+
1083
+ @staticmethod
1084
+ def _to_albumentations(config: Dict, task: str) -> Dict:
1085
+ """Convert to Albumentations format."""
1086
+ transforms = []
1087
+
1088
+ for aug_name, params in config.items():
1089
+ if aug_name == 'horizontal_flip':
1090
+ transforms.append({
1091
+ 'type': 'HorizontalFlip',
1092
+ 'p': params
1093
+ })
1094
+ elif aug_name == 'vertical_flip':
1095
+ transforms.append({
1096
+ 'type': 'VerticalFlip',
1097
+ 'p': params
1098
+ })
1099
+ elif aug_name == 'rotate':
1100
+ transforms.append({
1101
+ 'type': 'Rotate',
1102
+ 'limit': params.get('limit', 15),
1103
+ 'p': params.get('p', 0.5)
1104
+ })
1105
+ elif aug_name == 'scale':
1106
+ transforms.append({
1107
+ 'type': 'RandomScale',
1108
+ 'scale_limit': params.get('scale_limit', 0.2),
1109
+ 'p': params.get('p', 0.5)
1110
+ })
1111
+ elif aug_name == 'brightness_contrast':
1112
+ transforms.append({
1113
+ 'type': 'RandomBrightnessContrast',
1114
+ 'brightness_limit': params.get('brightness_limit', 0.2),
1115
+ 'contrast_limit': params.get('contrast_limit', 0.2),
1116
+ 'p': params.get('p', 0.5)
1117
+ })
1118
+ elif aug_name == 'hue_saturation':
1119
+ transforms.append({
1120
+ 'type': 'HueSaturationValue',
1121
+ 'hue_shift_limit': params.get('hue_shift_limit', 20),
1122
+ 'sat_shift_limit': params.get('sat_shift_limit', 30),
1123
+ 'p': params.get('p', 0.5)
1124
+ })
1125
+ elif aug_name == 'blur':
1126
+ transforms.append({
1127
+ 'type': 'Blur',
1128
+ 'blur_limit': params.get('blur_limit', 5),
1129
+ 'p': params.get('p', 0.3)
1130
+ })
1131
+ elif aug_name == 'noise':
1132
+ transforms.append({
1133
+ 'type': 'GaussNoise',
1134
+ 'var_limit': params.get('var_limit', (10, 50)),
1135
+ 'p': params.get('p', 0.3)
1136
+ })
1137
+ elif aug_name == 'elastic_transform':
1138
+ transforms.append({
1139
+ 'type': 'ElasticTransform',
1140
+ 'alpha': params.get('alpha', 100),
1141
+ 'sigma': params.get('sigma', 10),
1142
+ 'p': params.get('p', 0.3)
1143
+ })
1144
+ elif aug_name == 'cutout':
1145
+ transforms.append({
1146
+ 'type': 'CoarseDropout',
1147
+ 'max_holes': params.get('num_holes', 8),
1148
+ 'max_height': params.get('max_h_size', 32),
1149
+ 'max_width': params.get('max_w_size', 32),
1150
+ 'p': params.get('p', 0.3)
1151
+ })
1152
+
1153
+ # Add bbox format for detection
1154
+ bbox_params = None
1155
+ if task == 'detection':
1156
+ bbox_params = {
1157
+ 'format': 'pascal_voc',
1158
+ 'label_fields': ['class_labels'],
1159
+ 'min_visibility': 0.3
1160
+ }
1161
+
1162
+ return {
1163
+ 'framework': 'albumentations',
1164
+ 'task': task,
1165
+ 'transforms': transforms,
1166
+ 'bbox_params': bbox_params,
1167
+ 'code_example': AugmentationConfigGenerator._albumentations_code(transforms, task)
1168
+ }
1169
+
1170
+ @staticmethod
1171
+ def _albumentations_code(transforms: List, task: str) -> str:
1172
+ """Generate Albumentations code example."""
1173
+ code = """import albumentations as A
1174
+ from albumentations.pytorch import ToTensorV2
1175
+
1176
+ transform = A.Compose([
1177
+ """
1178
+ for t in transforms:
1179
+ params = ', '.join(f"{k}={v}" for k, v in t.items() if k != 'type')
1180
+ code += f" A.{t['type']}({params}),\n"
1181
+
1182
+ code += " A.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),\n"
1183
+ code += " ToTensorV2(),\n"
1184
+ code += "]"
1185
+
1186
+ if task == 'detection':
1187
+ code += ", bbox_params=A.BboxParams(format='pascal_voc', label_fields=['class_labels']))"
1188
+ else:
1189
+ code += ")"
1190
+
1191
+ return code
1192
+
1193
+ @staticmethod
1194
+ def _to_torchvision(config: Dict, task: str) -> Dict:
1195
+ """Convert to torchvision transforms format."""
1196
+ transforms = []
1197
+
1198
+ for aug_name, params in config.items():
1199
+ if aug_name == 'horizontal_flip':
1200
+ transforms.append({
1201
+ 'type': 'RandomHorizontalFlip',
1202
+ 'p': params
1203
+ })
1204
+ elif aug_name == 'vertical_flip':
1205
+ transforms.append({
1206
+ 'type': 'RandomVerticalFlip',
1207
+ 'p': params
1208
+ })
1209
+ elif aug_name == 'rotate':
1210
+ transforms.append({
1211
+ 'type': 'RandomRotation',
1212
+ 'degrees': params.get('limit', 15)
1213
+ })
1214
+ elif aug_name == 'color_jitter':
1215
+ transforms.append({
1216
+ 'type': 'ColorJitter',
1217
+ 'brightness': params.get('brightness', 0.2),
1218
+ 'contrast': params.get('contrast', 0.2),
1219
+ 'saturation': params.get('saturation', 0.2),
1220
+ 'hue': params.get('hue', 0.1)
1221
+ })
1222
+
1223
+ return {
1224
+ 'framework': 'torchvision',
1225
+ 'task': task,
1226
+ 'transforms': transforms
1227
+ }
1228
+
1229
+ @staticmethod
1230
+ def _to_ultralytics(config: Dict, task: str) -> Dict:
1231
+ """Convert to Ultralytics YOLO format."""
1232
+ yolo_config = {
1233
+ 'hsv_h': 0.015,
1234
+ 'hsv_s': 0.7,
1235
+ 'hsv_v': 0.4,
1236
+ 'degrees': config.get('rotate', {}).get('limit', 0.0),
1237
+ 'translate': 0.1,
1238
+ 'scale': config.get('scale', {}).get('scale_limit', 0.5),
1239
+ 'shear': 0.0,
1240
+ 'perspective': 0.0,
1241
+ 'flipud': config.get('vertical_flip', 0.0),
1242
+ 'fliplr': config.get('horizontal_flip', 0.5),
1243
+ 'mosaic': config.get('mosaic', {}).get('p', 1.0) if 'mosaic' in config else 0.0,
1244
+ 'mixup': config.get('mixup', {}).get('p', 0.0) if 'mixup' in config else 0.0,
1245
+ 'copy_paste': 0.0
1246
+ }
1247
+
1248
+ return {
1249
+ 'framework': 'ultralytics',
1250
+ 'task': task,
1251
+ 'config': yolo_config,
1252
+ 'usage': "# Add to data.yaml or pass to Trainer\nmodel.train(data='data.yaml', augment=True, **aug_config)"
1253
+ }
1254
+
1255
+
1256
+ # ============================================================================
1257
+ # Dataset Validation
1258
+ # ============================================================================
1259
+
1260
+ class DatasetValidator:
1261
+ """Validate dataset integrity and quality."""
1262
+
1263
+ def __init__(self, dataset_path: str, format: str = None):
1264
+ self.dataset_path = Path(dataset_path)
1265
+ self.format = format
1266
+
1267
+ def validate(self) -> Dict:
1268
+ """Run all validation checks."""
1269
+ results = {
1270
+ 'valid': True,
1271
+ 'errors': [],
1272
+ 'warnings': [],
1273
+ 'stats': {}
1274
+ }
1275
+
1276
+ # Auto-detect format if not specified
1277
+ if self.format is None:
1278
+ analyzer = DatasetAnalyzer(str(self.dataset_path))
1279
+ analyzer.analyze()
1280
+ self.format = analyzer.stats.get('format', 'unknown')
1281
+
1282
+ results['format'] = self.format
1283
+
1284
+ # Run format-specific validation
1285
+ if self.format == 'coco':
1286
+ self._validate_coco(results)
1287
+ elif self.format == 'yolo':
1288
+ self._validate_yolo(results)
1289
+ elif self.format == 'voc':
1290
+ self._validate_voc(results)
1291
+ else:
1292
+ results['warnings'].append(f"Unknown format: {self.format}")
1293
+
1294
+ # General checks
1295
+ self._validate_images(results)
1296
+ self._check_duplicates(results)
1297
+
1298
+ # Set overall validity
1299
+ results['valid'] = len(results['errors']) == 0
1300
+
1301
+ return results
1302
+
1303
+ def _validate_coco(self, results: Dict):
1304
+ """Validate COCO format dataset."""
1305
+ for json_file in self.dataset_path.rglob('*.json'):
1306
+ try:
1307
+ with open(json_file) as f:
1308
+ data = json.load(f)
1309
+
1310
+ if 'annotations' not in data:
1311
+ continue
1312
+
1313
+ # Check required fields
1314
+ if 'images' not in data:
1315
+ results['errors'].append(f"{json_file}: Missing 'images' field")
1316
+ if 'categories' not in data:
1317
+ results['warnings'].append(f"{json_file}: Missing 'categories' field")
1318
+
1319
+ # Validate annotations
1320
+ image_ids = {img['id'] for img in data.get('images', [])}
1321
+ category_ids = {cat['id'] for cat in data.get('categories', [])}
1322
+
1323
+ for ann in data['annotations']:
1324
+ if ann.get('image_id') not in image_ids:
1325
+ results['errors'].append(
1326
+ f"Annotation {ann.get('id')} references non-existent image {ann.get('image_id')}"
1327
+ )
1328
+ if ann.get('category_id') not in category_ids:
1329
+ results['warnings'].append(
1330
+ f"Annotation {ann.get('id')} references unknown category {ann.get('category_id')}"
1331
+ )
1332
+
1333
+ # Validate bbox
1334
+ if 'bbox' in ann:
1335
+ bbox = ann['bbox']
1336
+ if len(bbox) != 4:
1337
+ results['errors'].append(
1338
+ f"Annotation {ann.get('id')}: Invalid bbox format"
1339
+ )
1340
+ elif any(v < 0 for v in bbox[:2]) or any(v <= 0 for v in bbox[2:]):
1341
+ results['warnings'].append(
1342
+ f"Annotation {ann.get('id')}: Suspicious bbox values {bbox}"
1343
+ )
1344
+
1345
+ results['stats']['coco_images'] = len(data.get('images', []))
1346
+ results['stats']['coco_annotations'] = len(data['annotations'])
1347
+ results['stats']['coco_categories'] = len(data.get('categories', []))
1348
+
1349
+ except json.JSONDecodeError as e:
1350
+ results['errors'].append(f"{json_file}: Invalid JSON - {e}")
1351
+ except Exception as e:
1352
+ results['errors'].append(f"{json_file}: Error - {e}")
1353
+
1354
+ def _validate_yolo(self, results: Dict):
1355
+ """Validate YOLO format dataset."""
1356
+ label_files = list(self.dataset_path.rglob('*.txt'))
1357
+ valid_labels = 0
1358
+ invalid_labels = 0
1359
+
1360
+ for txt_file in label_files:
1361
+ if txt_file.name == 'classes.txt':
1362
+ continue
1363
+
1364
+ try:
1365
+ with open(txt_file) as f:
1366
+ lines = f.readlines()
1367
+
1368
+ for line_num, line in enumerate(lines, 1):
1369
+ parts = line.strip().split()
1370
+ if not parts:
1371
+ continue
1372
+
1373
+ if len(parts) < 5:
1374
+ results['errors'].append(
1375
+ f"{txt_file}:{line_num}: Expected 5 values, got {len(parts)}"
1376
+ )
1377
+ invalid_labels += 1
1378
+ continue
1379
+
1380
+ try:
1381
+ class_id = int(parts[0])
1382
+ x, y, w, h = map(float, parts[1:5])
1383
+
1384
+ # Check normalized coordinates
1385
+ if not (0 <= x <= 1 and 0 <= y <= 1):
1386
+ results['warnings'].append(
1387
+ f"{txt_file}:{line_num}: Center coords outside [0,1]: ({x}, {y})"
1388
+ )
1389
+ if not (0 < w <= 1 and 0 < h <= 1):
1390
+ results['warnings'].append(
1391
+ f"{txt_file}:{line_num}: Size outside (0,1]: ({w}, {h})"
1392
+ )
1393
+
1394
+ valid_labels += 1
1395
+
1396
+ except ValueError as e:
1397
+ results['errors'].append(
1398
+ f"{txt_file}:{line_num}: Invalid values - {e}"
1399
+ )
1400
+ invalid_labels += 1
1401
+
1402
+ except Exception as e:
1403
+ results['errors'].append(f"{txt_file}: Error - {e}")
1404
+
1405
+ results['stats']['yolo_valid_labels'] = valid_labels
1406
+ results['stats']['yolo_invalid_labels'] = invalid_labels
1407
+
1408
+ def _validate_voc(self, results: Dict):
1409
+ """Validate Pascal VOC format dataset."""
1410
+ xml_files = list(self.dataset_path.rglob('*.xml'))
1411
+ valid_annotations = 0
1412
+
1413
+ for xml_file in xml_files:
1414
+ try:
1415
+ tree = ET.parse(xml_file)
1416
+ root = tree.getroot()
1417
+
1418
+ if root.tag != 'annotation':
1419
+ continue
1420
+
1421
+ # Check required fields
1422
+ filename = root.find('filename')
1423
+ if filename is None:
1424
+ results['warnings'].append(f"{xml_file}: Missing filename")
1425
+
1426
+ size = root.find('size')
1427
+ if size is None:
1428
+ results['warnings'].append(f"{xml_file}: Missing size")
1429
+ else:
1430
+ for dim in ['width', 'height']:
1431
+ if size.find(dim) is None:
1432
+ results['errors'].append(f"{xml_file}: Missing {dim}")
1433
+
1434
+ # Validate objects
1435
+ for obj in root.findall('object'):
1436
+ name = obj.find('name')
1437
+ if name is None or not name.text:
1438
+ results['errors'].append(f"{xml_file}: Object missing name")
1439
+
1440
+ bndbox = obj.find('bndbox')
1441
+ if bndbox is None:
1442
+ results['errors'].append(f"{xml_file}: Object missing bndbox")
1443
+ else:
1444
+ for coord in ['xmin', 'ymin', 'xmax', 'ymax']:
1445
+ elem = bndbox.find(coord)
1446
+ if elem is None:
1447
+ results['errors'].append(f"{xml_file}: Missing {coord}")
1448
+
1449
+ valid_annotations += 1
1450
+
1451
+ except ET.ParseError as e:
1452
+ results['errors'].append(f"{xml_file}: XML parse error - {e}")
1453
+ except Exception as e:
1454
+ results['errors'].append(f"{xml_file}: Error - {e}")
1455
+
1456
+ results['stats']['voc_annotations'] = valid_annotations
1457
+
1458
+ def _validate_images(self, results: Dict):
1459
+ """Check for image file issues."""
1460
+ images = []
1461
+ for ext in SUPPORTED_IMAGE_EXTENSIONS:
1462
+ images.extend(self.dataset_path.rglob(f'*{ext}'))
1463
+
1464
+ results['stats']['total_images'] = len(images)
1465
+
1466
+ # Check for empty images
1467
+ empty_images = [img for img in images if img.stat().st_size == 0]
1468
+ if empty_images:
1469
+ results['errors'].append(f"Found {len(empty_images)} empty image files")
1470
+
1471
+ # Check for very small images
1472
+ small_images = [img for img in images if img.stat().st_size < 1000]
1473
+ if small_images:
1474
+ results['warnings'].append(f"Found {len(small_images)} very small images (<1KB)")
1475
+
1476
+ def _check_duplicates(self, results: Dict):
1477
+ """Check for duplicate images by hash."""
1478
+ images = []
1479
+ for ext in SUPPORTED_IMAGE_EXTENSIONS:
1480
+ images.extend(self.dataset_path.rglob(f'*{ext}'))
1481
+
1482
+ hashes = {}
1483
+ duplicates = []
1484
+
1485
+ for img in images:
1486
+ try:
1487
+ with open(img, 'rb') as f:
1488
+ file_hash = hashlib.md5(f.read()).hexdigest()
1489
+
1490
+ if file_hash in hashes:
1491
+ duplicates.append((img, hashes[file_hash]))
1492
+ else:
1493
+ hashes[file_hash] = img
1494
+ except:
1495
+ pass
1496
+
1497
+ if duplicates:
1498
+ results['warnings'].append(f"Found {len(duplicates)} duplicate images")
1499
+ results['stats']['duplicate_images'] = len(duplicates)
1500
+
1501
+
1502
+ # ============================================================================
1503
+ # Main CLI
1504
+ # ============================================================================
1505
+
1506
+ def main():
1507
+ parser = argparse.ArgumentParser(
1508
+ description="Dataset Pipeline Builder for Computer Vision",
1509
+ formatter_class=argparse.RawDescriptionHelpFormatter,
1510
+ epilog="""
1511
+ Examples:
1512
+ Analyze dataset:
1513
+ python dataset_pipeline_builder.py analyze --input /path/to/dataset
1514
+
1515
+ Convert COCO to YOLO:
1516
+ python dataset_pipeline_builder.py convert --input /path/to/coco --output /path/to/yolo --format yolo
1517
+
1518
+ Split dataset:
1519
+ python dataset_pipeline_builder.py split --input /path/to/dataset --train 0.8 --val 0.1 --test 0.1
1520
+
1521
+ Generate augmentation config:
1522
+ python dataset_pipeline_builder.py augment-config --task detection --intensity heavy
1523
+
1524
+ Validate dataset:
1525
+ python dataset_pipeline_builder.py validate --input /path/to/dataset --format coco
1526
+ """
1527
+ )
1528
+
1529
+ subparsers = parser.add_subparsers(dest='command', help='Command to run')
1530
+
1531
+ # Analyze command
1532
+ analyze_parser = subparsers.add_parser('analyze', help='Analyze dataset structure and statistics')
1533
+ analyze_parser.add_argument('--input', '-i', required=True, help='Path to dataset')
1534
+ analyze_parser.add_argument('--json', action='store_true', help='Output as JSON')
1535
+
1536
+ # Convert command
1537
+ convert_parser = subparsers.add_parser('convert', help='Convert between annotation formats')
1538
+ convert_parser.add_argument('--input', '-i', required=True, help='Input dataset path')
1539
+ convert_parser.add_argument('--output', '-o', required=True, help='Output dataset path')
1540
+ convert_parser.add_argument('--format', '-f', required=True,
1541
+ choices=['yolo', 'coco', 'voc'],
1542
+ help='Target format')
1543
+ convert_parser.add_argument('--source-format', '-s',
1544
+ choices=['yolo', 'coco', 'voc'],
1545
+ help='Source format (auto-detected if not specified)')
1546
+
1547
+ # Split command
1548
+ split_parser = subparsers.add_parser('split', help='Split dataset into train/val/test')
1549
+ split_parser.add_argument('--input', '-i', required=True, help='Input dataset path')
1550
+ split_parser.add_argument('--output', '-o', help='Output path (default: same as input)')
1551
+ split_parser.add_argument('--train', type=float, default=0.8, help='Train split ratio')
1552
+ split_parser.add_argument('--val', type=float, default=0.1, help='Validation split ratio')
1553
+ split_parser.add_argument('--test', type=float, default=0.1, help='Test split ratio')
1554
+ split_parser.add_argument('--stratify', action='store_true', help='Stratify by class')
1555
+ split_parser.add_argument('--seed', type=int, default=42, help='Random seed')
1556
+
1557
+ # Augmentation config command
1558
+ aug_parser = subparsers.add_parser('augment-config', help='Generate augmentation configuration')
1559
+ aug_parser.add_argument('--task', '-t', required=True,
1560
+ choices=['detection', 'segmentation', 'classification'],
1561
+ help='CV task type')
1562
+ aug_parser.add_argument('--intensity', '-n', default='medium',
1563
+ choices=['light', 'medium', 'heavy'],
1564
+ help='Augmentation intensity')
1565
+ aug_parser.add_argument('--framework', '-f', default='albumentations',
1566
+ choices=['albumentations', 'torchvision', 'ultralytics'],
1567
+ help='Target framework')
1568
+ aug_parser.add_argument('--output', '-o', help='Output file path')
1569
+
1570
+ # Validate command
1571
+ validate_parser = subparsers.add_parser('validate', help='Validate dataset integrity')
1572
+ validate_parser.add_argument('--input', '-i', required=True, help='Path to dataset')
1573
+ validate_parser.add_argument('--format', '-f',
1574
+ choices=['yolo', 'coco', 'voc'],
1575
+ help='Dataset format (auto-detected if not specified)')
1576
+ validate_parser.add_argument('--json', action='store_true', help='Output as JSON')
1577
+
1578
+ args = parser.parse_args()
1579
+
1580
+ if args.command is None:
1581
+ parser.print_help()
1582
+ sys.exit(1)
1583
+
1584
+ try:
1585
+ if args.command == 'analyze':
1586
+ analyzer = DatasetAnalyzer(args.input)
1587
+ results = analyzer.analyze()
1588
+
1589
+ if args.json:
1590
+ print(json.dumps(results, indent=2, default=str))
1591
+ else:
1592
+ print("\n" + "="*60)
1593
+ print("DATASET ANALYSIS REPORT")
1594
+ print("="*60)
1595
+ print(f"\nFormat: {results.get('format', 'unknown')}")
1596
+ print(f"Total Images: {results.get('total_images', 0)}")
1597
+
1598
+ if 'image_stats' in results:
1599
+ stats = results['image_stats']
1600
+ print(f"\nImage Statistics:")
1601
+ print(f" Total Size: {stats.get('total_size_mb', 0):.2f} MB")
1602
+ print(f" Extensions: {stats.get('extensions', {})}")
1603
+ print(f" Locations: {stats.get('locations', {})}")
1604
+
1605
+ if 'annotations' in results:
1606
+ ann = results['annotations']
1607
+ print(f"\nAnnotations:")
1608
+ print(f" Total: {ann.get('total_annotations', 0)}")
1609
+ print(f" Images with annotations: {ann.get('images_with_annotations', 0)}")
1610
+ if 'classes' in ann:
1611
+ print(f" Classes: {len(ann['classes'])}")
1612
+ for cls, count in sorted(ann['classes'].items(), key=lambda x: -x[1])[:10]:
1613
+ print(f" - {cls}: {count}")
1614
+
1615
+ if 'quality' in results:
1616
+ q = results['quality']
1617
+ if q.get('warnings'):
1618
+ print(f"\nWarnings:")
1619
+ for w in q['warnings']:
1620
+ print(f" ⚠ {w}")
1621
+ if q.get('recommendations'):
1622
+ print(f"\nRecommendations:")
1623
+ for r in q['recommendations']:
1624
+ print(f" → {r}")
1625
+
1626
+ elif args.command == 'convert':
1627
+ converter = FormatConverter(args.input, args.output)
1628
+ results = converter.convert(args.format, args.source_format)
1629
+ print(json.dumps(results, indent=2))
1630
+
1631
+ elif args.command == 'split':
1632
+ output = args.output if args.output else args.input
1633
+ splitter = DatasetSplitter(args.input, output)
1634
+ results = splitter.split(
1635
+ train=args.train,
1636
+ val=args.val,
1637
+ test=args.test,
1638
+ stratify=args.stratify,
1639
+ seed=args.seed
1640
+ )
1641
+ print(json.dumps(results, indent=2))
1642
+
1643
+ elif args.command == 'augment-config':
1644
+ config = AugmentationConfigGenerator.generate(
1645
+ args.task,
1646
+ args.intensity,
1647
+ args.framework
1648
+ )
1649
+
1650
+ output = json.dumps(config, indent=2)
1651
+
1652
+ if args.output:
1653
+ with open(args.output, 'w') as f:
1654
+ f.write(output)
1655
+ print(f"Configuration saved to {args.output}")
1656
+ else:
1657
+ print(output)
1658
+
1659
+ elif args.command == 'validate':
1660
+ validator = DatasetValidator(args.input, args.format)
1661
+ results = validator.validate()
1662
+
1663
+ if args.json:
1664
+ print(json.dumps(results, indent=2))
1665
+ else:
1666
+ print("\n" + "="*60)
1667
+ print("DATASET VALIDATION REPORT")
1668
+ print("="*60)
1669
+ print(f"\nFormat: {results.get('format', 'unknown')}")
1670
+ print(f"Valid: {'✓' if results['valid'] else '✗'}")
1671
+
1672
+ if results.get('errors'):
1673
+ print(f"\nErrors ({len(results['errors'])}):")
1674
+ for err in results['errors'][:10]:
1675
+ print(f" ✗ {err}")
1676
+ if len(results['errors']) > 10:
1677
+ print(f" ... and {len(results['errors']) - 10} more")
1678
+
1679
+ if results.get('warnings'):
1680
+ print(f"\nWarnings ({len(results['warnings'])}):")
1681
+ for warn in results['warnings'][:10]:
1682
+ print(f" ⚠ {warn}")
1683
+ if len(results['warnings']) > 10:
1684
+ print(f" ... and {len(results['warnings']) - 10} more")
1685
+
1686
+ if results.get('stats'):
1687
+ print(f"\nStatistics:")
1688
+ for key, value in results['stats'].items():
1689
+ print(f" {key}: {value}")
1690
+
1691
+ sys.exit(0)
1692
+
1693
+ except Exception as e:
1694
+ logger.error(f"Error: {e}")
1695
+ sys.exit(1)
1696
+
1697
+
1698
+ if __name__ == '__main__':
1699
+ main()