opencode-knowledge-work 0.0.0-stage → 0.1.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 (472) hide show
  1. package/LICENSE +212 -0
  2. package/README.md +124 -2
  3. package/content/bio-research/.mcp.json +48 -0
  4. package/content/bio-research/CONNECTORS.md +23 -0
  5. package/content/bio-research/LICENSE +202 -0
  6. package/content/bio-research/README.md +83 -0
  7. package/content/bio-research/skills/bio-research-instrument-data-to-allotrope/LICENSE.txt +201 -0
  8. package/content/bio-research/skills/bio-research-instrument-data-to-allotrope/SKILL.md +280 -0
  9. package/content/bio-research/skills/bio-research-instrument-data-to-allotrope/references/asm_schema_overview.md +226 -0
  10. package/content/bio-research/skills/bio-research-instrument-data-to-allotrope/references/field_classification_guide.md +503 -0
  11. package/content/bio-research/skills/bio-research-instrument-data-to-allotrope/references/flattening_guide.md +254 -0
  12. package/content/bio-research/skills/bio-research-instrument-data-to-allotrope/references/supported_instruments.md +151 -0
  13. package/content/bio-research/skills/bio-research-instrument-data-to-allotrope/requirements.txt +26 -0
  14. package/content/bio-research/skills/bio-research-instrument-data-to-allotrope/scripts/convert_to_asm.py +543 -0
  15. package/content/bio-research/skills/bio-research-instrument-data-to-allotrope/scripts/export_parser.py +481 -0
  16. package/content/bio-research/skills/bio-research-instrument-data-to-allotrope/scripts/flatten_asm.py +254 -0
  17. package/content/bio-research/skills/bio-research-instrument-data-to-allotrope/scripts/validate_asm.py +1102 -0
  18. package/content/bio-research/skills/bio-research-nextflow-development/LICENSE.txt +201 -0
  19. package/content/bio-research/skills/bio-research-nextflow-development/SKILL.md +290 -0
  20. package/content/bio-research/skills/bio-research-nextflow-development/references/geo-sra-acquisition.md +416 -0
  21. package/content/bio-research/skills/bio-research-nextflow-development/references/installation.md +96 -0
  22. package/content/bio-research/skills/bio-research-nextflow-development/references/pipelines/atacseq.md +138 -0
  23. package/content/bio-research/skills/bio-research-nextflow-development/references/pipelines/rnaseq.md +118 -0
  24. package/content/bio-research/skills/bio-research-nextflow-development/references/pipelines/sarek.md +145 -0
  25. package/content/bio-research/skills/bio-research-nextflow-development/references/troubleshooting.md +137 -0
  26. package/content/bio-research/skills/bio-research-nextflow-development/scripts/check_environment.py +452 -0
  27. package/content/bio-research/skills/bio-research-nextflow-development/scripts/config/genomes.yaml +148 -0
  28. package/content/bio-research/skills/bio-research-nextflow-development/scripts/config/pipelines/atacseq.yaml +187 -0
  29. package/content/bio-research/skills/bio-research-nextflow-development/scripts/config/pipelines/rnaseq.yaml +147 -0
  30. package/content/bio-research/skills/bio-research-nextflow-development/scripts/config/pipelines/sarek.yaml +233 -0
  31. package/content/bio-research/skills/bio-research-nextflow-development/scripts/detect_data_type.py +300 -0
  32. package/content/bio-research/skills/bio-research-nextflow-development/scripts/generate_samplesheet.py +455 -0
  33. package/content/bio-research/skills/bio-research-nextflow-development/scripts/manage_genomes.py +521 -0
  34. package/content/bio-research/skills/bio-research-nextflow-development/scripts/sra_geo_fetch.py +732 -0
  35. package/content/bio-research/skills/bio-research-nextflow-development/scripts/utils/__init__.py +69 -0
  36. package/content/bio-research/skills/bio-research-nextflow-development/scripts/utils/file_discovery.py +189 -0
  37. package/content/bio-research/skills/bio-research-nextflow-development/scripts/utils/ncbi_utils.py +808 -0
  38. package/content/bio-research/skills/bio-research-nextflow-development/scripts/utils/sample_inference.py +290 -0
  39. package/content/bio-research/skills/bio-research-nextflow-development/scripts/utils/validators.py +256 -0
  40. package/content/bio-research/skills/bio-research-scientific-problem-selection/LICENSE.txt +201 -0
  41. package/content/bio-research/skills/bio-research-scientific-problem-selection/SKILL.md +269 -0
  42. package/content/bio-research/skills/bio-research-scientific-problem-selection/references/01-intuition-pumps.md +264 -0
  43. package/content/bio-research/skills/bio-research-scientific-problem-selection/references/02-risk-assessment.md +323 -0
  44. package/content/bio-research/skills/bio-research-scientific-problem-selection/references/03-optimization-function.md +481 -0
  45. package/content/bio-research/skills/bio-research-scientific-problem-selection/references/04-parameter-strategy.md +396 -0
  46. package/content/bio-research/skills/bio-research-scientific-problem-selection/references/05-decision-tree.md +85 -0
  47. package/content/bio-research/skills/bio-research-scientific-problem-selection/references/06-adversity-planning.md +123 -0
  48. package/content/bio-research/skills/bio-research-scientific-problem-selection/references/07-problem-inversion.md +152 -0
  49. package/content/bio-research/skills/bio-research-scientific-problem-selection/references/08-integration-synthesis.md +173 -0
  50. package/content/bio-research/skills/bio-research-scientific-problem-selection/references/09-meta-framework.md +504 -0
  51. package/content/bio-research/skills/bio-research-scvi-tools/LICENSE.txt +201 -0
  52. package/content/bio-research/skills/bio-research-scvi-tools/SKILL.md +155 -0
  53. package/content/bio-research/skills/bio-research-scvi-tools/references/atac_peakvi.md +398 -0
  54. package/content/bio-research/skills/bio-research-scvi-tools/references/batch_correction_sysvi.md +417 -0
  55. package/content/bio-research/skills/bio-research-scvi-tools/references/citeseq_totalvi.md +420 -0
  56. package/content/bio-research/skills/bio-research-scvi-tools/references/data_preparation.md +286 -0
  57. package/content/bio-research/skills/bio-research-scvi-tools/references/environment_setup.md +254 -0
  58. package/content/bio-research/skills/bio-research-scvi-tools/references/label_transfer.md +373 -0
  59. package/content/bio-research/skills/bio-research-scvi-tools/references/multiome_multivi.md +384 -0
  60. package/content/bio-research/skills/bio-research-scvi-tools/references/rna_velocity_velovi.md +410 -0
  61. package/content/bio-research/skills/bio-research-scvi-tools/references/scarches_mapping.md +401 -0
  62. package/content/bio-research/skills/bio-research-scvi-tools/references/scrna_integration.md +429 -0
  63. package/content/bio-research/skills/bio-research-scvi-tools/references/spatial_deconvolution.md +438 -0
  64. package/content/bio-research/skills/bio-research-scvi-tools/references/troubleshooting.md +420 -0
  65. package/content/bio-research/skills/bio-research-scvi-tools/scripts/cluster_embed.py +212 -0
  66. package/content/bio-research/skills/bio-research-scvi-tools/scripts/differential_expression.py +220 -0
  67. package/content/bio-research/skills/bio-research-scvi-tools/scripts/integrate_datasets.py +237 -0
  68. package/content/bio-research/skills/bio-research-scvi-tools/scripts/model_utils.py +634 -0
  69. package/content/bio-research/skills/bio-research-scvi-tools/scripts/prepare_data.py +169 -0
  70. package/content/bio-research/skills/bio-research-scvi-tools/scripts/train_model.py +370 -0
  71. package/content/bio-research/skills/bio-research-scvi-tools/scripts/transfer_labels.py +224 -0
  72. package/content/bio-research/skills/bio-research-scvi-tools/scripts/validate_adata.py +397 -0
  73. package/content/bio-research/skills/bio-research-single-cell-rna-qc/LICENSE.txt +201 -0
  74. package/content/bio-research/skills/bio-research-single-cell-rna-qc/SKILL.md +175 -0
  75. package/content/bio-research/skills/bio-research-single-cell-rna-qc/references/scverse_qc_guidelines.md +186 -0
  76. package/content/bio-research/skills/bio-research-single-cell-rna-qc/scripts/qc_analysis.py +232 -0
  77. package/content/bio-research/skills/bio-research-single-cell-rna-qc/scripts/qc_core.py +233 -0
  78. package/content/bio-research/skills/bio-research-single-cell-rna-qc/scripts/qc_plotting.py +235 -0
  79. package/content/bio-research/skills/bio-research-start/SKILL.md +79 -0
  80. package/content/customer-support/.mcp.json +40 -0
  81. package/content/customer-support/CONNECTORS.md +19 -0
  82. package/content/customer-support/LICENSE +202 -0
  83. package/content/customer-support/README.md +140 -0
  84. package/content/customer-support/skills/customer-support-customer-escalation/SKILL.md +248 -0
  85. package/content/customer-support/skills/customer-support-customer-research/SKILL.md +252 -0
  86. package/content/customer-support/skills/customer-support-draft-response/SKILL.md +418 -0
  87. package/content/customer-support/skills/customer-support-kb-article/SKILL.md +351 -0
  88. package/content/customer-support/skills/customer-support-ticket-triage/SKILL.md +275 -0
  89. package/content/data/.mcp.json +36 -0
  90. package/content/data/CONNECTORS.md +18 -0
  91. package/content/data/LICENSE +202 -0
  92. package/content/data/README.md +121 -0
  93. package/content/data/skills/data-analyze/SKILL.md +119 -0
  94. package/content/data/skills/data-build-dashboard/SKILL.md +924 -0
  95. package/content/data/skills/data-create-viz/SKILL.md +154 -0
  96. package/content/data/skills/data-data-context-extractor/SKILL.md +227 -0
  97. package/content/data/skills/data-data-context-extractor/references/domain-template.md +147 -0
  98. package/content/data/skills/data-data-context-extractor/references/example-output.md +198 -0
  99. package/content/data/skills/data-data-context-extractor/references/skill-template.md +148 -0
  100. package/content/data/skills/data-data-context-extractor/references/sql-dialects.md +121 -0
  101. package/content/data/skills/data-data-context-extractor/scripts/package_data_skill.py +126 -0
  102. package/content/data/skills/data-data-visualization/SKILL.md +305 -0
  103. package/content/data/skills/data-explore-data/SKILL.md +325 -0
  104. package/content/data/skills/data-sql-queries/SKILL.md +428 -0
  105. package/content/data/skills/data-statistical-analysis/SKILL.md +245 -0
  106. package/content/data/skills/data-validate-data/SKILL.md +383 -0
  107. package/content/data/skills/data-write-query/SKILL.md +122 -0
  108. package/content/design/.mcp.json +44 -0
  109. package/content/design/CONNECTORS.md +18 -0
  110. package/content/design/README.md +117 -0
  111. package/content/design/skills/design-accessibility-review/SKILL.md +128 -0
  112. package/content/design/skills/design-design-critique/SKILL.md +118 -0
  113. package/content/design/skills/design-design-handoff/SKILL.md +131 -0
  114. package/content/design/skills/design-design-system/SKILL.md +190 -0
  115. package/content/design/skills/design-research-synthesis/SKILL.md +92 -0
  116. package/content/design/skills/design-user-research/SKILL.md +41 -0
  117. package/content/design/skills/design-ux-copy/SKILL.md +107 -0
  118. package/content/engineering/.mcp.json +48 -0
  119. package/content/engineering/CONNECTORS.md +19 -0
  120. package/content/engineering/README.md +136 -0
  121. package/content/engineering/skills/engineering-architecture/SKILL.md +85 -0
  122. package/content/engineering/skills/engineering-code-review/SKILL.md +118 -0
  123. package/content/engineering/skills/engineering-debug/SKILL.md +95 -0
  124. package/content/engineering/skills/engineering-deploy-checklist/SKILL.md +78 -0
  125. package/content/engineering/skills/engineering-documentation/SKILL.md +49 -0
  126. package/content/engineering/skills/engineering-incident-response/SKILL.md +158 -0
  127. package/content/engineering/skills/engineering-standup/SKILL.md +75 -0
  128. package/content/engineering/skills/engineering-system-design/SKILL.md +42 -0
  129. package/content/engineering/skills/engineering-tech-debt/SKILL.md +32 -0
  130. package/content/engineering/skills/engineering-testing-strategy/SKILL.md +33 -0
  131. package/content/enterprise-search/.mcp.json +36 -0
  132. package/content/enterprise-search/CONNECTORS.md +21 -0
  133. package/content/enterprise-search/LICENSE +202 -0
  134. package/content/enterprise-search/README.md +157 -0
  135. package/content/enterprise-search/skills/enterprise-search-digest/SKILL.md +173 -0
  136. package/content/enterprise-search/skills/enterprise-search-knowledge-synthesis/SKILL.md +258 -0
  137. package/content/enterprise-search/skills/enterprise-search-search/SKILL.md +178 -0
  138. package/content/enterprise-search/skills/enterprise-search-search-strategy/SKILL.md +222 -0
  139. package/content/enterprise-search/skills/enterprise-search-source-management/SKILL.md +173 -0
  140. package/content/finance/.mcp.json +32 -0
  141. package/content/finance/CONNECTORS.md +20 -0
  142. package/content/finance/LICENSE +202 -0
  143. package/content/finance/README.md +92 -0
  144. package/content/finance/skills/finance-audit-support/SKILL.md +374 -0
  145. package/content/finance/skills/finance-close-management/SKILL.md +221 -0
  146. package/content/finance/skills/finance-financial-statements/SKILL.md +335 -0
  147. package/content/finance/skills/finance-journal-entry/SKILL.md +131 -0
  148. package/content/finance/skills/finance-journal-entry-prep/SKILL.md +186 -0
  149. package/content/finance/skills/finance-reconciliation/SKILL.md +175 -0
  150. package/content/finance/skills/finance-sox-testing/SKILL.md +218 -0
  151. package/content/finance/skills/finance-variance-analysis/SKILL.md +266 -0
  152. package/content/human-resources/.mcp.json +28 -0
  153. package/content/human-resources/CONNECTORS.md +19 -0
  154. package/content/human-resources/README.md +138 -0
  155. package/content/human-resources/skills/human-resources-comp-analysis/SKILL.md +92 -0
  156. package/content/human-resources/skills/human-resources-draft-offer/SKILL.md +82 -0
  157. package/content/human-resources/skills/human-resources-interview-prep/SKILL.md +37 -0
  158. package/content/human-resources/skills/human-resources-onboarding/SKILL.md +104 -0
  159. package/content/human-resources/skills/human-resources-org-planning/SKILL.md +28 -0
  160. package/content/human-resources/skills/human-resources-people-report/SKILL.md +99 -0
  161. package/content/human-resources/skills/human-resources-performance-review/SKILL.md +149 -0
  162. package/content/human-resources/skills/human-resources-policy-lookup/SKILL.md +94 -0
  163. package/content/human-resources/skills/human-resources-recruiting-pipeline/SKILL.md +31 -0
  164. package/content/legal/.mcp.json +36 -0
  165. package/content/legal/CONNECTORS.md +21 -0
  166. package/content/legal/LICENSE +202 -0
  167. package/content/legal/README.md +234 -0
  168. package/content/legal/skills/legal-brief/SKILL.md +208 -0
  169. package/content/legal/skills/legal-compliance-check/SKILL.md +274 -0
  170. package/content/legal/skills/legal-legal-response/SKILL.md +457 -0
  171. package/content/legal/skills/legal-legal-risk-assessment/SKILL.md +265 -0
  172. package/content/legal/skills/legal-meeting-briefing/SKILL.md +220 -0
  173. package/content/legal/skills/legal-review-contract/SKILL.md +358 -0
  174. package/content/legal/skills/legal-signature-request/SKILL.md +104 -0
  175. package/content/legal/skills/legal-triage-nda/SKILL.md +262 -0
  176. package/content/legal/skills/legal-vendor-check/SKILL.md +159 -0
  177. package/content/manifest.json +86 -0
  178. package/content/marketing/.mcp.json +60 -0
  179. package/content/marketing/CONNECTORS.md +20 -0
  180. package/content/marketing/LICENSE +202 -0
  181. package/content/marketing/README.md +90 -0
  182. package/content/marketing/skills/marketing-brand-review/SKILL.md +276 -0
  183. package/content/marketing/skills/marketing-campaign-plan/SKILL.md +308 -0
  184. package/content/marketing/skills/marketing-competitive-brief/SKILL.md +331 -0
  185. package/content/marketing/skills/marketing-content-creation/SKILL.md +157 -0
  186. package/content/marketing/skills/marketing-draft-content/SKILL.md +117 -0
  187. package/content/marketing/skills/marketing-email-sequence/SKILL.md +220 -0
  188. package/content/marketing/skills/marketing-performance-report/SKILL.md +392 -0
  189. package/content/marketing/skills/marketing-seo-audit/SKILL.md +190 -0
  190. package/content/operations/.mcp.json +32 -0
  191. package/content/operations/CONNECTORS.md +20 -0
  192. package/content/operations/README.md +135 -0
  193. package/content/operations/skills/operations-capacity-plan/SKILL.md +113 -0
  194. package/content/operations/skills/operations-change-request/SKILL.md +121 -0
  195. package/content/operations/skills/operations-compliance-tracking/SKILL.md +44 -0
  196. package/content/operations/skills/operations-process-doc/SKILL.md +82 -0
  197. package/content/operations/skills/operations-process-optimization/SKILL.md +39 -0
  198. package/content/operations/skills/operations-risk-assessment/SKILL.md +40 -0
  199. package/content/operations/skills/operations-runbook/SKILL.md +87 -0
  200. package/content/operations/skills/operations-status-report/SKILL.md +77 -0
  201. package/content/operations/skills/operations-vendor-review/SKILL.md +104 -0
  202. package/content/pdf-viewer/.mcp.json +8 -0
  203. package/content/pdf-viewer/CONNECTORS.md +15 -0
  204. package/content/pdf-viewer/LICENSE +202 -0
  205. package/content/pdf-viewer/README.md +57 -0
  206. package/content/pdf-viewer/commands/annotate.md +51 -0
  207. package/content/pdf-viewer/commands/fill-form.md +73 -0
  208. package/content/pdf-viewer/commands/open.md +34 -0
  209. package/content/pdf-viewer/commands/sign.md +54 -0
  210. package/content/pdf-viewer/skills/pdf-viewer-view-pdf/SKILL.md +147 -0
  211. package/content/product-management/.mcp.json +72 -0
  212. package/content/product-management/CONNECTORS.md +22 -0
  213. package/content/product-management/LICENSE +202 -0
  214. package/content/product-management/README.md +118 -0
  215. package/content/product-management/commands/brainstorm.md +120 -0
  216. package/content/product-management/skills/product-management-competitive-brief/SKILL.md +302 -0
  217. package/content/product-management/skills/product-management-metrics-review/SKILL.md +388 -0
  218. package/content/product-management/skills/product-management-product-brainstorming/SKILL.md +273 -0
  219. package/content/product-management/skills/product-management-roadmap-update/SKILL.md +266 -0
  220. package/content/product-management/skills/product-management-sprint-planning/SKILL.md +94 -0
  221. package/content/product-management/skills/product-management-stakeholder-update/SKILL.md +352 -0
  222. package/content/product-management/skills/product-management-synthesize-research/SKILL.md +312 -0
  223. package/content/product-management/skills/product-management-write-spec/SKILL.md +250 -0
  224. package/content/productivity/.mcp.json +44 -0
  225. package/content/productivity/CONNECTORS.md +18 -0
  226. package/content/productivity/LICENSE +202 -0
  227. package/content/productivity/README.md +97 -0
  228. package/content/productivity/skills/dashboard.html +3111 -0
  229. package/content/productivity/skills/productivity-memory-management/SKILL.md +323 -0
  230. package/content/productivity/skills/productivity-start/SKILL.md +158 -0
  231. package/content/productivity/skills/productivity-task-management/SKILL.md +91 -0
  232. package/content/productivity/skills/productivity-update/SKILL.md +168 -0
  233. package/content/sales/.mcp.json +100 -0
  234. package/content/sales/CONNECTORS.md +36 -0
  235. package/content/sales/LICENSE +202 -0
  236. package/content/sales/README.md +148 -0
  237. package/content/sales/skills/sales-account-context/SKILL.md +94 -0
  238. package/content/sales/skills/sales-account-plan/SKILL.md +95 -0
  239. package/content/sales/skills/sales-account-research/SKILL.md +99 -0
  240. package/content/sales/skills/sales-account-tiering/SKILL.md +101 -0
  241. package/content/sales/skills/sales-call-prep/SKILL.md +111 -0
  242. package/content/sales/skills/sales-call-summary/SKILL.md +111 -0
  243. package/content/sales/skills/sales-close-plan/SKILL.md +106 -0
  244. package/content/sales/skills/sales-competitive-intelligence/SKILL.md +102 -0
  245. package/content/sales/skills/sales-create-an-asset/SKILL.md +105 -0
  246. package/content/sales/skills/sales-crm-hygiene-check/SKILL.md +103 -0
  247. package/content/sales/skills/sales-customer-health/SKILL.md +108 -0
  248. package/content/sales/skills/sales-customer-voice/SKILL.md +94 -0
  249. package/content/sales/skills/sales-daily-briefing/SKILL.md +61 -0
  250. package/content/sales/skills/sales-deal-advance-gap/SKILL.md +102 -0
  251. package/content/sales/skills/sales-deal-review/SKILL.md +105 -0
  252. package/content/sales/skills/sales-deal-signals/SKILL.md +96 -0
  253. package/content/sales/skills/sales-deal-slip-scenario/SKILL.md +101 -0
  254. package/content/sales/skills/sales-draft-outreach/SKILL.md +116 -0
  255. package/content/sales/skills/sales-end-of-day/SKILL.md +114 -0
  256. package/content/sales/skills/sales-expansion-whitespace/SKILL.md +97 -0
  257. package/content/sales/skills/sales-forecast/SKILL.md +100 -0
  258. package/content/sales/skills/sales-handle-objection/SKILL.md +93 -0
  259. package/content/sales/skills/sales-inbox-sweep/SKILL.md +114 -0
  260. package/content/sales/skills/sales-lead-triage/SKILL.md +105 -0
  261. package/content/sales/skills/sales-log-activity/SKILL.md +111 -0
  262. package/content/sales/skills/sales-pipeline-review/SKILL.md +97 -0
  263. package/content/sales/skills/sales-renewal-radar/SKILL.md +95 -0
  264. package/content/sales/skills/sales-rep-context/SKILL.md +90 -0
  265. package/content/sales/skills/sales-route-lead/SKILL.md +111 -0
  266. package/content/sales/skills/sales-schedule-meeting/SKILL.md +99 -0
  267. package/content/sales/skills/sales-setup/SKILL.md +195 -0
  268. package/content/sales/skills/sales-stakeholder-map/SKILL.md +107 -0
  269. package/content/sales/skills/sales-team-pipeline/SKILL.md +105 -0
  270. package/content/sales/skills/sales-update-opportunity/SKILL.md +111 -0
  271. package/content/sales/skills/sales-weekly-wrap/SKILL.md +90 -0
  272. package/content/sales/skills/sales-win-loss-review/SKILL.md +88 -0
  273. package/content/small-business/.mcp.json +148 -0
  274. package/content/small-business/README.md +117 -0
  275. package/content/small-business/skills/small-business-ad-manager/SKILL.md +128 -0
  276. package/content/small-business/skills/small-business-ad-manager/reference/ad_copy.md +112 -0
  277. package/content/small-business/skills/small-business-ad-manager/reference/change_playbook.md +127 -0
  278. package/content/small-business/skills/small-business-ad-manager/reference/data_sources.md +100 -0
  279. package/content/small-business/skills/small-business-ad-manager/reference/diagnostics.md +89 -0
  280. package/content/small-business/skills/small-business-ad-manager/reference/gotchas.md +181 -0
  281. package/content/small-business/skills/small-business-ap-processor/SKILL.md +158 -0
  282. package/content/small-business/skills/small-business-ap-processor/reference/coding_rules.md +70 -0
  283. package/content/small-business/skills/small-business-ap-processor/reference/gotchas.md +131 -0
  284. package/content/small-business/skills/small-business-ap-processor/reference/intake_and_extraction.md +82 -0
  285. package/content/small-business/skills/small-business-ap-processor/reference/matching_and_exceptions.md +80 -0
  286. package/content/small-business/skills/small-business-ap-processor/reference/payment_run.md +77 -0
  287. package/content/small-business/skills/small-business-brand-style/SKILL.md +106 -0
  288. package/content/small-business/skills/small-business-build-agent/SKILL.md +105 -0
  289. package/content/small-business/skills/small-business-build-agent/reference/capture.md +133 -0
  290. package/content/small-business/skills/small-business-build-agent/reference/gotchas.md +204 -0
  291. package/content/small-business/skills/small-business-build-agent/reference/skill_authoring.md +165 -0
  292. package/content/small-business/skills/small-business-build-connector/SKILL.md +102 -0
  293. package/content/small-business/skills/small-business-build-connector/reference/discovery.md +120 -0
  294. package/content/small-business/skills/small-business-build-connector/reference/gotchas.md +237 -0
  295. package/content/small-business/skills/small-business-build-connector/reference/paths.md +106 -0
  296. package/content/small-business/skills/small-business-build-connector/reference/use-zapier.md +128 -0
  297. package/content/small-business/skills/small-business-business-pulse/SKILL.md +181 -0
  298. package/content/small-business/skills/small-business-business-pulse/reference/data_sources.md +173 -0
  299. package/content/small-business/skills/small-business-business-pulse/reference/gotchas.md +103 -0
  300. package/content/small-business/skills/small-business-business-pulse/reference/output_template.md +109 -0
  301. package/content/small-business/skills/small-business-business-pulse/reference/thresholds.md +71 -0
  302. package/content/small-business/skills/small-business-business-pulse/reference/v2_sources.md +63 -0
  303. package/content/small-business/skills/small-business-call-list/SKILL.md +82 -0
  304. package/content/small-business/skills/small-business-canva-creator/SKILL.md +448 -0
  305. package/content/small-business/skills/small-business-canva-creator/reference/canva-api.md +208 -0
  306. package/content/small-business/skills/small-business-canva-creator/reference/examples/boutique-brief-campaign.md +181 -0
  307. package/content/small-business/skills/small-business-canva-creator/reference/gotchas.md +380 -0
  308. package/content/small-business/skills/small-business-canva-creator/reference/hubspot-staging.md +137 -0
  309. package/content/small-business/skills/small-business-cash-flow-snapshot/SKILL.md +251 -0
  310. package/content/small-business/skills/small-business-cash-flow-snapshot/reference/examples/worked-example.md +92 -0
  311. package/content/small-business/skills/small-business-cash-flow-snapshot/reference/gotchas.md +62 -0
  312. package/content/small-business/skills/small-business-cash-flow-snapshot/reference/v2_sources.md +84 -0
  313. package/content/small-business/skills/small-business-close-month/SKILL.md +86 -0
  314. package/content/small-business/skills/small-business-content-strategy/SKILL.md +152 -0
  315. package/content/small-business/skills/small-business-content-strategy/reference/examples/retail-boutique-example.md +71 -0
  316. package/content/small-business/skills/small-business-content-strategy/reference/gotchas.md +104 -0
  317. package/content/small-business/skills/small-business-content-strategy/reference/v2_sources.md +40 -0
  318. package/content/small-business/skills/small-business-contract-review/SKILL.md +158 -0
  319. package/content/small-business/skills/small-business-contract-review/reference/docusign-fetch.md +32 -0
  320. package/content/small-business/skills/small-business-contract-review/reference/examples/flagged-summary-saas.md +97 -0
  321. package/content/small-business/skills/small-business-contract-review/reference/gmail-fetch.md +30 -0
  322. package/content/small-business/skills/small-business-contract-review/reference/gotchas.md +105 -0
  323. package/content/small-business/skills/small-business-contract-review/reference/m365-fetch.md +60 -0
  324. package/content/small-business/skills/small-business-crm-autopilot/SKILL.md +162 -0
  325. package/content/small-business/skills/small-business-crm-autopilot/reference/cleanup-checklist.md +82 -0
  326. package/content/small-business/skills/small-business-crm-autopilot/reference/examples/cleanup-deal.md +83 -0
  327. package/content/small-business/skills/small-business-crm-autopilot/reference/examples/log-call-happy-path.md +68 -0
  328. package/content/small-business/skills/small-business-crm-autopilot/reference/examples/log-email-happy-path.md +50 -0
  329. package/content/small-business/skills/small-business-crm-autopilot/reference/gotchas.md +110 -0
  330. package/content/small-business/skills/small-business-crm-autopilot/reference/hubspot-fields.md +62 -0
  331. package/content/small-business/skills/small-business-crm-autopilot/reference/lightweight_crm.md +125 -0
  332. package/content/small-business/skills/small-business-crm-autopilot/reference/salesforce-fields.md +122 -0
  333. package/content/small-business/skills/small-business-crm-autopilot/reference/standing_mode.md +144 -0
  334. package/content/small-business/skills/small-business-grant-rfp-writer/SKILL.md +162 -0
  335. package/content/small-business/skills/small-business-grant-rfp-writer/reference/drafting.md +129 -0
  336. package/content/small-business/skills/small-business-grant-rfp-writer/reference/go_no_go.md +125 -0
  337. package/content/small-business/skills/small-business-grant-rfp-writer/reference/gotchas.md +180 -0
  338. package/content/small-business/skills/small-business-grant-rfp-writer/reference/opportunity_sources.md +90 -0
  339. package/content/small-business/skills/small-business-grant-rfp-writer/reference/org_profile.md +81 -0
  340. package/content/small-business/skills/small-business-grow-pipeline/SKILL.md +92 -0
  341. package/content/small-business/skills/small-business-growth-pulse/SKILL.md +143 -0
  342. package/content/small-business/skills/small-business-growth-pulse/reference/data_sources.md +113 -0
  343. package/content/small-business/skills/small-business-growth-pulse/reference/gotchas.md +175 -0
  344. package/content/small-business/skills/small-business-growth-pulse/reference/output_template.md +122 -0
  345. package/content/small-business/skills/small-business-growth-pulse/reference/thresholds.md +110 -0
  346. package/content/small-business/skills/small-business-hiring-screener/SKILL.md +137 -0
  347. package/content/small-business/skills/small-business-hiring-screener/reference/candidate_comms.md +132 -0
  348. package/content/small-business/skills/small-business-hiring-screener/reference/fair_screening.md +103 -0
  349. package/content/small-business/skills/small-business-hiring-screener/reference/gotchas.md +183 -0
  350. package/content/small-business/skills/small-business-hiring-screener/reference/onboarding.md +82 -0
  351. package/content/small-business/skills/small-business-hiring-screener/reference/rubric.md +122 -0
  352. package/content/small-business/skills/small-business-inbox-manager/SKILL.md +130 -0
  353. package/content/small-business/skills/small-business-inbox-manager/reference/digest_format.md +110 -0
  354. package/content/small-business/skills/small-business-inbox-manager/reference/gotchas.md +220 -0
  355. package/content/small-business/skills/small-business-inbox-manager/reference/handoffs.md +77 -0
  356. package/content/small-business/skills/small-business-inbox-manager/reference/reply_drafting.md +116 -0
  357. package/content/small-business/skills/small-business-inbox-manager/reference/triage_rules.md +72 -0
  358. package/content/small-business/skills/small-business-inventory-planner/SKILL.md +126 -0
  359. package/content/small-business/skills/small-business-inventory-planner/reference/data_sources.md +94 -0
  360. package/content/small-business/skills/small-business-inventory-planner/reference/gotchas.md +153 -0
  361. package/content/small-business/skills/small-business-inventory-planner/reference/po_drafting.md +92 -0
  362. package/content/small-business/skills/small-business-inventory-planner/reference/seasonality.md +112 -0
  363. package/content/small-business/skills/small-business-inventory-planner/reference/velocity_and_reorder.md +154 -0
  364. package/content/small-business/skills/small-business-invoice-chase/SKILL.md +131 -0
  365. package/content/small-business/skills/small-business-invoice-chase/reference/examples/firm-reminder.md +28 -0
  366. package/content/small-business/skills/small-business-invoice-chase/reference/examples/gentle-reminder.md +27 -0
  367. package/content/small-business/skills/small-business-invoice-chase/reference/gotchas.md +75 -0
  368. package/content/small-business/skills/small-business-invoice-chase/reference/tone-matching.md +44 -0
  369. package/content/small-business/skills/small-business-invoice-chase/reference/v2_sources.md +78 -0
  370. package/content/small-business/skills/small-business-job-post-builder/SKILL.md +204 -0
  371. package/content/small-business/skills/small-business-job-post-builder/reference/docusign-routing.md +63 -0
  372. package/content/small-business/skills/small-business-job-post-builder/reference/examples/worked-example.md +110 -0
  373. package/content/small-business/skills/small-business-job-post-builder/reference/existing-document-merge.md +58 -0
  374. package/content/small-business/skills/small-business-job-post-builder/reference/gotchas.md +68 -0
  375. package/content/small-business/skills/small-business-job-post-builder/reference/interview-guide-structure.md +93 -0
  376. package/content/small-business/skills/small-business-job-post-builder/reference/job-post-structure.md +62 -0
  377. package/content/small-business/skills/small-business-job-post-builder/reference/offer-letter-template.md +145 -0
  378. package/content/small-business/skills/small-business-job-post-builder/reference/role-intake.md +73 -0
  379. package/content/small-business/skills/small-business-lead-finder/SKILL.md +119 -0
  380. package/content/small-business/skills/small-business-lead-finder/reference/gotchas.md +152 -0
  381. package/content/small-business/skills/small-business-lead-finder/reference/icp_method.md +97 -0
  382. package/content/small-business/skills/small-business-lead-finder/reference/output_template.md +124 -0
  383. package/content/small-business/skills/small-business-lead-finder/reference/scoring.md +92 -0
  384. package/content/small-business/skills/small-business-lead-finder/reference/sourcing.md +78 -0
  385. package/content/small-business/skills/small-business-lead-triage/SKILL.md +81 -0
  386. package/content/small-business/skills/small-business-lead-triage/reference/examples/happy-path-triage.md +68 -0
  387. package/content/small-business/skills/small-business-lead-triage/reference/gotchas.md +76 -0
  388. package/content/small-business/skills/small-business-lead-triage/reference/hubspot-scoring.md +169 -0
  389. package/content/small-business/skills/small-business-marketing-monday/SKILL.md +108 -0
  390. package/content/small-business/skills/small-business-monday-brief/SKILL.md +97 -0
  391. package/content/small-business/skills/small-business-month-end-prep/SKILL.md +331 -0
  392. package/content/small-business/skills/small-business-month-end-prep/reference/close-packet-format.md +127 -0
  393. package/content/small-business/skills/small-business-month-end-prep/reference/examples/pl-narrative.md +52 -0
  394. package/content/small-business/skills/small-business-month-end-prep/reference/gotchas.md +113 -0
  395. package/content/small-business/skills/small-business-month-end-prep/reference/paypal-settlements.md +110 -0
  396. package/content/small-business/skills/small-business-month-end-prep/reference/quickbooks-reconcile.md +71 -0
  397. package/content/small-business/skills/small-business-month-end-prep/reference/v2_sources.md +125 -0
  398. package/content/small-business/skills/small-business-month-end-prep/reference/xero-reconcile.md +175 -0
  399. package/content/small-business/skills/small-business-month-end-prep/reference/zoho-books-reconcile.md +168 -0
  400. package/content/small-business/skills/small-business-outreach-composer/SKILL.md +144 -0
  401. package/content/small-business/skills/small-business-outreach-composer/reference/gotchas.md +213 -0
  402. package/content/small-business/skills/small-business-outreach-composer/reference/output_template.md +147 -0
  403. package/content/small-business/skills/small-business-outreach-composer/reference/sequence_patterns.md +99 -0
  404. package/content/small-business/skills/small-business-outreach-composer/reference/slop_test.md +164 -0
  405. package/content/small-business/skills/small-business-pay-the-bills/SKILL.md +101 -0
  406. package/content/small-business/skills/small-business-payroll-prep/SKILL.md +139 -0
  407. package/content/small-business/skills/small-business-payroll-prep/reference/anomaly_rules.md +99 -0
  408. package/content/small-business/skills/small-business-payroll-prep/reference/books_sync.md +72 -0
  409. package/content/small-business/skills/small-business-payroll-prep/reference/gotchas.md +153 -0
  410. package/content/small-business/skills/small-business-payroll-prep/reference/run_sheet_format.md +90 -0
  411. package/content/small-business/skills/small-business-payroll-prep/reference/timesheet_intake.md +118 -0
  412. package/content/small-business/skills/small-business-plan-payroll/SKILL.md +88 -0
  413. package/content/small-business/skills/small-business-proposal-builder/SKILL.md +168 -0
  414. package/content/small-business/skills/small-business-proposal-builder/reference/discovery_extraction.md +138 -0
  415. package/content/small-business/skills/small-business-proposal-builder/reference/gotchas.md +184 -0
  416. package/content/small-business/skills/small-business-proposal-builder/reference/output_template.md +128 -0
  417. package/content/small-business/skills/small-business-proposal-builder/reference/pricing_method.md +125 -0
  418. package/content/small-business/skills/small-business-proposal-builder/reference/proposal_structure.md +120 -0
  419. package/content/small-business/skills/small-business-reactivate/SKILL.md +109 -0
  420. package/content/small-business/skills/small-business-report-builder/SKILL.md +142 -0
  421. package/content/small-business/skills/small-business-report-builder/reference/data_sources.md +168 -0
  422. package/content/small-business/skills/small-business-report-builder/reference/gotchas.md +155 -0
  423. package/content/small-business/skills/small-business-report-builder/reference/output_template.md +109 -0
  424. package/content/small-business/skills/small-business-report-builder/reference/report_spec.md +109 -0
  425. package/content/small-business/skills/small-business-report-builder/reference/saved_reports.md +50 -0
  426. package/content/small-business/skills/small-business-report-pack/SKILL.md +83 -0
  427. package/content/small-business/skills/small-business-restock/SKILL.md +88 -0
  428. package/content/small-business/skills/small-business-review-reputation/SKILL.md +130 -0
  429. package/content/small-business/skills/small-business-review-reputation/reference/churn-signals.md +110 -0
  430. package/content/small-business/skills/small-business-review-reputation/reference/examples/example-report.md +150 -0
  431. package/content/small-business/skills/small-business-review-reputation/reference/gotchas.md +164 -0
  432. package/content/small-business/skills/small-business-review-reputation/reference/response-patterns.md +123 -0
  433. package/content/small-business/skills/small-business-review-reputation/reference/sources.md +116 -0
  434. package/content/small-business/skills/small-business-seo-ai-visibility/SKILL.md +143 -0
  435. package/content/small-business/skills/small-business-seo-ai-visibility/reference/ai_visibility.md +173 -0
  436. package/content/small-business/skills/small-business-seo-ai-visibility/reference/audit_checklist.md +134 -0
  437. package/content/small-business/skills/small-business-seo-ai-visibility/reference/catalog_refresh.md +126 -0
  438. package/content/small-business/skills/small-business-seo-ai-visibility/reference/content_rewrite.md +113 -0
  439. package/content/small-business/skills/small-business-seo-ai-visibility/reference/gotchas.md +211 -0
  440. package/content/small-business/skills/small-business-smb-onboard/SKILL.md +82 -0
  441. package/content/small-business/skills/small-business-smb-onboard/reference/examples/happy-path.md +190 -0
  442. package/content/small-business/skills/small-business-smb-onboard/reference/gotchas.md +111 -0
  443. package/content/small-business/skills/small-business-smb-onboard/reference/onboard-checklist.md +99 -0
  444. package/content/small-business/skills/small-business-smb-onboard/reference/website-research.md +82 -0
  445. package/content/small-business/skills/small-business-smb-router/SKILL.md +216 -0
  446. package/content/small-business/skills/small-business-smb-router/reference/connector-map.md +96 -0
  447. package/content/small-business/skills/small-business-social-content-engine/SKILL.md +162 -0
  448. package/content/small-business/skills/small-business-social-content-engine/reference/calendar.md +116 -0
  449. package/content/small-business/skills/small-business-social-content-engine/reference/canva-api.md +208 -0
  450. package/content/small-business/skills/small-business-social-content-engine/reference/examples/okonkwo-campaign.md +190 -0
  451. package/content/small-business/skills/small-business-social-content-engine/reference/gotchas.md +447 -0
  452. package/content/small-business/skills/small-business-social-content-engine/reference/publishing.md +166 -0
  453. package/content/small-business/skills/small-business-social-content-engine/reference/shopify-assets.md +77 -0
  454. package/content/small-business/skills/small-business-speed-to-lead/SKILL.md +172 -0
  455. package/content/small-business/skills/small-business-speed-to-lead/reference/approval.md +61 -0
  456. package/content/small-business/skills/small-business-speed-to-lead/reference/gotchas.md +167 -0
  457. package/content/small-business/skills/small-business-speed-to-lead/reference/qualification.md +153 -0
  458. package/content/small-business/skills/small-business-speed-to-lead/reference/response_patterns.md +184 -0
  459. package/content/small-business/skills/small-business-tax-prep/SKILL.md +85 -0
  460. package/content/small-business/skills/small-business-tax-season-organizer/SKILL.md +210 -0
  461. package/content/small-business/skills/small-business-tax-season-organizer/reference/calculation-assumptions.md +177 -0
  462. package/content/small-business/skills/small-business-tax-season-organizer/reference/connector-queries.md +267 -0
  463. package/content/small-business/skills/small-business-tax-season-organizer/reference/examples/quarterly-estimate.md +92 -0
  464. package/content/small-business/skills/small-business-tax-season-organizer/reference/examples/year-end-1099.md +102 -0
  465. package/content/small-business/skills/small-business-tax-season-organizer/reference/gotchas.md +104 -0
  466. package/content/small-business/skills/small-business-tax-season-organizer/reference/output-formats.md +68 -0
  467. package/content/small-business/skills/small-business-ticket-deflector/SKILL.md +164 -0
  468. package/content/small-business/skills/small-business-ticket-deflector/reference/examples/deny-refund-request.md +98 -0
  469. package/content/small-business/skills/small-business-ticket-deflector/reference/examples/respond-refund-request.md +77 -0
  470. package/content/small-business/skills/small-business-ticket-deflector/reference/gotchas.md +57 -0
  471. package/index.ts +84 -0
  472. package/package.json +30 -3
@@ -0,0 +1,521 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Genome reference management for nf-core pipelines.
4
+
5
+ Manages downloading, caching, and accessing genome references from iGenomes.
6
+ Supports auto-download when references aren't available locally.
7
+
8
+ Usage:
9
+ python manage_genomes.py list
10
+ python manage_genomes.py check GRCh38
11
+ python manage_genomes.py download GRCh38
12
+ python manage_genomes.py params GRCh38
13
+ """
14
+
15
+ import argparse
16
+ import json
17
+ import os
18
+ import subprocess
19
+ import sys
20
+ from pathlib import Path
21
+ from typing import Dict, List, Optional
22
+
23
+
24
+ # iGenomes reference configuration
25
+ IGENOMES = {
26
+ # Human
27
+ 'GRCh38': {
28
+ 'display_name': 'Human GRCh38/hg38',
29
+ 'species': 'Homo sapiens',
30
+ 'aliases': ['hg38', 'GRCh38.p14'],
31
+ 's3_base': 's3://ngi-igenomes/igenomes/Homo_sapiens/NCBI/GRCh38',
32
+ 'files': {
33
+ 'fasta': 'Sequence/WholeGenomeFasta/genome.fa',
34
+ 'gtf': 'Annotation/Genes/genes.gtf',
35
+ 'bwa_index': 'Sequence/BWAIndex/',
36
+ 'star_index': 'Sequence/STARIndex/',
37
+ }
38
+ },
39
+ 'GRCh37': {
40
+ 'display_name': 'Human GRCh37/hg19',
41
+ 'species': 'Homo sapiens',
42
+ 'aliases': ['hg19', 'GRCh37.p13'],
43
+ 's3_base': 's3://ngi-igenomes/igenomes/Homo_sapiens/NCBI/GRCh37',
44
+ 'files': {
45
+ 'fasta': 'Sequence/WholeGenomeFasta/genome.fa',
46
+ 'gtf': 'Annotation/Genes/genes.gtf',
47
+ 'bwa_index': 'Sequence/BWAIndex/',
48
+ 'star_index': 'Sequence/STARIndex/',
49
+ }
50
+ },
51
+ # Mouse
52
+ 'GRCm39': {
53
+ 'display_name': 'Mouse GRCm39/mm39',
54
+ 'species': 'Mus musculus',
55
+ 'aliases': ['mm39', 'GRCm39'],
56
+ 's3_base': 's3://ngi-igenomes/igenomes/Mus_musculus/Ensembl/GRCm39',
57
+ 'files': {
58
+ 'fasta': 'Sequence/WholeGenomeFasta/genome.fa',
59
+ 'gtf': 'Annotation/Genes/genes.gtf',
60
+ 'bwa_index': 'Sequence/BWAIndex/',
61
+ 'star_index': 'Sequence/STARIndex/',
62
+ }
63
+ },
64
+ 'GRCm38': {
65
+ 'display_name': 'Mouse GRCm38/mm10',
66
+ 'species': 'Mus musculus',
67
+ 'aliases': ['mm10', 'GRCm38'],
68
+ 's3_base': 's3://ngi-igenomes/igenomes/Mus_musculus/NCBI/GRCm38',
69
+ 'files': {
70
+ 'fasta': 'Sequence/WholeGenomeFasta/genome.fa',
71
+ 'gtf': 'Annotation/Genes/genes.gtf',
72
+ 'bwa_index': 'Sequence/BWAIndex/',
73
+ 'star_index': 'Sequence/STARIndex/',
74
+ }
75
+ },
76
+ # Yeast
77
+ 'R64-1-1': {
78
+ 'display_name': 'Yeast R64-1-1/sacCer3',
79
+ 'species': 'Saccharomyces cerevisiae',
80
+ 'aliases': ['sacCer3', 'S288C', 'yeast'],
81
+ 's3_base': 's3://ngi-igenomes/igenomes/Saccharomyces_cerevisiae/Ensembl/R64-1-1',
82
+ 'files': {
83
+ 'fasta': 'Sequence/WholeGenomeFasta/genome.fa',
84
+ 'gtf': 'Annotation/Genes/genes.gtf',
85
+ 'bwa_index': 'Sequence/BWAIndex/',
86
+ 'star_index': 'Sequence/STARIndex/',
87
+ }
88
+ },
89
+ # Fruit fly
90
+ 'BDGP6': {
91
+ 'display_name': 'Drosophila BDGP6/dm6',
92
+ 'species': 'Drosophila melanogaster',
93
+ 'aliases': ['dm6', 'BDGP6', 'fly'],
94
+ 's3_base': 's3://ngi-igenomes/igenomes/Drosophila_melanogaster/Ensembl/BDGP6',
95
+ 'files': {
96
+ 'fasta': 'Sequence/WholeGenomeFasta/genome.fa',
97
+ 'gtf': 'Annotation/Genes/genes.gtf',
98
+ }
99
+ },
100
+ # C. elegans
101
+ 'WBcel235': {
102
+ 'display_name': 'C. elegans WBcel235/ce11',
103
+ 'species': 'Caenorhabditis elegans',
104
+ 'aliases': ['ce11', 'worm'],
105
+ 's3_base': 's3://ngi-igenomes/igenomes/Caenorhabditis_elegans/Ensembl/WBcel235',
106
+ 'files': {
107
+ 'fasta': 'Sequence/WholeGenomeFasta/genome.fa',
108
+ 'gtf': 'Annotation/Genes/genes.gtf',
109
+ 'bwa_index': 'Sequence/BWAIndex/',
110
+ 'star_index': 'Sequence/STARIndex/',
111
+ }
112
+ },
113
+ # Zebrafish
114
+ 'GRCz11': {
115
+ 'display_name': 'Zebrafish GRCz11/danRer11',
116
+ 'species': 'Danio rerio',
117
+ 'aliases': ['danRer11', 'zebrafish'],
118
+ 's3_base': 's3://ngi-igenomes/igenomes/Danio_rerio/Ensembl/GRCz11',
119
+ 'files': {
120
+ 'fasta': 'Sequence/WholeGenomeFasta/genome.fa',
121
+ 'gtf': 'Annotation/Genes/genes.gtf',
122
+ 'bwa_index': 'Sequence/BWAIndex/',
123
+ 'star_index': 'Sequence/STARIndex/',
124
+ }
125
+ },
126
+ 'GRCz10': {
127
+ 'display_name': 'Zebrafish GRCz10/danRer10',
128
+ 'species': 'Danio rerio',
129
+ 'aliases': ['danRer10'],
130
+ 's3_base': 's3://ngi-igenomes/igenomes/Danio_rerio/Ensembl/GRCz10',
131
+ 'files': {
132
+ 'fasta': 'Sequence/WholeGenomeFasta/genome.fa',
133
+ 'gtf': 'Annotation/Genes/genes.gtf',
134
+ }
135
+ },
136
+ # Rat
137
+ 'Rnor_6.0': {
138
+ 'display_name': 'Rat Rnor_6.0/rn6',
139
+ 'species': 'Rattus norvegicus',
140
+ 'aliases': ['rn6', 'Rnor6', 'rat'],
141
+ 's3_base': 's3://ngi-igenomes/igenomes/Rattus_norvegicus/Ensembl/Rnor_6.0',
142
+ 'files': {
143
+ 'fasta': 'Sequence/WholeGenomeFasta/genome.fa',
144
+ 'gtf': 'Annotation/Genes/genes.gtf',
145
+ 'bwa_index': 'Sequence/BWAIndex/',
146
+ 'star_index': 'Sequence/STARIndex/',
147
+ }
148
+ },
149
+ # Arabidopsis
150
+ 'TAIR10': {
151
+ 'display_name': 'Arabidopsis TAIR10',
152
+ 'species': 'Arabidopsis thaliana',
153
+ 'aliases': ['arabidopsis'],
154
+ 's3_base': 's3://ngi-igenomes/igenomes/Arabidopsis_thaliana/Ensembl/TAIR10',
155
+ 'files': {
156
+ 'fasta': 'Sequence/WholeGenomeFasta/genome.fa',
157
+ 'gtf': 'Annotation/Genes/genes.gtf',
158
+ 'bwa_index': 'Sequence/BWAIndex/',
159
+ 'star_index': 'Sequence/STARIndex/',
160
+ }
161
+ },
162
+ # Chicken
163
+ 'GRCg6a': {
164
+ 'display_name': 'Chicken GRCg6a/galGal6',
165
+ 'species': 'Gallus gallus',
166
+ 'aliases': ['galGal6', 'chicken'],
167
+ 's3_base': 's3://ngi-igenomes/igenomes/Gallus_gallus/Ensembl/GRCg6a',
168
+ 'files': {
169
+ 'fasta': 'Sequence/WholeGenomeFasta/genome.fa',
170
+ 'gtf': 'Annotation/Genes/genes.gtf',
171
+ }
172
+ },
173
+ # Dog
174
+ 'CanFam3.1': {
175
+ 'display_name': 'Dog CanFam3.1/canFam3',
176
+ 'species': 'Canis lupus familiaris',
177
+ 'aliases': ['canFam3', 'dog'],
178
+ 's3_base': 's3://ngi-igenomes/igenomes/Canis_familiaris/Ensembl/CanFam3.1',
179
+ 'files': {
180
+ 'fasta': 'Sequence/WholeGenomeFasta/genome.fa',
181
+ 'gtf': 'Annotation/Genes/genes.gtf',
182
+ }
183
+ },
184
+ # Pig
185
+ 'Sscrofa11.1': {
186
+ 'display_name': 'Pig Sscrofa11.1/susScr11',
187
+ 'species': 'Sus scrofa',
188
+ 'aliases': ['susScr11', 'pig'],
189
+ 's3_base': 's3://ngi-igenomes/igenomes/Sus_scrofa/Ensembl/Sscrofa11.1',
190
+ 'files': {
191
+ 'fasta': 'Sequence/WholeGenomeFasta/genome.fa',
192
+ 'gtf': 'Annotation/Genes/genes.gtf',
193
+ }
194
+ },
195
+ }
196
+
197
+
198
+ def get_cache_dir() -> Path:
199
+ """Get genome cache directory."""
200
+ cache_dir = os.environ.get(
201
+ 'NF_CORE_GENOME_CACHE',
202
+ os.path.expanduser('~/.nf-core/genomes')
203
+ )
204
+ return Path(cache_dir)
205
+
206
+
207
+ def resolve_genome_id(genome: str) -> Optional[str]:
208
+ """Resolve genome ID from name or alias."""
209
+ # Direct match
210
+ if genome in IGENOMES:
211
+ return genome
212
+
213
+ # Check aliases
214
+ genome_lower = genome.lower()
215
+ for gid, info in IGENOMES.items():
216
+ if genome_lower in [a.lower() for a in info.get('aliases', [])]:
217
+ return gid
218
+
219
+ return None
220
+
221
+
222
+ def is_genome_installed(genome_id: str) -> bool:
223
+ """Check if genome is installed locally."""
224
+ cache_dir = get_cache_dir()
225
+ genome_dir = cache_dir / genome_id
226
+
227
+ # Check for fasta as minimum requirement
228
+ fasta_path = genome_dir / 'genome.fa'
229
+ return fasta_path.exists()
230
+
231
+
232
+ def get_genome_path(genome_id: str) -> Optional[Path]:
233
+ """Get local path to genome if installed."""
234
+ if not is_genome_installed(genome_id):
235
+ return None
236
+ return get_cache_dir() / genome_id
237
+
238
+
239
+ def list_genomes(installed_only: bool = False) -> List[Dict]:
240
+ """List available genomes."""
241
+ result = []
242
+
243
+ for genome_id, info in IGENOMES.items():
244
+ installed = is_genome_installed(genome_id)
245
+
246
+ if installed_only and not installed:
247
+ continue
248
+
249
+ genome_path = get_genome_path(genome_id) if installed else None
250
+
251
+ result.append({
252
+ 'id': genome_id,
253
+ 'display_name': info['display_name'],
254
+ 'species': info['species'],
255
+ 'aliases': info.get('aliases', []),
256
+ 'installed': installed,
257
+ 'path': str(genome_path) if genome_path else None,
258
+ })
259
+
260
+ return result
261
+
262
+
263
+ def download_genome(
264
+ genome_id: str,
265
+ components: Optional[List[str]] = None,
266
+ force: bool = False
267
+ ) -> bool:
268
+ """
269
+ Download genome reference files from iGenomes.
270
+
271
+ Args:
272
+ genome_id: Genome identifier (e.g., GRCh38)
273
+ components: Specific components to download (fasta, gtf, etc.)
274
+ force: Overwrite existing files
275
+
276
+ Returns:
277
+ True if successful
278
+ """
279
+ # Resolve genome ID
280
+ resolved = resolve_genome_id(genome_id)
281
+ if not resolved:
282
+ print(f"Unknown genome: {genome_id}")
283
+ print(f"Available: {', '.join(IGENOMES.keys())}")
284
+ return False
285
+
286
+ genome_id = resolved
287
+ info = IGENOMES[genome_id]
288
+
289
+ # Check for AWS CLI
290
+ aws_available = subprocess.run(
291
+ ['which', 'aws'],
292
+ capture_output=True
293
+ ).returncode == 0
294
+
295
+ if not aws_available:
296
+ print("AWS CLI not found. Required for iGenomes download.")
297
+ print("Install with: pip install awscli")
298
+ print("\nAlternative: Use --genome flag with nf-core pipelines")
299
+ print("which will auto-download references (slower, per-run).")
300
+ return False
301
+
302
+ # Create cache directory
303
+ cache_dir = get_cache_dir()
304
+ genome_dir = cache_dir / genome_id
305
+ genome_dir.mkdir(parents=True, exist_ok=True)
306
+
307
+ # Determine components to download
308
+ if components is None:
309
+ components = ['fasta', 'gtf'] # Minimum required
310
+
311
+ print(f"Downloading {info['display_name']} to {genome_dir}")
312
+ print(f"Components: {', '.join(components)}")
313
+
314
+ success = True
315
+ for component in components:
316
+ if component not in info.get('files', {}):
317
+ print(f" Skipping {component}: not available for {genome_id}")
318
+ continue
319
+
320
+ remote_path = info['files'][component]
321
+ s3_path = f"{info['s3_base']}/{remote_path}"
322
+
323
+ # Determine local path
324
+ if remote_path.endswith('/'):
325
+ # Directory (e.g., index)
326
+ local_path = genome_dir / component
327
+ else:
328
+ # File
329
+ filename = Path(remote_path).name
330
+ local_path = genome_dir / filename
331
+
332
+ if local_path.exists() and not force:
333
+ print(f" {component}: Already exists (use --force to overwrite)")
334
+ continue
335
+
336
+ print(f" Downloading {component}...")
337
+
338
+ # Build AWS command
339
+ cmd = ['aws', 's3', 'cp', '--no-sign-request']
340
+
341
+ if remote_path.endswith('/'):
342
+ cmd.extend(['--recursive', s3_path, str(local_path)])
343
+ else:
344
+ cmd.extend([s3_path, str(local_path)])
345
+
346
+ result = subprocess.run(cmd, capture_output=True, text=True)
347
+
348
+ if result.returncode != 0:
349
+ print(f" ERROR downloading {component}:")
350
+ print(f" {result.stderr[:200]}")
351
+ success = False
352
+ else:
353
+ print(f" {component}: Downloaded successfully")
354
+
355
+ if success:
356
+ print(f"\nGenome {genome_id} ready at: {genome_dir}")
357
+ else:
358
+ print(f"\nSome components failed to download.")
359
+
360
+ return success
361
+
362
+
363
+ def get_nextflow_params(genome_id: str) -> Dict[str, str]:
364
+ """
365
+ Get Nextflow parameters for a genome.
366
+
367
+ Returns dict with --fasta, --gtf if local,
368
+ or just --genome if using iGenomes key.
369
+ """
370
+ resolved = resolve_genome_id(genome_id)
371
+ if not resolved:
372
+ return {'error': f'Unknown genome: {genome_id}'}
373
+
374
+ genome_id = resolved
375
+
376
+ # Check if installed locally
377
+ genome_path = get_genome_path(genome_id)
378
+
379
+ if genome_path:
380
+ params = {}
381
+
382
+ # Check for local files
383
+ fasta = genome_path / 'genome.fa'
384
+ if fasta.exists():
385
+ params['fasta'] = str(fasta)
386
+
387
+ gtf = genome_path / 'genes.gtf'
388
+ if gtf.exists():
389
+ params['gtf'] = str(gtf)
390
+
391
+ if params:
392
+ return params
393
+
394
+ # Fall back to iGenomes key
395
+ return {'genome': genome_id}
396
+
397
+
398
+ def print_genome_list(genomes: List[Dict], output_json: bool = False):
399
+ """Print genome list."""
400
+ if output_json:
401
+ print(json.dumps(genomes, indent=2))
402
+ return
403
+
404
+ print("\n" + "=" * 50)
405
+ print(" Available Genomes")
406
+ print("=" * 50 + "\n")
407
+
408
+ for g in genomes:
409
+ status = "\033[92m[installed]\033[0m" if g['installed'] else ""
410
+ print(f" {g['id']}: {g['display_name']} {status}")
411
+ print(f" Species: {g['species']}")
412
+ print(f" Aliases: {', '.join(g['aliases'])}")
413
+ if g['path']:
414
+ print(f" Path: {g['path']}")
415
+ print()
416
+
417
+
418
+ def main():
419
+ parser = argparse.ArgumentParser(
420
+ description='Manage genome references for nf-core pipelines',
421
+ formatter_class=argparse.RawDescriptionHelpFormatter,
422
+ epilog="""
423
+ Commands:
424
+ list List available genomes
425
+ check <genome> Check if genome is installed
426
+ download <genome> Download genome from iGenomes
427
+ params <genome> Get Nextflow parameters for genome
428
+
429
+ Examples:
430
+ %(prog)s list
431
+ %(prog)s list --installed
432
+ %(prog)s check GRCh38
433
+ %(prog)s download GRCh38
434
+ %(prog)s download GRCh38 --components fasta gtf star_index
435
+ %(prog)s params GRCh38
436
+ """
437
+ )
438
+
439
+ subparsers = parser.add_subparsers(dest='command', help='Commands')
440
+
441
+ # List command
442
+ list_parser = subparsers.add_parser('list', help='List available genomes')
443
+ list_parser.add_argument('--installed', action='store_true',
444
+ help='Show only installed genomes')
445
+ list_parser.add_argument('--json', action='store_true',
446
+ help='Output as JSON')
447
+
448
+ # Check command
449
+ check_parser = subparsers.add_parser('check', help='Check if genome is installed')
450
+ check_parser.add_argument('genome', help='Genome ID (e.g., GRCh38)')
451
+ check_parser.add_argument('--json', action='store_true',
452
+ help='Output as JSON')
453
+
454
+ # Download command
455
+ dl_parser = subparsers.add_parser('download', help='Download genome from iGenomes')
456
+ dl_parser.add_argument('genome', help='Genome ID (e.g., GRCh38)')
457
+ dl_parser.add_argument('--components', nargs='+',
458
+ help='Specific components (fasta, gtf, bwa_index, star_index)')
459
+ dl_parser.add_argument('--force', action='store_true',
460
+ help='Overwrite existing files')
461
+
462
+ # Params command
463
+ params_parser = subparsers.add_parser('params', help='Get Nextflow params for genome')
464
+ params_parser.add_argument('genome', help='Genome ID')
465
+ params_parser.add_argument('--json', action='store_true',
466
+ help='Output as JSON')
467
+
468
+ args = parser.parse_args()
469
+
470
+ if args.command == 'list':
471
+ genomes = list_genomes(installed_only=args.installed)
472
+ print_genome_list(genomes, args.json)
473
+
474
+ elif args.command == 'check':
475
+ resolved = resolve_genome_id(args.genome)
476
+ if not resolved:
477
+ print(f"Unknown genome: {args.genome}")
478
+ sys.exit(1)
479
+
480
+ installed = is_genome_installed(resolved)
481
+ path = get_genome_path(resolved) if installed else None
482
+
483
+ if args.json:
484
+ print(json.dumps({
485
+ 'genome': resolved,
486
+ 'installed': installed,
487
+ 'path': str(path) if path else None
488
+ }))
489
+ else:
490
+ if installed:
491
+ print(f"✓ Genome {resolved} is installed at: {path}")
492
+ else:
493
+ print(f"✗ Genome {resolved} is not installed locally")
494
+ print(f" Download with: python {sys.argv[0]} download {resolved}")
495
+
496
+ sys.exit(0 if installed else 1)
497
+
498
+ elif args.command == 'download':
499
+ success = download_genome(args.genome, args.components, args.force)
500
+ sys.exit(0 if success else 1)
501
+
502
+ elif args.command == 'params':
503
+ params = get_nextflow_params(args.genome)
504
+
505
+ if args.json:
506
+ print(json.dumps(params))
507
+ else:
508
+ if 'error' in params:
509
+ print(f"Error: {params['error']}")
510
+ sys.exit(1)
511
+
512
+ for key, value in params.items():
513
+ print(f"--{key} {value}")
514
+
515
+ else:
516
+ parser.print_help()
517
+ sys.exit(1)
518
+
519
+
520
+ if __name__ == '__main__':
521
+ main()