@saibolla/ada 0.1.2

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 (1432) hide show
  1. package/.ada/SYSTEM.md +81 -0
  2. package/.ada/agents/researcher.md +69 -0
  3. package/.ada/agents/reviewer.md +92 -0
  4. package/.ada/agents/verifier.md +45 -0
  5. package/.ada/agents/writer.md +54 -0
  6. package/.ada/settings.json +32 -0
  7. package/.ada/themes/ada.json +85 -0
  8. package/.env.example +31 -0
  9. package/AGENTS.md +79 -0
  10. package/LICENSE +191 -0
  11. package/README.md +188 -0
  12. package/bin/ada.js +26 -0
  13. package/dist/bootstrap/sync.js +143 -0
  14. package/dist/cli.js +404 -0
  15. package/dist/config/paths.js +32 -0
  16. package/dist/index.js +10 -0
  17. package/dist/model/catalog.js +255 -0
  18. package/dist/model/commands.js +180 -0
  19. package/dist/pi/launch.js +33 -0
  20. package/dist/pi/package-presets.js +55 -0
  21. package/dist/pi/runtime.js +81 -0
  22. package/dist/pi/settings.js +108 -0
  23. package/dist/pi/web-access.js +74 -0
  24. package/dist/search/commands.js +12 -0
  25. package/dist/setup/doctor.js +126 -0
  26. package/dist/setup/preview.js +117 -0
  27. package/dist/setup/prompts.js +34 -0
  28. package/dist/setup/setup.js +98 -0
  29. package/dist/setup/update.js +133 -0
  30. package/dist/system/executables.js +38 -0
  31. package/dist/system/node-version.js +31 -0
  32. package/dist/system/open-url.js +35 -0
  33. package/dist/system/promise-polyfill.js +12 -0
  34. package/dist/ui/terminal.js +64 -0
  35. package/dist/web/launch.js +48 -0
  36. package/dist/web-search.js +1 -0
  37. package/extensions/docparser/constants.ts +62 -0
  38. package/extensions/docparser/deps.ts +584 -0
  39. package/extensions/docparser/doctor.ts +353 -0
  40. package/extensions/docparser/index.ts +9 -0
  41. package/extensions/docparser/input.ts +230 -0
  42. package/extensions/docparser/request.ts +67 -0
  43. package/extensions/docparser/schema.ts +82 -0
  44. package/extensions/docparser/tool.ts +305 -0
  45. package/extensions/docparser/types.ts +99 -0
  46. package/extensions/research-tools/alpha.ts +107 -0
  47. package/extensions/research-tools/header.ts +284 -0
  48. package/extensions/research-tools/help.ts +93 -0
  49. package/extensions/research-tools/project-scaffold.ts +64 -0
  50. package/extensions/research-tools/project.ts +123 -0
  51. package/extensions/research-tools/shared.ts +16 -0
  52. package/extensions/research-tools.ts +42 -0
  53. package/logo.d.mts +3 -0
  54. package/logo.mjs +14 -0
  55. package/metadata/commands.d.mts +46 -0
  56. package/metadata/commands.mjs +133 -0
  57. package/package.json +80 -0
  58. package/prompts/audit.md +17 -0
  59. package/prompts/autoresearch.md +66 -0
  60. package/prompts/compare.md +18 -0
  61. package/prompts/deepresearch.md +189 -0
  62. package/prompts/draft.md +19 -0
  63. package/prompts/jobs.md +16 -0
  64. package/prompts/litreview.md +18 -0
  65. package/prompts/log.md +14 -0
  66. package/prompts/replicate.md +24 -0
  67. package/prompts/review.md +18 -0
  68. package/prompts/watch.md +16 -0
  69. package/scripts/build-native-bundle.mjs +349 -0
  70. package/scripts/check-node-version.mjs +35 -0
  71. package/scripts/patch-embedded-pi.mjs +588 -0
  72. package/scripts/prepare-runtime-workspace.mjs +162 -0
  73. package/scripts/prune-runtime-deps.mjs +131 -0
  74. package/scripts/release.sh +152 -0
  75. package/skills/adaptyv/SKILL.md +112 -0
  76. package/skills/adaptyv/reference/api_reference.md +308 -0
  77. package/skills/adaptyv/reference/examples.md +913 -0
  78. package/skills/adaptyv/reference/experiments.md +360 -0
  79. package/skills/adaptyv/reference/protein_optimization.md +637 -0
  80. package/skills/aeon/SKILL.md +372 -0
  81. package/skills/aeon/references/anomaly_detection.md +154 -0
  82. package/skills/aeon/references/classification.md +144 -0
  83. package/skills/aeon/references/clustering.md +123 -0
  84. package/skills/aeon/references/datasets_benchmarking.md +387 -0
  85. package/skills/aeon/references/distances.md +256 -0
  86. package/skills/aeon/references/forecasting.md +140 -0
  87. package/skills/aeon/references/networks.md +289 -0
  88. package/skills/aeon/references/regression.md +118 -0
  89. package/skills/aeon/references/segmentation.md +163 -0
  90. package/skills/aeon/references/similarity_search.md +187 -0
  91. package/skills/aeon/references/transformations.md +246 -0
  92. package/skills/alpha-research/SKILL.md +42 -0
  93. package/skills/alpha-vantage/SKILL.md +142 -0
  94. package/skills/alpha-vantage/references/commodities.md +153 -0
  95. package/skills/alpha-vantage/references/economic-indicators.md +158 -0
  96. package/skills/alpha-vantage/references/forex-crypto.md +154 -0
  97. package/skills/alpha-vantage/references/fundamentals.md +223 -0
  98. package/skills/alpha-vantage/references/intelligence.md +138 -0
  99. package/skills/alpha-vantage/references/options.md +93 -0
  100. package/skills/alpha-vantage/references/technical-indicators.md +374 -0
  101. package/skills/alpha-vantage/references/time-series.md +157 -0
  102. package/skills/alphafold-database/SKILL.md +511 -0
  103. package/skills/alphafold-database/references/api_reference.md +423 -0
  104. package/skills/anndata/SKILL.md +398 -0
  105. package/skills/anndata/references/best_practices.md +525 -0
  106. package/skills/anndata/references/concatenation.md +396 -0
  107. package/skills/anndata/references/data_structure.md +314 -0
  108. package/skills/anndata/references/io_operations.md +404 -0
  109. package/skills/anndata/references/manipulation.md +516 -0
  110. package/skills/arboreto/SKILL.md +241 -0
  111. package/skills/arboreto/references/algorithms.md +138 -0
  112. package/skills/arboreto/references/basic_inference.md +151 -0
  113. package/skills/arboreto/references/distributed_computing.md +242 -0
  114. package/skills/arboreto/scripts/basic_grn_inference.py +97 -0
  115. package/skills/arxiv-database/SKILL.md +362 -0
  116. package/skills/arxiv-database/references/api_reference.md +430 -0
  117. package/skills/arxiv-database/scripts/arxiv_search.py +414 -0
  118. package/skills/astropy/SKILL.md +329 -0
  119. package/skills/astropy/references/coordinates.md +273 -0
  120. package/skills/astropy/references/cosmology.md +307 -0
  121. package/skills/astropy/references/fits.md +396 -0
  122. package/skills/astropy/references/tables.md +489 -0
  123. package/skills/astropy/references/time.md +404 -0
  124. package/skills/astropy/references/units.md +178 -0
  125. package/skills/astropy/references/wcs_and_other_modules.md +373 -0
  126. package/skills/autoresearch/SKILL.md +12 -0
  127. package/skills/benchling-integration/SKILL.md +478 -0
  128. package/skills/benchling-integration/references/api_endpoints.md +883 -0
  129. package/skills/benchling-integration/references/authentication.md +379 -0
  130. package/skills/benchling-integration/references/sdk_reference.md +774 -0
  131. package/skills/bgpt-paper-search/SKILL.md +81 -0
  132. package/skills/bindingdb-database/SKILL.md +332 -0
  133. package/skills/bindingdb-database/references/affinity_queries.md +178 -0
  134. package/skills/biopython/SKILL.md +441 -0
  135. package/skills/biopython/references/advanced.md +577 -0
  136. package/skills/biopython/references/alignment.md +362 -0
  137. package/skills/biopython/references/blast.md +455 -0
  138. package/skills/biopython/references/databases.md +484 -0
  139. package/skills/biopython/references/phylogenetics.md +566 -0
  140. package/skills/biopython/references/sequence_io.md +285 -0
  141. package/skills/biopython/references/structure.md +564 -0
  142. package/skills/biorxiv-database/SKILL.md +481 -0
  143. package/skills/biorxiv-database/references/api_reference.md +280 -0
  144. package/skills/biorxiv-database/scripts/biorxiv_search.py +445 -0
  145. package/skills/bioservices/SKILL.md +359 -0
  146. package/skills/bioservices/references/identifier_mapping.md +685 -0
  147. package/skills/bioservices/references/services_reference.md +636 -0
  148. package/skills/bioservices/references/workflow_patterns.md +811 -0
  149. package/skills/bioservices/scripts/batch_id_converter.py +347 -0
  150. package/skills/bioservices/scripts/compound_cross_reference.py +378 -0
  151. package/skills/bioservices/scripts/pathway_analysis.py +309 -0
  152. package/skills/bioservices/scripts/protein_analysis_workflow.py +408 -0
  153. package/skills/brenda-database/SKILL.md +717 -0
  154. package/skills/brenda-database/references/api_reference.md +537 -0
  155. package/skills/brenda-database/scripts/brenda_queries.py +844 -0
  156. package/skills/brenda-database/scripts/brenda_visualization.py +772 -0
  157. package/skills/brenda-database/scripts/enzyme_pathway_builder.py +1053 -0
  158. package/skills/cbioportal-database/SKILL.md +367 -0
  159. package/skills/cbioportal-database/references/study_exploration.md +128 -0
  160. package/skills/cellxgene-census/SKILL.md +509 -0
  161. package/skills/cellxgene-census/references/census_schema.md +182 -0
  162. package/skills/cellxgene-census/references/common_patterns.md +351 -0
  163. package/skills/chembl-database/SKILL.md +387 -0
  164. package/skills/chembl-database/references/api_reference.md +272 -0
  165. package/skills/chembl-database/scripts/example_queries.py +278 -0
  166. package/skills/cirq/SKILL.md +344 -0
  167. package/skills/cirq/references/building.md +307 -0
  168. package/skills/cirq/references/experiments.md +572 -0
  169. package/skills/cirq/references/hardware.md +515 -0
  170. package/skills/cirq/references/noise.md +515 -0
  171. package/skills/cirq/references/simulation.md +350 -0
  172. package/skills/cirq/references/transformation.md +416 -0
  173. package/skills/citation-management/SKILL.md +1113 -0
  174. package/skills/citation-management/assets/bibtex_template.bib +264 -0
  175. package/skills/citation-management/assets/citation_checklist.md +386 -0
  176. package/skills/citation-management/references/bibtex_formatting.md +908 -0
  177. package/skills/citation-management/references/citation_validation.md +794 -0
  178. package/skills/citation-management/references/google_scholar_search.md +725 -0
  179. package/skills/citation-management/references/metadata_extraction.md +870 -0
  180. package/skills/citation-management/references/pubmed_search.md +839 -0
  181. package/skills/citation-management/scripts/doi_to_bibtex.py +204 -0
  182. package/skills/citation-management/scripts/extract_metadata.py +569 -0
  183. package/skills/citation-management/scripts/format_bibtex.py +349 -0
  184. package/skills/citation-management/scripts/search_google_scholar.py +282 -0
  185. package/skills/citation-management/scripts/search_pubmed.py +398 -0
  186. package/skills/citation-management/scripts/validate_citations.py +497 -0
  187. package/skills/clinical-decision-support/SKILL.md +510 -0
  188. package/skills/clinical-decision-support/assets/biomarker_report_template.tex +380 -0
  189. package/skills/clinical-decision-support/assets/clinical_pathway_template.tex +222 -0
  190. package/skills/clinical-decision-support/assets/cohort_analysis_template.tex +359 -0
  191. package/skills/clinical-decision-support/assets/color_schemes.tex +149 -0
  192. package/skills/clinical-decision-support/assets/example_gbm_cohort.md +208 -0
  193. package/skills/clinical-decision-support/assets/recommendation_strength_guide.md +328 -0
  194. package/skills/clinical-decision-support/assets/treatment_recommendation_template.tex +529 -0
  195. package/skills/clinical-decision-support/references/README.md +129 -0
  196. package/skills/clinical-decision-support/references/biomarker_classification.md +719 -0
  197. package/skills/clinical-decision-support/references/clinical_decision_algorithms.md +604 -0
  198. package/skills/clinical-decision-support/references/evidence_synthesis.md +840 -0
  199. package/skills/clinical-decision-support/references/outcome_analysis.md +640 -0
  200. package/skills/clinical-decision-support/references/patient_cohort_analysis.md +427 -0
  201. package/skills/clinical-decision-support/references/treatment_recommendations.md +521 -0
  202. package/skills/clinical-decision-support/scripts/biomarker_classifier.py +384 -0
  203. package/skills/clinical-decision-support/scripts/build_decision_tree.py +447 -0
  204. package/skills/clinical-decision-support/scripts/create_cohort_tables.py +524 -0
  205. package/skills/clinical-decision-support/scripts/generate_survival_analysis.py +422 -0
  206. package/skills/clinical-decision-support/scripts/validate_cds_document.py +335 -0
  207. package/skills/clinical-reports/SKILL.md +1131 -0
  208. package/skills/clinical-reports/assets/case_report_template.md +352 -0
  209. package/skills/clinical-reports/assets/clinical_trial_csr_template.md +353 -0
  210. package/skills/clinical-reports/assets/clinical_trial_sae_template.md +359 -0
  211. package/skills/clinical-reports/assets/consult_note_template.md +305 -0
  212. package/skills/clinical-reports/assets/discharge_summary_template.md +453 -0
  213. package/skills/clinical-reports/assets/hipaa_compliance_checklist.md +395 -0
  214. package/skills/clinical-reports/assets/history_physical_template.md +305 -0
  215. package/skills/clinical-reports/assets/lab_report_template.md +309 -0
  216. package/skills/clinical-reports/assets/pathology_report_template.md +249 -0
  217. package/skills/clinical-reports/assets/quality_checklist.md +338 -0
  218. package/skills/clinical-reports/assets/radiology_report_template.md +318 -0
  219. package/skills/clinical-reports/assets/soap_note_template.md +253 -0
  220. package/skills/clinical-reports/references/README.md +236 -0
  221. package/skills/clinical-reports/references/case_report_guidelines.md +570 -0
  222. package/skills/clinical-reports/references/clinical_trial_reporting.md +693 -0
  223. package/skills/clinical-reports/references/data_presentation.md +530 -0
  224. package/skills/clinical-reports/references/diagnostic_reports_standards.md +629 -0
  225. package/skills/clinical-reports/references/medical_terminology.md +588 -0
  226. package/skills/clinical-reports/references/patient_documentation.md +744 -0
  227. package/skills/clinical-reports/references/peer_review_standards.md +585 -0
  228. package/skills/clinical-reports/references/regulatory_compliance.md +577 -0
  229. package/skills/clinical-reports/scripts/check_deidentification.py +346 -0
  230. package/skills/clinical-reports/scripts/compliance_checker.py +78 -0
  231. package/skills/clinical-reports/scripts/extract_clinical_data.py +102 -0
  232. package/skills/clinical-reports/scripts/format_adverse_events.py +103 -0
  233. package/skills/clinical-reports/scripts/generate_report_template.py +163 -0
  234. package/skills/clinical-reports/scripts/terminology_validator.py +133 -0
  235. package/skills/clinical-reports/scripts/validate_case_report.py +334 -0
  236. package/skills/clinical-reports/scripts/validate_trial_report.py +89 -0
  237. package/skills/clinicaltrials-database/SKILL.md +505 -0
  238. package/skills/clinicaltrials-database/references/api_reference.md +358 -0
  239. package/skills/clinicaltrials-database/scripts/query_clinicaltrials.py +215 -0
  240. package/skills/clinpgx-database/SKILL.md +636 -0
  241. package/skills/clinpgx-database/references/api_reference.md +757 -0
  242. package/skills/clinpgx-database/scripts/query_clinpgx.py +518 -0
  243. package/skills/clinvar-database/SKILL.md +360 -0
  244. package/skills/clinvar-database/references/api_reference.md +227 -0
  245. package/skills/clinvar-database/references/clinical_significance.md +218 -0
  246. package/skills/clinvar-database/references/data_formats.md +358 -0
  247. package/skills/cobrapy/SKILL.md +461 -0
  248. package/skills/cobrapy/references/api_quick_reference.md +655 -0
  249. package/skills/cobrapy/references/workflows.md +593 -0
  250. package/skills/consciousness-council/SKILL.md +150 -0
  251. package/skills/consciousness-council/references/advanced-configurations.md +96 -0
  252. package/skills/cosmic-database/SKILL.md +334 -0
  253. package/skills/cosmic-database/references/cosmic_data_reference.md +220 -0
  254. package/skills/cosmic-database/scripts/download_cosmic.py +231 -0
  255. package/skills/crawl4ai/SKILL.md +172 -0
  256. package/skills/dask/SKILL.md +454 -0
  257. package/skills/dask/references/arrays.md +497 -0
  258. package/skills/dask/references/bags.md +468 -0
  259. package/skills/dask/references/best-practices.md +277 -0
  260. package/skills/dask/references/dataframes.md +368 -0
  261. package/skills/dask/references/futures.md +541 -0
  262. package/skills/dask/references/schedulers.md +504 -0
  263. package/skills/datacommons-client/SKILL.md +253 -0
  264. package/skills/datacommons-client/references/getting_started.md +417 -0
  265. package/skills/datacommons-client/references/node.md +250 -0
  266. package/skills/datacommons-client/references/observation.md +185 -0
  267. package/skills/datacommons-client/references/resolve.md +246 -0
  268. package/skills/datamol/SKILL.md +704 -0
  269. package/skills/datamol/references/conformers_module.md +131 -0
  270. package/skills/datamol/references/core_api.md +130 -0
  271. package/skills/datamol/references/descriptors_viz.md +195 -0
  272. package/skills/datamol/references/fragments_scaffolds.md +174 -0
  273. package/skills/datamol/references/io_module.md +109 -0
  274. package/skills/datamol/references/reactions_data.md +218 -0
  275. package/skills/deep-research/SKILL.md +12 -0
  276. package/skills/deepchem/SKILL.md +595 -0
  277. package/skills/deepchem/references/api_reference.md +303 -0
  278. package/skills/deepchem/references/workflows.md +491 -0
  279. package/skills/deepchem/scripts/graph_neural_network.py +338 -0
  280. package/skills/deepchem/scripts/predict_solubility.py +224 -0
  281. package/skills/deepchem/scripts/transfer_learning.py +375 -0
  282. package/skills/deeptools/SKILL.md +529 -0
  283. package/skills/deeptools/assets/quick_reference.md +58 -0
  284. package/skills/deeptools/references/effective_genome_sizes.md +116 -0
  285. package/skills/deeptools/references/normalization_methods.md +410 -0
  286. package/skills/deeptools/references/tools_reference.md +533 -0
  287. package/skills/deeptools/references/workflows.md +474 -0
  288. package/skills/deeptools/scripts/validate_files.py +195 -0
  289. package/skills/deeptools/scripts/workflow_generator.py +454 -0
  290. package/skills/denario/SKILL.md +213 -0
  291. package/skills/denario/references/examples.md +494 -0
  292. package/skills/denario/references/installation.md +213 -0
  293. package/skills/denario/references/llm_configuration.md +265 -0
  294. package/skills/denario/references/research_pipeline.md +471 -0
  295. package/skills/depmap/SKILL.md +300 -0
  296. package/skills/depmap/references/dependency_analysis.md +178 -0
  297. package/skills/dhdna-profiler/SKILL.md +162 -0
  298. package/skills/dhdna-profiler/references/advanced-profiling.md +72 -0
  299. package/skills/diffdock/SKILL.md +481 -0
  300. package/skills/diffdock/assets/batch_template.csv +4 -0
  301. package/skills/diffdock/assets/custom_inference_config.yaml +90 -0
  302. package/skills/diffdock/references/confidence_and_limitations.md +182 -0
  303. package/skills/diffdock/references/parameters_reference.md +163 -0
  304. package/skills/diffdock/references/workflows_examples.md +392 -0
  305. package/skills/diffdock/scripts/analyze_results.py +334 -0
  306. package/skills/diffdock/scripts/prepare_batch_csv.py +254 -0
  307. package/skills/diffdock/scripts/setup_check.py +278 -0
  308. package/skills/dnanexus-integration/SKILL.md +381 -0
  309. package/skills/dnanexus-integration/references/app-development.md +247 -0
  310. package/skills/dnanexus-integration/references/configuration.md +646 -0
  311. package/skills/dnanexus-integration/references/data-operations.md +400 -0
  312. package/skills/dnanexus-integration/references/job-execution.md +412 -0
  313. package/skills/dnanexus-integration/references/python-sdk.md +523 -0
  314. package/skills/docker/SKILL.md +84 -0
  315. package/skills/docx/LICENSE.txt +30 -0
  316. package/skills/docx/SKILL.md +590 -0
  317. package/skills/docx/scripts/__init__.py +1 -0
  318. package/skills/docx/scripts/accept_changes.py +135 -0
  319. package/skills/docx/scripts/comment.py +318 -0
  320. package/skills/docx/scripts/office/helpers/__init__.py +0 -0
  321. package/skills/docx/scripts/office/helpers/merge_runs.py +199 -0
  322. package/skills/docx/scripts/office/helpers/simplify_redlines.py +197 -0
  323. package/skills/docx/scripts/office/pack.py +159 -0
  324. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  325. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  326. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  327. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  328. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  329. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  330. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  331. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  332. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  333. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  334. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  335. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  336. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  337. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  338. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  339. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  340. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  341. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  342. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  343. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  344. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  345. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  346. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  347. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  348. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  349. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  350. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  351. package/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  352. package/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  353. package/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  354. package/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  355. package/skills/docx/scripts/office/schemas/mce/mc.xsd +75 -0
  356. package/skills/docx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
  357. package/skills/docx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
  358. package/skills/docx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
  359. package/skills/docx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
  360. package/skills/docx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
  361. package/skills/docx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  362. package/skills/docx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
  363. package/skills/docx/scripts/office/soffice.py +183 -0
  364. package/skills/docx/scripts/office/unpack.py +132 -0
  365. package/skills/docx/scripts/office/validate.py +111 -0
  366. package/skills/docx/scripts/office/validators/__init__.py +15 -0
  367. package/skills/docx/scripts/office/validators/base.py +847 -0
  368. package/skills/docx/scripts/office/validators/docx.py +446 -0
  369. package/skills/docx/scripts/office/validators/pptx.py +275 -0
  370. package/skills/docx/scripts/office/validators/redlining.py +247 -0
  371. package/skills/docx/scripts/templates/comments.xml +3 -0
  372. package/skills/docx/scripts/templates/commentsExtended.xml +3 -0
  373. package/skills/docx/scripts/templates/commentsExtensible.xml +3 -0
  374. package/skills/docx/scripts/templates/commentsIds.xml +3 -0
  375. package/skills/docx/scripts/templates/people.xml +3 -0
  376. package/skills/drugbank-database/SKILL.md +188 -0
  377. package/skills/drugbank-database/references/chemical-analysis.md +590 -0
  378. package/skills/drugbank-database/references/data-access.md +242 -0
  379. package/skills/drugbank-database/references/drug-queries.md +386 -0
  380. package/skills/drugbank-database/references/interactions.md +425 -0
  381. package/skills/drugbank-database/references/targets-pathways.md +518 -0
  382. package/skills/drugbank-database/scripts/drugbank_helper.py +350 -0
  383. package/skills/edgartools/SKILL.md +136 -0
  384. package/skills/edgartools/references/ai-integration.md +274 -0
  385. package/skills/edgartools/references/companies.md +268 -0
  386. package/skills/edgartools/references/data-objects.md +237 -0
  387. package/skills/edgartools/references/entity-facts.md +372 -0
  388. package/skills/edgartools/references/filings.md +387 -0
  389. package/skills/edgartools/references/financial-data.md +274 -0
  390. package/skills/edgartools/references/xbrl.md +373 -0
  391. package/skills/eli5/SKILL.md +25 -0
  392. package/skills/ena-database/SKILL.md +202 -0
  393. package/skills/ena-database/references/api_reference.md +490 -0
  394. package/skills/ensembl-database/SKILL.md +309 -0
  395. package/skills/ensembl-database/references/api_endpoints.md +346 -0
  396. package/skills/ensembl-database/scripts/ensembl_query.py +427 -0
  397. package/skills/esm/SKILL.md +304 -0
  398. package/skills/esm/references/esm-c-api.md +583 -0
  399. package/skills/esm/references/esm3-api.md +452 -0
  400. package/skills/esm/references/forge-api.md +657 -0
  401. package/skills/esm/references/workflows.md +685 -0
  402. package/skills/etetoolkit/SKILL.md +621 -0
  403. package/skills/etetoolkit/references/api_reference.md +583 -0
  404. package/skills/etetoolkit/references/visualization.md +783 -0
  405. package/skills/etetoolkit/references/workflows.md +774 -0
  406. package/skills/etetoolkit/scripts/quick_visualize.py +214 -0
  407. package/skills/etetoolkit/scripts/tree_operations.py +229 -0
  408. package/skills/exploratory-data-analysis/SKILL.md +444 -0
  409. package/skills/exploratory-data-analysis/assets/report_template.md +196 -0
  410. package/skills/exploratory-data-analysis/references/bioinformatics_genomics_formats.md +664 -0
  411. package/skills/exploratory-data-analysis/references/chemistry_molecular_formats.md +664 -0
  412. package/skills/exploratory-data-analysis/references/general_scientific_formats.md +518 -0
  413. package/skills/exploratory-data-analysis/references/microscopy_imaging_formats.md +620 -0
  414. package/skills/exploratory-data-analysis/references/proteomics_metabolomics_formats.md +517 -0
  415. package/skills/exploratory-data-analysis/references/spectroscopy_analytical_formats.md +633 -0
  416. package/skills/exploratory-data-analysis/scripts/eda_analyzer.py +547 -0
  417. package/skills/fda-database/SKILL.md +516 -0
  418. package/skills/fda-database/references/animal_veterinary.md +377 -0
  419. package/skills/fda-database/references/api_basics.md +687 -0
  420. package/skills/fda-database/references/devices.md +632 -0
  421. package/skills/fda-database/references/drugs.md +468 -0
  422. package/skills/fda-database/references/foods.md +374 -0
  423. package/skills/fda-database/references/other.md +472 -0
  424. package/skills/fda-database/scripts/fda_examples.py +335 -0
  425. package/skills/fda-database/scripts/fda_query.py +440 -0
  426. package/skills/flowio/SKILL.md +606 -0
  427. package/skills/flowio/references/api_reference.md +372 -0
  428. package/skills/fluidsim/SKILL.md +347 -0
  429. package/skills/fluidsim/references/advanced_features.md +398 -0
  430. package/skills/fluidsim/references/installation.md +68 -0
  431. package/skills/fluidsim/references/output_analysis.md +283 -0
  432. package/skills/fluidsim/references/parameters.md +198 -0
  433. package/skills/fluidsim/references/simulation_workflow.md +172 -0
  434. package/skills/fluidsim/references/solvers.md +94 -0
  435. package/skills/fred-economic-data/SKILL.md +433 -0
  436. package/skills/fred-economic-data/references/api_basics.md +212 -0
  437. package/skills/fred-economic-data/references/categories.md +442 -0
  438. package/skills/fred-economic-data/references/geofred.md +588 -0
  439. package/skills/fred-economic-data/references/releases.md +642 -0
  440. package/skills/fred-economic-data/references/series.md +584 -0
  441. package/skills/fred-economic-data/references/sources.md +423 -0
  442. package/skills/fred-economic-data/references/tags.md +485 -0
  443. package/skills/fred-economic-data/scripts/fred_examples.py +354 -0
  444. package/skills/fred-economic-data/scripts/fred_query.py +590 -0
  445. package/skills/gene-database/SKILL.md +177 -0
  446. package/skills/gene-database/references/api_reference.md +404 -0
  447. package/skills/gene-database/references/common_workflows.md +428 -0
  448. package/skills/gene-database/scripts/batch_gene_lookup.py +298 -0
  449. package/skills/gene-database/scripts/fetch_gene_data.py +277 -0
  450. package/skills/gene-database/scripts/query_gene.py +251 -0
  451. package/skills/generate-image/SKILL.md +183 -0
  452. package/skills/generate-image/scripts/generate_image.py +281 -0
  453. package/skills/geniml/SKILL.md +316 -0
  454. package/skills/geniml/references/bedspace.md +127 -0
  455. package/skills/geniml/references/consensus_peaks.md +238 -0
  456. package/skills/geniml/references/region2vec.md +90 -0
  457. package/skills/geniml/references/scembed.md +197 -0
  458. package/skills/geniml/references/utilities.md +385 -0
  459. package/skills/geo-database/SKILL.md +813 -0
  460. package/skills/geo-database/references/geo_reference.md +829 -0
  461. package/skills/geomaster/README.md +105 -0
  462. package/skills/geomaster/SKILL.md +365 -0
  463. package/skills/geomaster/references/advanced-gis.md +376 -0
  464. package/skills/geomaster/references/big-data.md +363 -0
  465. package/skills/geomaster/references/code-examples.md +531 -0
  466. package/skills/geomaster/references/coordinate-systems.md +364 -0
  467. package/skills/geomaster/references/core-libraries.md +273 -0
  468. package/skills/geomaster/references/data-sources.md +330 -0
  469. package/skills/geomaster/references/gis-software.md +369 -0
  470. package/skills/geomaster/references/industry-applications.md +420 -0
  471. package/skills/geomaster/references/machine-learning.md +462 -0
  472. package/skills/geomaster/references/programming-languages.md +456 -0
  473. package/skills/geomaster/references/remote-sensing.md +370 -0
  474. package/skills/geomaster/references/scientific-domains.md +416 -0
  475. package/skills/geomaster/references/specialized-topics.md +428 -0
  476. package/skills/geomaster/references/troubleshooting.md +439 -0
  477. package/skills/geopandas/SKILL.md +249 -0
  478. package/skills/geopandas/references/crs-management.md +243 -0
  479. package/skills/geopandas/references/data-io.md +165 -0
  480. package/skills/geopandas/references/data-structures.md +70 -0
  481. package/skills/geopandas/references/geometric-operations.md +221 -0
  482. package/skills/geopandas/references/spatial-analysis.md +184 -0
  483. package/skills/geopandas/references/visualization.md +243 -0
  484. package/skills/get-available-resources/SKILL.md +275 -0
  485. package/skills/get-available-resources/scripts/detect_resources.py +401 -0
  486. package/skills/gget/SKILL.md +869 -0
  487. package/skills/gget/references/database_info.md +300 -0
  488. package/skills/gget/references/module_reference.md +467 -0
  489. package/skills/gget/references/workflows.md +814 -0
  490. package/skills/gget/scripts/batch_sequence_analysis.py +191 -0
  491. package/skills/gget/scripts/enrichment_pipeline.py +235 -0
  492. package/skills/gget/scripts/gene_analysis.py +161 -0
  493. package/skills/ginkgo-cloud-lab/SKILL.md +56 -0
  494. package/skills/ginkgo-cloud-lab/references/cell-free-protein-expression-optimization.md +85 -0
  495. package/skills/ginkgo-cloud-lab/references/cell-free-protein-expression-validation.md +71 -0
  496. package/skills/ginkgo-cloud-lab/references/fluorescent-pixel-art-generation.md +87 -0
  497. package/skills/glycoengineering/SKILL.md +338 -0
  498. package/skills/glycoengineering/references/glycan_databases.md +165 -0
  499. package/skills/gnomad-database/SKILL.md +395 -0
  500. package/skills/gnomad-database/references/graphql_queries.md +219 -0
  501. package/skills/gnomad-database/references/variant_interpretation.md +85 -0
  502. package/skills/gtars/SKILL.md +283 -0
  503. package/skills/gtars/references/cli.md +222 -0
  504. package/skills/gtars/references/coverage.md +172 -0
  505. package/skills/gtars/references/overlap.md +156 -0
  506. package/skills/gtars/references/python-api.md +211 -0
  507. package/skills/gtars/references/refget.md +147 -0
  508. package/skills/gtars/references/tokenizers.md +103 -0
  509. package/skills/gtex-database/SKILL.md +315 -0
  510. package/skills/gtex-database/references/api_reference.md +191 -0
  511. package/skills/gwas-database/SKILL.md +606 -0
  512. package/skills/gwas-database/references/api_reference.md +793 -0
  513. package/skills/hedgefundmonitor/SKILL.md +128 -0
  514. package/skills/hedgefundmonitor/references/api-overview.md +93 -0
  515. package/skills/hedgefundmonitor/references/datasets.md +150 -0
  516. package/skills/hedgefundmonitor/references/endpoints-combined.md +196 -0
  517. package/skills/hedgefundmonitor/references/endpoints-metadata.md +136 -0
  518. package/skills/hedgefundmonitor/references/endpoints-series-data.md +126 -0
  519. package/skills/hedgefundmonitor/references/examples.md +287 -0
  520. package/skills/hedgefundmonitor/references/parameters.md +104 -0
  521. package/skills/histolab/SKILL.md +676 -0
  522. package/skills/histolab/references/filters_preprocessing.md +514 -0
  523. package/skills/histolab/references/slide_management.md +172 -0
  524. package/skills/histolab/references/tile_extraction.md +421 -0
  525. package/skills/histolab/references/tissue_masks.md +251 -0
  526. package/skills/histolab/references/visualization.md +547 -0
  527. package/skills/hmdb-database/SKILL.md +194 -0
  528. package/skills/hmdb-database/references/hmdb_data_fields.md +267 -0
  529. package/skills/hypogenic/SKILL.md +653 -0
  530. package/skills/hypogenic/references/config_template.yaml +150 -0
  531. package/skills/hypothesis-generation/SKILL.md +297 -0
  532. package/skills/hypothesis-generation/assets/FORMATTING_GUIDE.md +672 -0
  533. package/skills/hypothesis-generation/assets/hypothesis_generation.sty +307 -0
  534. package/skills/hypothesis-generation/assets/hypothesis_report_template.tex +572 -0
  535. package/skills/hypothesis-generation/references/experimental_design_patterns.md +329 -0
  536. package/skills/hypothesis-generation/references/hypothesis_quality_criteria.md +198 -0
  537. package/skills/hypothesis-generation/references/literature_search_strategies.md +622 -0
  538. package/skills/imaging-data-commons/SKILL.md +843 -0
  539. package/skills/imaging-data-commons/references/bigquery_guide.md +556 -0
  540. package/skills/imaging-data-commons/references/cli_guide.md +272 -0
  541. package/skills/imaging-data-commons/references/clinical_data_guide.md +324 -0
  542. package/skills/imaging-data-commons/references/cloud_storage_guide.md +333 -0
  543. package/skills/imaging-data-commons/references/dicomweb_guide.md +399 -0
  544. package/skills/imaging-data-commons/references/digital_pathology_guide.md +403 -0
  545. package/skills/imaging-data-commons/references/index_tables_guide.md +146 -0
  546. package/skills/imaging-data-commons/references/sql_patterns.md +207 -0
  547. package/skills/imaging-data-commons/references/use_cases.md +186 -0
  548. package/skills/infographics/SKILL.md +563 -0
  549. package/skills/infographics/references/color_palettes.md +496 -0
  550. package/skills/infographics/references/design_principles.md +636 -0
  551. package/skills/infographics/references/infographic_types.md +907 -0
  552. package/skills/infographics/scripts/generate_infographic.py +234 -0
  553. package/skills/infographics/scripts/generate_infographic_ai.py +1290 -0
  554. package/skills/interpro-database/SKILL.md +305 -0
  555. package/skills/interpro-database/references/domain_analysis.md +159 -0
  556. package/skills/iso-13485-certification/SKILL.md +678 -0
  557. package/skills/iso-13485-certification/assets/templates/procedures/CAPA-procedure-template.md +453 -0
  558. package/skills/iso-13485-certification/assets/templates/procedures/document-control-procedure-template.md +567 -0
  559. package/skills/iso-13485-certification/assets/templates/quality-manual-template.md +521 -0
  560. package/skills/iso-13485-certification/references/gap-analysis-checklist.md +568 -0
  561. package/skills/iso-13485-certification/references/iso-13485-requirements.md +610 -0
  562. package/skills/iso-13485-certification/references/mandatory-documents.md +606 -0
  563. package/skills/iso-13485-certification/references/quality-manual-guide.md +688 -0
  564. package/skills/iso-13485-certification/scripts/gap_analyzer.py +440 -0
  565. package/skills/jaspar-database/SKILL.md +351 -0
  566. package/skills/jaspar-database/references/api_reference.md +182 -0
  567. package/skills/jobs/SKILL.md +10 -0
  568. package/skills/kegg-database/SKILL.md +375 -0
  569. package/skills/kegg-database/references/kegg_reference.md +326 -0
  570. package/skills/kegg-database/scripts/kegg_api.py +251 -0
  571. package/skills/labarchive-integration/SKILL.md +266 -0
  572. package/skills/labarchive-integration/references/api_reference.md +342 -0
  573. package/skills/labarchive-integration/references/authentication_guide.md +357 -0
  574. package/skills/labarchive-integration/references/integrations.md +425 -0
  575. package/skills/labarchive-integration/scripts/entry_operations.py +334 -0
  576. package/skills/labarchive-integration/scripts/notebook_operations.py +269 -0
  577. package/skills/labarchive-integration/scripts/setup_config.py +205 -0
  578. package/skills/lamindb/SKILL.md +388 -0
  579. package/skills/lamindb/references/annotation-validation.md +513 -0
  580. package/skills/lamindb/references/core-concepts.md +380 -0
  581. package/skills/lamindb/references/data-management.md +433 -0
  582. package/skills/lamindb/references/integrations.md +642 -0
  583. package/skills/lamindb/references/ontologies.md +497 -0
  584. package/skills/lamindb/references/setup-deployment.md +733 -0
  585. package/skills/latchbio-integration/SKILL.md +351 -0
  586. package/skills/latchbio-integration/references/data-management.md +427 -0
  587. package/skills/latchbio-integration/references/resource-configuration.md +429 -0
  588. package/skills/latchbio-integration/references/verified-workflows.md +487 -0
  589. package/skills/latchbio-integration/references/workflow-creation.md +254 -0
  590. package/skills/latex-posters/SKILL.md +1602 -0
  591. package/skills/latex-posters/assets/baposter_template.tex +257 -0
  592. package/skills/latex-posters/assets/beamerposter_template.tex +244 -0
  593. package/skills/latex-posters/assets/poster_quality_checklist.md +358 -0
  594. package/skills/latex-posters/assets/tikzposter_template.tex +251 -0
  595. package/skills/latex-posters/references/README.md +417 -0
  596. package/skills/latex-posters/references/latex_poster_packages.md +745 -0
  597. package/skills/latex-posters/references/poster_content_guide.md +748 -0
  598. package/skills/latex-posters/references/poster_design_principles.md +806 -0
  599. package/skills/latex-posters/references/poster_layout_design.md +900 -0
  600. package/skills/latex-posters/scripts/review_poster.sh +214 -0
  601. package/skills/literature-review/SKILL.md +637 -0
  602. package/skills/literature-review/assets/review_template.md +412 -0
  603. package/skills/literature-review/references/citation_styles.md +166 -0
  604. package/skills/literature-review/references/database_strategies.md +455 -0
  605. package/skills/literature-review/scripts/generate_pdf.py +176 -0
  606. package/skills/literature-review/scripts/search_databases.py +303 -0
  607. package/skills/literature-review/scripts/verify_citations.py +222 -0
  608. package/skills/markdown-mermaid-writing/SKILL.md +327 -0
  609. package/skills/markdown-mermaid-writing/assets/examples/example-research-report.md +221 -0
  610. package/skills/markdown-mermaid-writing/references/diagrams/architecture.md +108 -0
  611. package/skills/markdown-mermaid-writing/references/diagrams/block.md +177 -0
  612. package/skills/markdown-mermaid-writing/references/diagrams/c4.md +136 -0
  613. package/skills/markdown-mermaid-writing/references/diagrams/class.md +246 -0
  614. package/skills/markdown-mermaid-writing/references/diagrams/complex_examples.md +384 -0
  615. package/skills/markdown-mermaid-writing/references/diagrams/er.md +222 -0
  616. package/skills/markdown-mermaid-writing/references/diagrams/flowchart.md +177 -0
  617. package/skills/markdown-mermaid-writing/references/diagrams/gantt.md +138 -0
  618. package/skills/markdown-mermaid-writing/references/diagrams/git_graph.md +74 -0
  619. package/skills/markdown-mermaid-writing/references/diagrams/kanban.md +107 -0
  620. package/skills/markdown-mermaid-writing/references/diagrams/mindmap.md +74 -0
  621. package/skills/markdown-mermaid-writing/references/diagrams/packet.md +55 -0
  622. package/skills/markdown-mermaid-writing/references/diagrams/pie.md +52 -0
  623. package/skills/markdown-mermaid-writing/references/diagrams/quadrant.md +66 -0
  624. package/skills/markdown-mermaid-writing/references/diagrams/radar.md +59 -0
  625. package/skills/markdown-mermaid-writing/references/diagrams/requirement.md +88 -0
  626. package/skills/markdown-mermaid-writing/references/diagrams/sankey.md +71 -0
  627. package/skills/markdown-mermaid-writing/references/diagrams/sequence.md +174 -0
  628. package/skills/markdown-mermaid-writing/references/diagrams/state.md +150 -0
  629. package/skills/markdown-mermaid-writing/references/diagrams/timeline.md +96 -0
  630. package/skills/markdown-mermaid-writing/references/diagrams/treemap.md +66 -0
  631. package/skills/markdown-mermaid-writing/references/diagrams/user_journey.md +108 -0
  632. package/skills/markdown-mermaid-writing/references/diagrams/xy_chart.md +53 -0
  633. package/skills/markdown-mermaid-writing/references/diagrams/zenuml.md +71 -0
  634. package/skills/markdown-mermaid-writing/references/markdown_style_guide.md +733 -0
  635. package/skills/markdown-mermaid-writing/references/mermaid_style_guide.md +458 -0
  636. package/skills/markdown-mermaid-writing/templates/decision_record.md +211 -0
  637. package/skills/markdown-mermaid-writing/templates/how_to_guide.md +275 -0
  638. package/skills/markdown-mermaid-writing/templates/issue.md +303 -0
  639. package/skills/markdown-mermaid-writing/templates/kanban.md +223 -0
  640. package/skills/markdown-mermaid-writing/templates/presentation.md +312 -0
  641. package/skills/markdown-mermaid-writing/templates/project_documentation.md +412 -0
  642. package/skills/markdown-mermaid-writing/templates/pull_request.md +319 -0
  643. package/skills/markdown-mermaid-writing/templates/research_paper.md +304 -0
  644. package/skills/markdown-mermaid-writing/templates/status_report.md +185 -0
  645. package/skills/market-research-reports/SKILL.md +905 -0
  646. package/skills/market-research-reports/assets/FORMATTING_GUIDE.md +428 -0
  647. package/skills/market-research-reports/assets/market_report_template.tex +1380 -0
  648. package/skills/market-research-reports/assets/market_research.sty +564 -0
  649. package/skills/market-research-reports/references/data_analysis_patterns.md +548 -0
  650. package/skills/market-research-reports/references/report_structure_guide.md +999 -0
  651. package/skills/market-research-reports/references/visual_generation_guide.md +1077 -0
  652. package/skills/market-research-reports/scripts/generate_market_visuals.py +529 -0
  653. package/skills/markitdown/SKILL.md +488 -0
  654. package/skills/markitdown/assets/example_usage.md +463 -0
  655. package/skills/markitdown/references/api_reference.md +396 -0
  656. package/skills/markitdown/references/file_formats.md +542 -0
  657. package/skills/markitdown/scripts/batch_convert.py +228 -0
  658. package/skills/markitdown/scripts/convert_literature.py +283 -0
  659. package/skills/markitdown/scripts/convert_with_ai.py +240 -0
  660. package/skills/matchms/SKILL.md +201 -0
  661. package/skills/matchms/references/filtering.md +288 -0
  662. package/skills/matchms/references/importing_exporting.md +416 -0
  663. package/skills/matchms/references/similarity.md +380 -0
  664. package/skills/matchms/references/workflows.md +647 -0
  665. package/skills/matlab/SKILL.md +376 -0
  666. package/skills/matlab/references/data-import-export.md +479 -0
  667. package/skills/matlab/references/executing-scripts.md +444 -0
  668. package/skills/matlab/references/graphics-visualization.md +579 -0
  669. package/skills/matlab/references/mathematics.md +553 -0
  670. package/skills/matlab/references/matrices-arrays.md +349 -0
  671. package/skills/matlab/references/octave-compatibility.md +544 -0
  672. package/skills/matlab/references/programming.md +672 -0
  673. package/skills/matlab/references/python-integration.md +433 -0
  674. package/skills/matplotlib/SKILL.md +359 -0
  675. package/skills/matplotlib/references/api_reference.md +412 -0
  676. package/skills/matplotlib/references/common_issues.md +563 -0
  677. package/skills/matplotlib/references/plot_types.md +476 -0
  678. package/skills/matplotlib/references/styling_guide.md +589 -0
  679. package/skills/matplotlib/scripts/plot_template.py +401 -0
  680. package/skills/matplotlib/scripts/style_configurator.py +409 -0
  681. package/skills/medchem/SKILL.md +404 -0
  682. package/skills/medchem/references/api_guide.md +600 -0
  683. package/skills/medchem/references/rules_catalog.md +604 -0
  684. package/skills/medchem/scripts/filter_molecules.py +418 -0
  685. package/skills/metabolomics-workbench-database/SKILL.md +257 -0
  686. package/skills/metabolomics-workbench-database/references/api_reference.md +494 -0
  687. package/skills/modal/SKILL.md +406 -0
  688. package/skills/modal/references/api_reference.md +187 -0
  689. package/skills/modal/references/examples.md +266 -0
  690. package/skills/modal/references/functions.md +260 -0
  691. package/skills/modal/references/getting-started.md +175 -0
  692. package/skills/modal/references/gpu.md +174 -0
  693. package/skills/modal/references/images.md +259 -0
  694. package/skills/modal/references/resources.md +117 -0
  695. package/skills/modal/references/scaling.md +173 -0
  696. package/skills/modal/references/scheduled-jobs.md +143 -0
  697. package/skills/modal/references/secrets.md +119 -0
  698. package/skills/modal/references/volumes.md +247 -0
  699. package/skills/modal/references/web-endpoints.md +254 -0
  700. package/skills/modal-compute/SKILL.md +56 -0
  701. package/skills/molecular-dynamics/SKILL.md +457 -0
  702. package/skills/molecular-dynamics/references/mdanalysis_analysis.md +208 -0
  703. package/skills/molfeat/SKILL.md +509 -0
  704. package/skills/molfeat/references/api_reference.md +428 -0
  705. package/skills/molfeat/references/available_featurizers.md +333 -0
  706. package/skills/molfeat/references/examples.md +723 -0
  707. package/skills/monarch-database/SKILL.md +372 -0
  708. package/skills/monarch-database/references/phenotype_ontology.md +160 -0
  709. package/skills/networkx/SKILL.md +435 -0
  710. package/skills/networkx/references/algorithms.md +383 -0
  711. package/skills/networkx/references/generators.md +378 -0
  712. package/skills/networkx/references/graph-basics.md +283 -0
  713. package/skills/networkx/references/io.md +441 -0
  714. package/skills/networkx/references/visualization.md +529 -0
  715. package/skills/neurokit2/SKILL.md +354 -0
  716. package/skills/neurokit2/references/bio_module.md +417 -0
  717. package/skills/neurokit2/references/complexity.md +715 -0
  718. package/skills/neurokit2/references/ecg_cardiac.md +355 -0
  719. package/skills/neurokit2/references/eda.md +497 -0
  720. package/skills/neurokit2/references/eeg.md +506 -0
  721. package/skills/neurokit2/references/emg.md +408 -0
  722. package/skills/neurokit2/references/eog.md +407 -0
  723. package/skills/neurokit2/references/epochs_events.md +471 -0
  724. package/skills/neurokit2/references/hrv.md +480 -0
  725. package/skills/neurokit2/references/ppg.md +413 -0
  726. package/skills/neurokit2/references/rsp.md +510 -0
  727. package/skills/neurokit2/references/signal_processing.md +648 -0
  728. package/skills/neuropixels-analysis/SKILL.md +348 -0
  729. package/skills/neuropixels-analysis/assets/analysis_template.py +271 -0
  730. package/skills/neuropixels-analysis/references/AI_CURATION.md +345 -0
  731. package/skills/neuropixels-analysis/references/ANALYSIS.md +392 -0
  732. package/skills/neuropixels-analysis/references/AUTOMATED_CURATION.md +358 -0
  733. package/skills/neuropixels-analysis/references/MOTION_CORRECTION.md +323 -0
  734. package/skills/neuropixels-analysis/references/PREPROCESSING.md +273 -0
  735. package/skills/neuropixels-analysis/references/QUALITY_METRICS.md +359 -0
  736. package/skills/neuropixels-analysis/references/SPIKE_SORTING.md +339 -0
  737. package/skills/neuropixels-analysis/references/api_reference.md +415 -0
  738. package/skills/neuropixels-analysis/references/plotting_guide.md +454 -0
  739. package/skills/neuropixels-analysis/references/standard_workflow.md +385 -0
  740. package/skills/neuropixels-analysis/scripts/compute_metrics.py +178 -0
  741. package/skills/neuropixels-analysis/scripts/explore_recording.py +168 -0
  742. package/skills/neuropixels-analysis/scripts/export_to_phy.py +79 -0
  743. package/skills/neuropixels-analysis/scripts/neuropixels_pipeline.py +432 -0
  744. package/skills/neuropixels-analysis/scripts/preprocess_recording.py +122 -0
  745. package/skills/neuropixels-analysis/scripts/run_sorting.py +98 -0
  746. package/skills/offer-k-dense-web/SKILL.md +21 -0
  747. package/skills/omero-integration/SKILL.md +249 -0
  748. package/skills/omero-integration/references/advanced.md +631 -0
  749. package/skills/omero-integration/references/connection.md +369 -0
  750. package/skills/omero-integration/references/data_access.md +544 -0
  751. package/skills/omero-integration/references/image_processing.md +665 -0
  752. package/skills/omero-integration/references/metadata.md +688 -0
  753. package/skills/omero-integration/references/rois.md +648 -0
  754. package/skills/omero-integration/references/scripts.md +637 -0
  755. package/skills/omero-integration/references/tables.md +532 -0
  756. package/skills/open-notebook/SKILL.md +289 -0
  757. package/skills/open-notebook/references/api_reference.md +715 -0
  758. package/skills/open-notebook/references/architecture.md +163 -0
  759. package/skills/open-notebook/references/configuration.md +226 -0
  760. package/skills/open-notebook/references/examples.md +290 -0
  761. package/skills/open-notebook/scripts/chat_interaction.py +190 -0
  762. package/skills/open-notebook/scripts/notebook_management.py +142 -0
  763. package/skills/open-notebook/scripts/source_ingestion.py +160 -0
  764. package/skills/open-notebook/scripts/test_open_notebook_skill.py +423 -0
  765. package/skills/openalex-database/SKILL.md +496 -0
  766. package/skills/openalex-database/references/api_guide.md +371 -0
  767. package/skills/openalex-database/references/common_queries.md +381 -0
  768. package/skills/openalex-database/scripts/openalex_client.py +337 -0
  769. package/skills/openalex-database/scripts/query_helpers.py +306 -0
  770. package/skills/opentargets-database/SKILL.md +371 -0
  771. package/skills/opentargets-database/references/api_reference.md +249 -0
  772. package/skills/opentargets-database/references/evidence_types.md +306 -0
  773. package/skills/opentargets-database/references/target_annotations.md +401 -0
  774. package/skills/opentargets-database/scripts/query_opentargets.py +403 -0
  775. package/skills/opentrons-integration/SKILL.md +571 -0
  776. package/skills/opentrons-integration/references/api_reference.md +366 -0
  777. package/skills/opentrons-integration/scripts/basic_protocol_template.py +67 -0
  778. package/skills/opentrons-integration/scripts/pcr_setup_template.py +154 -0
  779. package/skills/opentrons-integration/scripts/serial_dilution_template.py +96 -0
  780. package/skills/paper-2-web/SKILL.md +495 -0
  781. package/skills/paper-2-web/references/installation.md +141 -0
  782. package/skills/paper-2-web/references/paper2poster.md +346 -0
  783. package/skills/paper-2-web/references/paper2video.md +305 -0
  784. package/skills/paper-2-web/references/paper2web.md +187 -0
  785. package/skills/paper-2-web/references/usage_examples.md +436 -0
  786. package/skills/paper-code-audit/SKILL.md +12 -0
  787. package/skills/paper-writing/SKILL.md +12 -0
  788. package/skills/parallel-web/SKILL.md +314 -0
  789. package/skills/parallel-web/references/api_reference.md +244 -0
  790. package/skills/parallel-web/references/deep_research_guide.md +362 -0
  791. package/skills/parallel-web/references/extraction_patterns.md +338 -0
  792. package/skills/parallel-web/references/search_best_practices.md +297 -0
  793. package/skills/parallel-web/references/workflow_recipes.md +456 -0
  794. package/skills/parallel-web/scripts/parallel_web.py +568 -0
  795. package/skills/parse-document/SKILL.md +139 -0
  796. package/skills/pathml/SKILL.md +164 -0
  797. package/skills/pathml/references/data_management.md +742 -0
  798. package/skills/pathml/references/graphs.md +653 -0
  799. package/skills/pathml/references/image_loading.md +448 -0
  800. package/skills/pathml/references/machine_learning.md +725 -0
  801. package/skills/pathml/references/multiparametric.md +686 -0
  802. package/skills/pathml/references/preprocessing.md +722 -0
  803. package/skills/pdb-database/SKILL.md +307 -0
  804. package/skills/pdb-database/references/api_reference.md +617 -0
  805. package/skills/pdf/LICENSE.txt +30 -0
  806. package/skills/pdf/SKILL.md +314 -0
  807. package/skills/pdf/forms.md +294 -0
  808. package/skills/pdf/reference.md +612 -0
  809. package/skills/pdf/scripts/check_bounding_boxes.py +65 -0
  810. package/skills/pdf/scripts/check_fillable_fields.py +11 -0
  811. package/skills/pdf/scripts/convert_pdf_to_images.py +33 -0
  812. package/skills/pdf/scripts/create_validation_image.py +37 -0
  813. package/skills/pdf/scripts/extract_form_field_info.py +122 -0
  814. package/skills/pdf/scripts/extract_form_structure.py +115 -0
  815. package/skills/pdf/scripts/fill_fillable_fields.py +98 -0
  816. package/skills/pdf/scripts/fill_pdf_form_with_annotations.py +107 -0
  817. package/skills/peer-review/SKILL.md +569 -0
  818. package/skills/peer-review/references/common_issues.md +552 -0
  819. package/skills/peer-review/references/reporting_standards.md +290 -0
  820. package/skills/pennylane/SKILL.md +224 -0
  821. package/skills/pennylane/references/advanced_features.md +667 -0
  822. package/skills/pennylane/references/devices_backends.md +596 -0
  823. package/skills/pennylane/references/getting_started.md +227 -0
  824. package/skills/pennylane/references/optimization.md +671 -0
  825. package/skills/pennylane/references/quantum_chemistry.md +567 -0
  826. package/skills/pennylane/references/quantum_circuits.md +437 -0
  827. package/skills/pennylane/references/quantum_ml.md +571 -0
  828. package/skills/perplexity-search/SKILL.md +446 -0
  829. package/skills/perplexity-search/assets/.env.example +16 -0
  830. package/skills/perplexity-search/references/model_comparison.md +386 -0
  831. package/skills/perplexity-search/references/openrouter_setup.md +454 -0
  832. package/skills/perplexity-search/references/search_strategies.md +258 -0
  833. package/skills/perplexity-search/scripts/perplexity_search.py +277 -0
  834. package/skills/perplexity-search/scripts/setup_env.py +171 -0
  835. package/skills/phylogenetics/SKILL.md +404 -0
  836. package/skills/phylogenetics/references/iqtree_inference.md +181 -0
  837. package/skills/phylogenetics/scripts/phylogenetic_analysis.py +270 -0
  838. package/skills/plotly/SKILL.md +265 -0
  839. package/skills/plotly/references/chart-types.md +488 -0
  840. package/skills/plotly/references/export-interactivity.md +453 -0
  841. package/skills/plotly/references/graph-objects.md +302 -0
  842. package/skills/plotly/references/layouts-styling.md +457 -0
  843. package/skills/plotly/references/plotly-express.md +213 -0
  844. package/skills/polars/SKILL.md +385 -0
  845. package/skills/polars/references/best_practices.md +649 -0
  846. package/skills/polars/references/core_concepts.md +378 -0
  847. package/skills/polars/references/io_guide.md +557 -0
  848. package/skills/polars/references/operations.md +602 -0
  849. package/skills/polars/references/pandas_migration.md +417 -0
  850. package/skills/polars/references/transformations.md +549 -0
  851. package/skills/polars-bio/SKILL.md +374 -0
  852. package/skills/polars-bio/references/bioframe_migration.md +250 -0
  853. package/skills/polars-bio/references/configuration.md +175 -0
  854. package/skills/polars-bio/references/file_io.md +414 -0
  855. package/skills/polars-bio/references/interval_operations.md +362 -0
  856. package/skills/polars-bio/references/pileup_operations.md +176 -0
  857. package/skills/polars-bio/references/sql_processing.md +224 -0
  858. package/skills/pptx/LICENSE.txt +30 -0
  859. package/skills/pptx/SKILL.md +232 -0
  860. package/skills/pptx/editing.md +205 -0
  861. package/skills/pptx/pptxgenjs.md +420 -0
  862. package/skills/pptx/scripts/__init__.py +0 -0
  863. package/skills/pptx/scripts/add_slide.py +195 -0
  864. package/skills/pptx/scripts/clean.py +286 -0
  865. package/skills/pptx/scripts/office/helpers/__init__.py +0 -0
  866. package/skills/pptx/scripts/office/helpers/merge_runs.py +199 -0
  867. package/skills/pptx/scripts/office/helpers/simplify_redlines.py +197 -0
  868. package/skills/pptx/scripts/office/pack.py +159 -0
  869. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  870. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  871. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  872. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  873. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  874. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  875. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  876. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  877. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  878. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  879. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  880. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  881. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  882. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  883. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  884. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  885. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  886. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  887. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  888. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  889. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  890. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  891. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  892. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  893. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  894. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  895. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  896. package/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  897. package/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  898. package/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  899. package/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  900. package/skills/pptx/scripts/office/schemas/mce/mc.xsd +75 -0
  901. package/skills/pptx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
  902. package/skills/pptx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
  903. package/skills/pptx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
  904. package/skills/pptx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
  905. package/skills/pptx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
  906. package/skills/pptx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  907. package/skills/pptx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
  908. package/skills/pptx/scripts/office/soffice.py +183 -0
  909. package/skills/pptx/scripts/office/unpack.py +132 -0
  910. package/skills/pptx/scripts/office/validate.py +111 -0
  911. package/skills/pptx/scripts/office/validators/__init__.py +15 -0
  912. package/skills/pptx/scripts/office/validators/base.py +847 -0
  913. package/skills/pptx/scripts/office/validators/docx.py +446 -0
  914. package/skills/pptx/scripts/office/validators/pptx.py +275 -0
  915. package/skills/pptx/scripts/office/validators/redlining.py +247 -0
  916. package/skills/pptx/scripts/thumbnail.py +289 -0
  917. package/skills/pptx-posters/SKILL.md +414 -0
  918. package/skills/pptx-posters/assets/poster_html_template.html +257 -0
  919. package/skills/pptx-posters/assets/poster_quality_checklist.md +358 -0
  920. package/skills/pptx-posters/references/poster_content_guide.md +748 -0
  921. package/skills/pptx-posters/references/poster_design_principles.md +806 -0
  922. package/skills/pptx-posters/references/poster_layout_design.md +900 -0
  923. package/skills/preview/SKILL.md +27 -0
  924. package/skills/primekg/SKILL.md +97 -0
  925. package/skills/primekg/scripts/query_primekg.py +123 -0
  926. package/skills/protocolsio-integration/SKILL.md +419 -0
  927. package/skills/protocolsio-integration/references/additional_features.md +387 -0
  928. package/skills/protocolsio-integration/references/authentication.md +100 -0
  929. package/skills/protocolsio-integration/references/discussions.md +225 -0
  930. package/skills/protocolsio-integration/references/file_manager.md +412 -0
  931. package/skills/protocolsio-integration/references/protocols_api.md +294 -0
  932. package/skills/protocolsio-integration/references/workspaces.md +293 -0
  933. package/skills/pubchem-database/SKILL.md +572 -0
  934. package/skills/pubchem-database/references/api_reference.md +440 -0
  935. package/skills/pubchem-database/scripts/bioactivity_query.py +367 -0
  936. package/skills/pubchem-database/scripts/compound_search.py +297 -0
  937. package/skills/pubmed-database/SKILL.md +458 -0
  938. package/skills/pubmed-database/references/api_reference.md +298 -0
  939. package/skills/pubmed-database/references/common_queries.md +453 -0
  940. package/skills/pubmed-database/references/search_syntax.md +436 -0
  941. package/skills/pufferlib/SKILL.md +434 -0
  942. package/skills/pufferlib/references/environments.md +508 -0
  943. package/skills/pufferlib/references/integration.md +621 -0
  944. package/skills/pufferlib/references/policies.md +653 -0
  945. package/skills/pufferlib/references/training.md +360 -0
  946. package/skills/pufferlib/references/vectorization.md +557 -0
  947. package/skills/pufferlib/scripts/env_template.py +340 -0
  948. package/skills/pufferlib/scripts/train_template.py +239 -0
  949. package/skills/pydeseq2/SKILL.md +557 -0
  950. package/skills/pydeseq2/references/api_reference.md +228 -0
  951. package/skills/pydeseq2/references/workflow_guide.md +582 -0
  952. package/skills/pydeseq2/scripts/run_deseq2_analysis.py +353 -0
  953. package/skills/pydicom/SKILL.md +432 -0
  954. package/skills/pydicom/references/common_tags.md +228 -0
  955. package/skills/pydicom/references/transfer_syntaxes.md +352 -0
  956. package/skills/pydicom/scripts/anonymize_dicom.py +137 -0
  957. package/skills/pydicom/scripts/dicom_to_image.py +172 -0
  958. package/skills/pydicom/scripts/extract_metadata.py +173 -0
  959. package/skills/pyhealth/SKILL.md +489 -0
  960. package/skills/pyhealth/references/datasets.md +178 -0
  961. package/skills/pyhealth/references/medical_coding.md +284 -0
  962. package/skills/pyhealth/references/models.md +594 -0
  963. package/skills/pyhealth/references/preprocessing.md +638 -0
  964. package/skills/pyhealth/references/tasks.md +379 -0
  965. package/skills/pyhealth/references/training_evaluation.md +648 -0
  966. package/skills/pylabrobot/SKILL.md +183 -0
  967. package/skills/pylabrobot/references/analytical-equipment.md +464 -0
  968. package/skills/pylabrobot/references/hardware-backends.md +480 -0
  969. package/skills/pylabrobot/references/liquid-handling.md +403 -0
  970. package/skills/pylabrobot/references/material-handling.md +620 -0
  971. package/skills/pylabrobot/references/resources.md +489 -0
  972. package/skills/pylabrobot/references/visualization.md +532 -0
  973. package/skills/pymatgen/SKILL.md +689 -0
  974. package/skills/pymatgen/references/analysis_modules.md +530 -0
  975. package/skills/pymatgen/references/core_classes.md +318 -0
  976. package/skills/pymatgen/references/io_formats.md +469 -0
  977. package/skills/pymatgen/references/materials_project_api.md +517 -0
  978. package/skills/pymatgen/references/transformations_workflows.md +591 -0
  979. package/skills/pymatgen/scripts/phase_diagram_generator.py +233 -0
  980. package/skills/pymatgen/scripts/structure_analyzer.py +266 -0
  981. package/skills/pymatgen/scripts/structure_converter.py +169 -0
  982. package/skills/pymc/SKILL.md +570 -0
  983. package/skills/pymc/assets/hierarchical_model_template.py +333 -0
  984. package/skills/pymc/assets/linear_regression_template.py +241 -0
  985. package/skills/pymc/references/distributions.md +320 -0
  986. package/skills/pymc/references/sampling_inference.md +424 -0
  987. package/skills/pymc/references/workflows.md +526 -0
  988. package/skills/pymc/scripts/model_comparison.py +387 -0
  989. package/skills/pymc/scripts/model_diagnostics.py +350 -0
  990. package/skills/pymoo/SKILL.md +569 -0
  991. package/skills/pymoo/references/algorithms.md +180 -0
  992. package/skills/pymoo/references/constraints_mcdm.md +417 -0
  993. package/skills/pymoo/references/operators.md +345 -0
  994. package/skills/pymoo/references/problems.md +265 -0
  995. package/skills/pymoo/references/visualization.md +353 -0
  996. package/skills/pymoo/scripts/custom_problem_example.py +181 -0
  997. package/skills/pymoo/scripts/decision_making_example.py +161 -0
  998. package/skills/pymoo/scripts/many_objective_example.py +72 -0
  999. package/skills/pymoo/scripts/multi_objective_example.py +63 -0
  1000. package/skills/pymoo/scripts/single_objective_example.py +59 -0
  1001. package/skills/pyopenms/SKILL.md +215 -0
  1002. package/skills/pyopenms/references/data_structures.md +497 -0
  1003. package/skills/pyopenms/references/feature_detection.md +410 -0
  1004. package/skills/pyopenms/references/file_io.md +349 -0
  1005. package/skills/pyopenms/references/identification.md +422 -0
  1006. package/skills/pyopenms/references/metabolomics.md +482 -0
  1007. package/skills/pyopenms/references/signal_processing.md +433 -0
  1008. package/skills/pysam/SKILL.md +263 -0
  1009. package/skills/pysam/references/alignment_files.md +280 -0
  1010. package/skills/pysam/references/common_workflows.md +520 -0
  1011. package/skills/pysam/references/sequence_files.md +407 -0
  1012. package/skills/pysam/references/variant_files.md +365 -0
  1013. package/skills/pytdc/SKILL.md +458 -0
  1014. package/skills/pytdc/references/datasets.md +246 -0
  1015. package/skills/pytdc/references/oracles.md +400 -0
  1016. package/skills/pytdc/references/utilities.md +684 -0
  1017. package/skills/pytdc/scripts/benchmark_evaluation.py +327 -0
  1018. package/skills/pytdc/scripts/load_and_split_data.py +214 -0
  1019. package/skills/pytdc/scripts/molecular_generation.py +404 -0
  1020. package/skills/pytorch-lightning/SKILL.md +172 -0
  1021. package/skills/pytorch-lightning/references/best_practices.md +724 -0
  1022. package/skills/pytorch-lightning/references/callbacks.md +564 -0
  1023. package/skills/pytorch-lightning/references/data_module.md +565 -0
  1024. package/skills/pytorch-lightning/references/distributed_training.md +643 -0
  1025. package/skills/pytorch-lightning/references/lightning_module.md +487 -0
  1026. package/skills/pytorch-lightning/references/logging.md +654 -0
  1027. package/skills/pytorch-lightning/references/trainer.md +641 -0
  1028. package/skills/pytorch-lightning/scripts/quick_trainer_setup.py +454 -0
  1029. package/skills/pytorch-lightning/scripts/template_datamodule.py +328 -0
  1030. package/skills/pytorch-lightning/scripts/template_lightning_module.py +219 -0
  1031. package/skills/pyzotero/SKILL.md +111 -0
  1032. package/skills/pyzotero/references/authentication.md +90 -0
  1033. package/skills/pyzotero/references/cli.md +100 -0
  1034. package/skills/pyzotero/references/collections.md +113 -0
  1035. package/skills/pyzotero/references/error-handling.md +103 -0
  1036. package/skills/pyzotero/references/exports.md +102 -0
  1037. package/skills/pyzotero/references/files-attachments.md +97 -0
  1038. package/skills/pyzotero/references/full-text.md +68 -0
  1039. package/skills/pyzotero/references/pagination.md +79 -0
  1040. package/skills/pyzotero/references/read-api.md +137 -0
  1041. package/skills/pyzotero/references/saved-searches.md +77 -0
  1042. package/skills/pyzotero/references/search-params.md +90 -0
  1043. package/skills/pyzotero/references/tags.md +87 -0
  1044. package/skills/pyzotero/references/write-api.md +123 -0
  1045. package/skills/qiskit/SKILL.md +273 -0
  1046. package/skills/qiskit/references/algorithms.md +607 -0
  1047. package/skills/qiskit/references/backends.md +433 -0
  1048. package/skills/qiskit/references/circuits.md +197 -0
  1049. package/skills/qiskit/references/patterns.md +533 -0
  1050. package/skills/qiskit/references/primitives.md +277 -0
  1051. package/skills/qiskit/references/setup.md +99 -0
  1052. package/skills/qiskit/references/transpilation.md +286 -0
  1053. package/skills/qiskit/references/visualization.md +415 -0
  1054. package/skills/qutip/SKILL.md +316 -0
  1055. package/skills/qutip/references/advanced.md +555 -0
  1056. package/skills/qutip/references/analysis.md +523 -0
  1057. package/skills/qutip/references/core_concepts.md +293 -0
  1058. package/skills/qutip/references/time_evolution.md +348 -0
  1059. package/skills/qutip/references/visualization.md +431 -0
  1060. package/skills/rdkit/SKILL.md +778 -0
  1061. package/skills/rdkit/references/api_reference.md +432 -0
  1062. package/skills/rdkit/references/descriptors_reference.md +595 -0
  1063. package/skills/rdkit/references/smarts_patterns.md +668 -0
  1064. package/skills/rdkit/scripts/molecular_properties.py +243 -0
  1065. package/skills/rdkit/scripts/similarity_search.py +297 -0
  1066. package/skills/rdkit/scripts/substructure_filter.py +386 -0
  1067. package/skills/reactome-database/SKILL.md +276 -0
  1068. package/skills/reactome-database/references/api_reference.md +465 -0
  1069. package/skills/reactome-database/scripts/reactome_query.py +286 -0
  1070. package/skills/replication/SKILL.md +14 -0
  1071. package/skills/research-grants/SKILL.md +955 -0
  1072. package/skills/research-grants/assets/budget_justification_template.md +453 -0
  1073. package/skills/research-grants/assets/nih_specific_aims_template.md +166 -0
  1074. package/skills/research-grants/assets/nsf_project_summary_template.md +92 -0
  1075. package/skills/research-grants/references/README.md +285 -0
  1076. package/skills/research-grants/references/broader_impacts.md +392 -0
  1077. package/skills/research-grants/references/darpa_guidelines.md +636 -0
  1078. package/skills/research-grants/references/doe_guidelines.md +586 -0
  1079. package/skills/research-grants/references/nih_guidelines.md +851 -0
  1080. package/skills/research-grants/references/nsf_guidelines.md +570 -0
  1081. package/skills/research-grants/references/nstc_guidelines.md +733 -0
  1082. package/skills/research-grants/references/specific_aims_guide.md +458 -0
  1083. package/skills/research-lookup/README.md +156 -0
  1084. package/skills/research-lookup/SKILL.md +413 -0
  1085. package/skills/research-lookup/examples.py +174 -0
  1086. package/skills/research-lookup/lookup.py +187 -0
  1087. package/skills/research-lookup/research_lookup.py +566 -0
  1088. package/skills/research-lookup/scripts/research_lookup.py +566 -0
  1089. package/skills/rowan/SKILL.md +427 -0
  1090. package/skills/rowan/references/api_reference.md +413 -0
  1091. package/skills/rowan/references/molecule_handling.md +429 -0
  1092. package/skills/rowan/references/proteins_and_organization.md +499 -0
  1093. package/skills/rowan/references/rdkit_native.md +438 -0
  1094. package/skills/rowan/references/results_interpretation.md +481 -0
  1095. package/skills/rowan/references/workflow_types.md +591 -0
  1096. package/skills/runpod-compute/SKILL.md +48 -0
  1097. package/skills/scanpy/SKILL.md +384 -0
  1098. package/skills/scanpy/assets/analysis_template.py +295 -0
  1099. package/skills/scanpy/references/api_reference.md +251 -0
  1100. package/skills/scanpy/references/plotting_guide.md +352 -0
  1101. package/skills/scanpy/references/standard_workflow.md +206 -0
  1102. package/skills/scanpy/scripts/qc_analysis.py +200 -0
  1103. package/skills/scholar-evaluation/SKILL.md +298 -0
  1104. package/skills/scholar-evaluation/references/evaluation_framework.md +663 -0
  1105. package/skills/scholar-evaluation/scripts/calculate_scores.py +378 -0
  1106. package/skills/scientific-brainstorming/SKILL.md +189 -0
  1107. package/skills/scientific-brainstorming/references/brainstorming_methods.md +326 -0
  1108. package/skills/scientific-critical-thinking/SKILL.md +570 -0
  1109. package/skills/scientific-critical-thinking/references/common_biases.md +364 -0
  1110. package/skills/scientific-critical-thinking/references/evidence_hierarchy.md +484 -0
  1111. package/skills/scientific-critical-thinking/references/experimental_design.md +496 -0
  1112. package/skills/scientific-critical-thinking/references/logical_fallacies.md +478 -0
  1113. package/skills/scientific-critical-thinking/references/scientific_method.md +169 -0
  1114. package/skills/scientific-critical-thinking/references/statistical_pitfalls.md +506 -0
  1115. package/skills/scientific-schematics/SKILL.md +619 -0
  1116. package/skills/scientific-schematics/references/QUICK_REFERENCE.md +207 -0
  1117. package/skills/scientific-schematics/references/README.md +327 -0
  1118. package/skills/scientific-schematics/references/best_practices.md +560 -0
  1119. package/skills/scientific-schematics/scripts/example_usage.sh +89 -0
  1120. package/skills/scientific-schematics/scripts/generate_schematic.py +139 -0
  1121. package/skills/scientific-schematics/scripts/generate_schematic_ai.py +844 -0
  1122. package/skills/scientific-slides/SKILL.md +1154 -0
  1123. package/skills/scientific-slides/assets/beamer_template_conference.tex +407 -0
  1124. package/skills/scientific-slides/assets/beamer_template_defense.tex +906 -0
  1125. package/skills/scientific-slides/assets/beamer_template_seminar.tex +870 -0
  1126. package/skills/scientific-slides/assets/powerpoint_design_guide.md +662 -0
  1127. package/skills/scientific-slides/assets/timing_guidelines.md +597 -0
  1128. package/skills/scientific-slides/references/beamer_guide.md +1019 -0
  1129. package/skills/scientific-slides/references/data_visualization_slides.md +708 -0
  1130. package/skills/scientific-slides/references/presentation_structure.md +642 -0
  1131. package/skills/scientific-slides/references/slide_design_principles.md +849 -0
  1132. package/skills/scientific-slides/references/talk_types_guide.md +687 -0
  1133. package/skills/scientific-slides/references/visual_review_workflow.md +775 -0
  1134. package/skills/scientific-slides/scripts/generate_slide_image.py +140 -0
  1135. package/skills/scientific-slides/scripts/generate_slide_image_ai.py +763 -0
  1136. package/skills/scientific-slides/scripts/pdf_to_images.py +221 -0
  1137. package/skills/scientific-slides/scripts/slides_to_pdf.py +235 -0
  1138. package/skills/scientific-slides/scripts/validate_presentation.py +403 -0
  1139. package/skills/scientific-visualization/SKILL.md +777 -0
  1140. package/skills/scientific-visualization/assets/color_palettes.py +197 -0
  1141. package/skills/scientific-visualization/assets/nature.mplstyle +63 -0
  1142. package/skills/scientific-visualization/assets/presentation.mplstyle +61 -0
  1143. package/skills/scientific-visualization/assets/publication.mplstyle +68 -0
  1144. package/skills/scientific-visualization/references/color_palettes.md +348 -0
  1145. package/skills/scientific-visualization/references/journal_requirements.md +320 -0
  1146. package/skills/scientific-visualization/references/matplotlib_examples.md +620 -0
  1147. package/skills/scientific-visualization/references/publication_guidelines.md +205 -0
  1148. package/skills/scientific-visualization/scripts/figure_export.py +343 -0
  1149. package/skills/scientific-visualization/scripts/style_presets.py +416 -0
  1150. package/skills/scientific-workflows/SKILL.md +1684 -0
  1151. package/skills/scientific-writing/SKILL.md +718 -0
  1152. package/skills/scientific-writing/assets/REPORT_FORMATTING_GUIDE.md +574 -0
  1153. package/skills/scientific-writing/assets/scientific_report.sty +606 -0
  1154. package/skills/scientific-writing/assets/scientific_report_template.tex +449 -0
  1155. package/skills/scientific-writing/references/citation_styles.md +720 -0
  1156. package/skills/scientific-writing/references/figures_tables.md +806 -0
  1157. package/skills/scientific-writing/references/imrad_structure.md +686 -0
  1158. package/skills/scientific-writing/references/professional_report_formatting.md +664 -0
  1159. package/skills/scientific-writing/references/reporting_guidelines.md +748 -0
  1160. package/skills/scientific-writing/references/writing_principles.md +824 -0
  1161. package/skills/scikit-bio/SKILL.md +435 -0
  1162. package/skills/scikit-bio/references/api_reference.md +749 -0
  1163. package/skills/scikit-learn/SKILL.md +519 -0
  1164. package/skills/scikit-learn/references/model_evaluation.md +592 -0
  1165. package/skills/scikit-learn/references/pipelines_and_composition.md +612 -0
  1166. package/skills/scikit-learn/references/preprocessing.md +606 -0
  1167. package/skills/scikit-learn/references/quick_reference.md +433 -0
  1168. package/skills/scikit-learn/references/supervised_learning.md +378 -0
  1169. package/skills/scikit-learn/references/unsupervised_learning.md +505 -0
  1170. package/skills/scikit-learn/scripts/classification_pipeline.py +257 -0
  1171. package/skills/scikit-learn/scripts/clustering_analysis.py +386 -0
  1172. package/skills/scikit-survival/SKILL.md +397 -0
  1173. package/skills/scikit-survival/references/competing-risks.md +397 -0
  1174. package/skills/scikit-survival/references/cox-models.md +182 -0
  1175. package/skills/scikit-survival/references/data-handling.md +494 -0
  1176. package/skills/scikit-survival/references/ensemble-models.md +327 -0
  1177. package/skills/scikit-survival/references/evaluation-metrics.md +378 -0
  1178. package/skills/scikit-survival/references/svm-models.md +411 -0
  1179. package/skills/scvelo/SKILL.md +321 -0
  1180. package/skills/scvelo/references/velocity_models.md +168 -0
  1181. package/skills/scvelo/scripts/rna_velocity_workflow.py +232 -0
  1182. package/skills/scvi-tools/SKILL.md +188 -0
  1183. package/skills/scvi-tools/references/differential-expression.md +581 -0
  1184. package/skills/scvi-tools/references/models-atac-seq.md +321 -0
  1185. package/skills/scvi-tools/references/models-multimodal.md +367 -0
  1186. package/skills/scvi-tools/references/models-scrna-seq.md +330 -0
  1187. package/skills/scvi-tools/references/models-spatial.md +438 -0
  1188. package/skills/scvi-tools/references/models-specialized.md +408 -0
  1189. package/skills/scvi-tools/references/theoretical-foundations.md +438 -0
  1190. package/skills/scvi-tools/references/workflows.md +546 -0
  1191. package/skills/seaborn/SKILL.md +671 -0
  1192. package/skills/seaborn/references/examples.md +822 -0
  1193. package/skills/seaborn/references/function_reference.md +770 -0
  1194. package/skills/seaborn/references/objects_interface.md +964 -0
  1195. package/skills/semantic-scholar/SKILL.md +123 -0
  1196. package/skills/session-log/SKILL.md +10 -0
  1197. package/skills/session-search/SKILL.md +26 -0
  1198. package/skills/setup/SKILL.md +216 -0
  1199. package/skills/shap/SKILL.md +564 -0
  1200. package/skills/shap/references/explainers.md +339 -0
  1201. package/skills/shap/references/plots.md +507 -0
  1202. package/skills/shap/references/theory.md +449 -0
  1203. package/skills/shap/references/workflows.md +605 -0
  1204. package/skills/simpy/SKILL.md +427 -0
  1205. package/skills/simpy/references/events.md +374 -0
  1206. package/skills/simpy/references/monitoring.md +475 -0
  1207. package/skills/simpy/references/process-interaction.md +424 -0
  1208. package/skills/simpy/references/real-time.md +395 -0
  1209. package/skills/simpy/references/resources.md +275 -0
  1210. package/skills/simpy/scripts/basic_simulation_template.py +193 -0
  1211. package/skills/simpy/scripts/resource_monitor.py +345 -0
  1212. package/skills/source-comparison/SKILL.md +12 -0
  1213. package/skills/stable-baselines3/SKILL.md +297 -0
  1214. package/skills/stable-baselines3/references/algorithms.md +333 -0
  1215. package/skills/stable-baselines3/references/callbacks.md +556 -0
  1216. package/skills/stable-baselines3/references/custom_environments.md +526 -0
  1217. package/skills/stable-baselines3/references/vectorized_envs.md +568 -0
  1218. package/skills/stable-baselines3/scripts/custom_env_template.py +314 -0
  1219. package/skills/stable-baselines3/scripts/evaluate_agent.py +245 -0
  1220. package/skills/stable-baselines3/scripts/train_rl_agent.py +165 -0
  1221. package/skills/statistical-analysis/SKILL.md +630 -0
  1222. package/skills/statistical-analysis/references/assumptions_and_diagnostics.md +369 -0
  1223. package/skills/statistical-analysis/references/bayesian_statistics.md +661 -0
  1224. package/skills/statistical-analysis/references/effect_sizes_and_power.md +581 -0
  1225. package/skills/statistical-analysis/references/reporting_standards.md +469 -0
  1226. package/skills/statistical-analysis/references/test_selection_guide.md +129 -0
  1227. package/skills/statistical-analysis/scripts/assumption_checks.py +539 -0
  1228. package/skills/statsmodels/SKILL.md +612 -0
  1229. package/skills/statsmodels/references/discrete_choice.md +669 -0
  1230. package/skills/statsmodels/references/glm.md +619 -0
  1231. package/skills/statsmodels/references/linear_models.md +447 -0
  1232. package/skills/statsmodels/references/stats_diagnostics.md +859 -0
  1233. package/skills/statsmodels/references/time_series.md +716 -0
  1234. package/skills/string-database/SKILL.md +532 -0
  1235. package/skills/string-database/references/string_reference.md +455 -0
  1236. package/skills/string-database/scripts/string_api.py +369 -0
  1237. package/skills/sympy/SKILL.md +498 -0
  1238. package/skills/sympy/references/advanced-topics.md +635 -0
  1239. package/skills/sympy/references/code-generation-printing.md +599 -0
  1240. package/skills/sympy/references/core-capabilities.md +348 -0
  1241. package/skills/sympy/references/matrices-linear-algebra.md +526 -0
  1242. package/skills/sympy/references/physics-mechanics.md +592 -0
  1243. package/skills/tiledbvcf/SKILL.md +459 -0
  1244. package/skills/timesfm-forecasting/SKILL.md +785 -0
  1245. package/skills/timesfm-forecasting/examples/anomaly-detection/detect_anomalies.py +524 -0
  1246. package/skills/timesfm-forecasting/examples/anomaly-detection/output/anomaly_detection.json +448 -0
  1247. package/skills/timesfm-forecasting/examples/anomaly-detection/output/anomaly_detection.png +0 -0
  1248. package/skills/timesfm-forecasting/examples/covariates-forecasting/demo_covariates.py +568 -0
  1249. package/skills/timesfm-forecasting/examples/covariates-forecasting/output/covariates_data.png +0 -0
  1250. package/skills/timesfm-forecasting/examples/covariates-forecasting/output/covariates_metadata.json +59 -0
  1251. package/skills/timesfm-forecasting/examples/covariates-forecasting/output/sales_with_covariates.csv +109 -0
  1252. package/skills/timesfm-forecasting/examples/global-temperature/README.md +178 -0
  1253. package/skills/timesfm-forecasting/examples/global-temperature/generate_animation_data.py +147 -0
  1254. package/skills/timesfm-forecasting/examples/global-temperature/generate_gif.py +248 -0
  1255. package/skills/timesfm-forecasting/examples/global-temperature/generate_html.py +544 -0
  1256. package/skills/timesfm-forecasting/examples/global-temperature/output/animation_data.json +5441 -0
  1257. package/skills/timesfm-forecasting/examples/global-temperature/output/forecast_animation.gif +0 -0
  1258. package/skills/timesfm-forecasting/examples/global-temperature/output/forecast_output.csv +13 -0
  1259. package/skills/timesfm-forecasting/examples/global-temperature/output/forecast_output.json +188 -0
  1260. package/skills/timesfm-forecasting/examples/global-temperature/output/forecast_visualization.png +0 -0
  1261. package/skills/timesfm-forecasting/examples/global-temperature/output/interactive_forecast.html +5939 -0
  1262. package/skills/timesfm-forecasting/examples/global-temperature/run_example.sh +53 -0
  1263. package/skills/timesfm-forecasting/examples/global-temperature/run_forecast.py +167 -0
  1264. package/skills/timesfm-forecasting/examples/global-temperature/temperature_anomaly.csv +37 -0
  1265. package/skills/timesfm-forecasting/examples/global-temperature/visualize_forecast.py +123 -0
  1266. package/skills/timesfm-forecasting/references/api_reference.md +231 -0
  1267. package/skills/timesfm-forecasting/references/data_preparation.md +272 -0
  1268. package/skills/timesfm-forecasting/references/system_requirements.md +201 -0
  1269. package/skills/timesfm-forecasting/scripts/check_system.py +520 -0
  1270. package/skills/timesfm-forecasting/scripts/forecast_csv.py +269 -0
  1271. package/skills/torch-geometric/SKILL.md +674 -0
  1272. package/skills/torch-geometric/references/datasets_reference.md +574 -0
  1273. package/skills/torch-geometric/references/layers_reference.md +485 -0
  1274. package/skills/torch-geometric/references/transforms_reference.md +679 -0
  1275. package/skills/torch-geometric/scripts/benchmark_model.py +309 -0
  1276. package/skills/torch-geometric/scripts/create_gnn_template.py +529 -0
  1277. package/skills/torch-geometric/scripts/visualize_graph.py +313 -0
  1278. package/skills/torchdrug/SKILL.md +448 -0
  1279. package/skills/torchdrug/references/core_concepts.md +565 -0
  1280. package/skills/torchdrug/references/datasets.md +380 -0
  1281. package/skills/torchdrug/references/knowledge_graphs.md +320 -0
  1282. package/skills/torchdrug/references/models_architectures.md +541 -0
  1283. package/skills/torchdrug/references/molecular_generation.md +352 -0
  1284. package/skills/torchdrug/references/molecular_property_prediction.md +169 -0
  1285. package/skills/torchdrug/references/protein_modeling.md +272 -0
  1286. package/skills/torchdrug/references/retrosynthesis.md +436 -0
  1287. package/skills/transformers/SKILL.md +162 -0
  1288. package/skills/transformers/references/generation.md +467 -0
  1289. package/skills/transformers/references/models.md +361 -0
  1290. package/skills/transformers/references/pipelines.md +335 -0
  1291. package/skills/transformers/references/tokenizers.md +447 -0
  1292. package/skills/transformers/references/training.md +500 -0
  1293. package/skills/treatment-plans/SKILL.md +1580 -0
  1294. package/skills/treatment-plans/assets/STYLING_QUICK_REFERENCE.md +185 -0
  1295. package/skills/treatment-plans/assets/chronic_disease_management_plan.tex +665 -0
  1296. package/skills/treatment-plans/assets/general_medical_treatment_plan.tex +547 -0
  1297. package/skills/treatment-plans/assets/medical_treatment_plan.sty +222 -0
  1298. package/skills/treatment-plans/assets/mental_health_treatment_plan.tex +774 -0
  1299. package/skills/treatment-plans/assets/one_page_treatment_plan.tex +193 -0
  1300. package/skills/treatment-plans/assets/pain_management_plan.tex +799 -0
  1301. package/skills/treatment-plans/assets/perioperative_care_plan.tex +753 -0
  1302. package/skills/treatment-plans/assets/quality_checklist.md +471 -0
  1303. package/skills/treatment-plans/assets/rehabilitation_treatment_plan.tex +756 -0
  1304. package/skills/treatment-plans/references/README.md +488 -0
  1305. package/skills/treatment-plans/references/goal_setting_frameworks.md +411 -0
  1306. package/skills/treatment-plans/references/intervention_guidelines.md +507 -0
  1307. package/skills/treatment-plans/references/regulatory_compliance.md +476 -0
  1308. package/skills/treatment-plans/references/specialty_specific_guidelines.md +655 -0
  1309. package/skills/treatment-plans/references/treatment_plan_standards.md +485 -0
  1310. package/skills/treatment-plans/scripts/check_completeness.py +318 -0
  1311. package/skills/treatment-plans/scripts/generate_template.py +244 -0
  1312. package/skills/treatment-plans/scripts/timeline_generator.py +369 -0
  1313. package/skills/treatment-plans/scripts/validate_treatment_plan.py +367 -0
  1314. package/skills/umap-learn/SKILL.md +477 -0
  1315. package/skills/umap-learn/references/api_reference.md +532 -0
  1316. package/skills/uniprot-database/SKILL.md +193 -0
  1317. package/skills/uniprot-database/references/api_examples.md +413 -0
  1318. package/skills/uniprot-database/references/api_fields.md +275 -0
  1319. package/skills/uniprot-database/references/id_mapping_databases.md +285 -0
  1320. package/skills/uniprot-database/references/query_syntax.md +256 -0
  1321. package/skills/uniprot-database/scripts/uniprot_client.py +341 -0
  1322. package/skills/usfiscaldata/SKILL.md +163 -0
  1323. package/skills/usfiscaldata/references/api-basics.md +86 -0
  1324. package/skills/usfiscaldata/references/datasets-debt.md +163 -0
  1325. package/skills/usfiscaldata/references/datasets-fiscal.md +196 -0
  1326. package/skills/usfiscaldata/references/datasets-interest-rates.md +182 -0
  1327. package/skills/usfiscaldata/references/datasets-securities.md +216 -0
  1328. package/skills/usfiscaldata/references/examples.md +258 -0
  1329. package/skills/usfiscaldata/references/parameters.md +155 -0
  1330. package/skills/usfiscaldata/references/response-format.md +176 -0
  1331. package/skills/uspto-database/SKILL.md +605 -0
  1332. package/skills/uspto-database/references/additional_apis.md +394 -0
  1333. package/skills/uspto-database/references/patentsearch_api.md +266 -0
  1334. package/skills/uspto-database/references/peds_api.md +212 -0
  1335. package/skills/uspto-database/references/trademark_api.md +358 -0
  1336. package/skills/uspto-database/scripts/patent_search.py +290 -0
  1337. package/skills/uspto-database/scripts/peds_client.py +285 -0
  1338. package/skills/uspto-database/scripts/trademark_client.py +311 -0
  1339. package/skills/vaex/SKILL.md +180 -0
  1340. package/skills/vaex/references/core_dataframes.md +367 -0
  1341. package/skills/vaex/references/data_processing.md +555 -0
  1342. package/skills/vaex/references/io_operations.md +703 -0
  1343. package/skills/vaex/references/machine_learning.md +728 -0
  1344. package/skills/vaex/references/performance.md +571 -0
  1345. package/skills/vaex/references/visualization.md +613 -0
  1346. package/skills/venue-templates/SKILL.md +688 -0
  1347. package/skills/venue-templates/assets/examples/cell_summary_example.md +247 -0
  1348. package/skills/venue-templates/assets/examples/medical_structured_abstract.md +313 -0
  1349. package/skills/venue-templates/assets/examples/nature_abstract_examples.md +213 -0
  1350. package/skills/venue-templates/assets/examples/neurips_introduction_example.md +245 -0
  1351. package/skills/venue-templates/assets/grants/nih_specific_aims.tex +235 -0
  1352. package/skills/venue-templates/assets/grants/nsf_proposal_template.tex +375 -0
  1353. package/skills/venue-templates/assets/journals/nature_article.tex +171 -0
  1354. package/skills/venue-templates/assets/journals/neurips_article.tex +283 -0
  1355. package/skills/venue-templates/assets/journals/plos_one.tex +317 -0
  1356. package/skills/venue-templates/assets/posters/beamerposter_academic.tex +311 -0
  1357. package/skills/venue-templates/references/cell_press_style.md +483 -0
  1358. package/skills/venue-templates/references/conferences_formatting.md +564 -0
  1359. package/skills/venue-templates/references/cs_conference_style.md +463 -0
  1360. package/skills/venue-templates/references/grants_requirements.md +787 -0
  1361. package/skills/venue-templates/references/journals_formatting.md +486 -0
  1362. package/skills/venue-templates/references/medical_journal_styles.md +535 -0
  1363. package/skills/venue-templates/references/ml_conference_style.md +556 -0
  1364. package/skills/venue-templates/references/nature_science_style.md +405 -0
  1365. package/skills/venue-templates/references/posters_guidelines.md +628 -0
  1366. package/skills/venue-templates/references/reviewer_expectations.md +417 -0
  1367. package/skills/venue-templates/references/venue_writing_styles.md +321 -0
  1368. package/skills/venue-templates/scripts/customize_template.py +206 -0
  1369. package/skills/venue-templates/scripts/query_template.py +260 -0
  1370. package/skills/venue-templates/scripts/validate_format.py +255 -0
  1371. package/skills/watch/SKILL.md +12 -0
  1372. package/skills/what-if-oracle/SKILL.md +168 -0
  1373. package/skills/what-if-oracle/references/scenario-templates.md +137 -0
  1374. package/skills/writing/SKILL.md +414 -0
  1375. package/skills/xlsx/LICENSE.txt +30 -0
  1376. package/skills/xlsx/SKILL.md +292 -0
  1377. package/skills/xlsx/scripts/office/helpers/__init__.py +0 -0
  1378. package/skills/xlsx/scripts/office/helpers/merge_runs.py +199 -0
  1379. package/skills/xlsx/scripts/office/helpers/simplify_redlines.py +197 -0
  1380. package/skills/xlsx/scripts/office/pack.py +159 -0
  1381. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  1382. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  1383. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  1384. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  1385. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  1386. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  1387. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  1388. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  1389. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  1390. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  1391. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  1392. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  1393. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  1394. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  1395. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  1396. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  1397. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  1398. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  1399. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  1400. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  1401. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  1402. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  1403. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  1404. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  1405. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  1406. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  1407. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  1408. package/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  1409. package/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  1410. package/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  1411. package/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  1412. package/skills/xlsx/scripts/office/schemas/mce/mc.xsd +75 -0
  1413. package/skills/xlsx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
  1414. package/skills/xlsx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
  1415. package/skills/xlsx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
  1416. package/skills/xlsx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
  1417. package/skills/xlsx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
  1418. package/skills/xlsx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  1419. package/skills/xlsx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
  1420. package/skills/xlsx/scripts/office/soffice.py +183 -0
  1421. package/skills/xlsx/scripts/office/unpack.py +132 -0
  1422. package/skills/xlsx/scripts/office/validate.py +111 -0
  1423. package/skills/xlsx/scripts/office/validators/__init__.py +15 -0
  1424. package/skills/xlsx/scripts/office/validators/base.py +847 -0
  1425. package/skills/xlsx/scripts/office/validators/docx.py +446 -0
  1426. package/skills/xlsx/scripts/office/validators/pptx.py +275 -0
  1427. package/skills/xlsx/scripts/office/validators/redlining.py +247 -0
  1428. package/skills/xlsx/scripts/recalc.py +184 -0
  1429. package/skills/zarr-python/SKILL.md +777 -0
  1430. package/skills/zarr-python/references/api_reference.md +515 -0
  1431. package/skills/zinc-database/SKILL.md +402 -0
  1432. package/skills/zinc-database/references/api_reference.md +692 -0
@@ -0,0 +1,1290 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ AI-powered infographic generation using Nano Banana Pro.
4
+
5
+ This script uses a smart iterative refinement approach:
6
+ 1. (Optional) Research phase - gather facts and data using Perplexity Sonar
7
+ 2. Generate initial infographic with Nano Banana Pro
8
+ 3. AI quality review using Gemini 3 Pro for infographic critique
9
+ 4. Only regenerate if quality is below threshold for document type
10
+ 5. Repeat until quality meets standards (max iterations)
11
+
12
+ Requirements:
13
+ - OPENROUTER_API_KEY environment variable
14
+ - requests library
15
+
16
+ Usage:
17
+ python generate_infographic_ai.py "5 benefits of exercise" -o benefits.png --type list
18
+ python generate_infographic_ai.py "Global AI market size" -o ai_market.png --type statistical --research
19
+ python generate_infographic_ai.py "Company history 2010-2025" -o timeline.png --type timeline --style corporate
20
+ """
21
+
22
+ import argparse
23
+ import base64
24
+ import json
25
+ import os
26
+ import re
27
+ import sys
28
+ import time
29
+ from pathlib import Path
30
+ from typing import Optional, Dict, Any, List, Tuple
31
+
32
+ try:
33
+ import requests
34
+ except ImportError:
35
+ print("Error: requests library not found. Install with: pip install requests")
36
+ sys.exit(1)
37
+
38
+
39
+ def _load_env_file():
40
+ """Load .env file from current directory, parent directories, or package directory."""
41
+ try:
42
+ from dotenv import load_dotenv
43
+ except ImportError:
44
+ return False
45
+
46
+ # Try current working directory first
47
+ env_path = Path.cwd() / ".env"
48
+ if env_path.exists():
49
+ load_dotenv(dotenv_path=env_path, override=False)
50
+ return True
51
+
52
+ # Try parent directories (up to 5 levels)
53
+ cwd = Path.cwd()
54
+ for _ in range(5):
55
+ env_path = cwd / ".env"
56
+ if env_path.exists():
57
+ load_dotenv(dotenv_path=env_path, override=False)
58
+ return True
59
+ cwd = cwd.parent
60
+ if cwd == cwd.parent:
61
+ break
62
+
63
+ # Try the package's parent directory
64
+ script_dir = Path(__file__).resolve().parent
65
+ for _ in range(5):
66
+ env_path = script_dir / ".env"
67
+ if env_path.exists():
68
+ load_dotenv(dotenv_path=env_path, override=False)
69
+ return True
70
+ script_dir = script_dir.parent
71
+ if script_dir == script_dir.parent:
72
+ break
73
+
74
+ return False
75
+
76
+
77
+ # Infographic type configurations with detailed prompting
78
+ INFOGRAPHIC_TYPES = {
79
+ "statistical": {
80
+ "name": "Statistical/Data-Driven",
81
+ "guidelines": """
82
+ STATISTICAL INFOGRAPHIC REQUIREMENTS:
83
+ - Large, bold numbers that are immediately readable
84
+ - Clear data visualization (bar charts, pie charts, or donut charts)
85
+ - Data callouts with context (e.g., "15% increase")
86
+ - Trend indicators (arrows, growth symbols)
87
+ - Legend if multiple data series
88
+ - Source attribution area at bottom
89
+ - Clean grid or alignment for data elements
90
+ """
91
+ },
92
+ "timeline": {
93
+ "name": "Timeline/Chronological",
94
+ "guidelines": """
95
+ TIMELINE INFOGRAPHIC REQUIREMENTS:
96
+ - Clear chronological flow (horizontal or vertical)
97
+ - Prominent date/year markers
98
+ - Connecting line or path between events
99
+ - Event nodes (circles, icons, or markers)
100
+ - Brief event descriptions
101
+ - Consistent spacing between events
102
+ - Visual progression indicating time direction
103
+ - Start and end points clearly marked
104
+ """
105
+ },
106
+ "process": {
107
+ "name": "Process/How-To",
108
+ "guidelines": """
109
+ PROCESS INFOGRAPHIC REQUIREMENTS:
110
+ - Numbered steps (1, 2, 3, etc.) clearly visible
111
+ - Directional arrows between steps
112
+ - Action-oriented icons for each step
113
+ - Brief action text for each step
114
+ - Clear start and end indicators
115
+ - Logical flow direction (top-to-bottom or left-to-right)
116
+ - Visual connection between sequential steps
117
+ """
118
+ },
119
+ "comparison": {
120
+ "name": "Comparison",
121
+ "guidelines": """
122
+ COMPARISON INFOGRAPHIC REQUIREMENTS:
123
+ - Symmetrical side-by-side layout
124
+ - Clear headers for each option being compared
125
+ - Matching rows/categories for fair comparison
126
+ - Visual indicators (checkmarks, X marks, ratings)
127
+ - Balanced visual weight on both sides
128
+ - Color differentiation between options
129
+ - Summary or verdict section if applicable
130
+ """
131
+ },
132
+ "list": {
133
+ "name": "List/Informational",
134
+ "guidelines": """
135
+ LIST INFOGRAPHIC REQUIREMENTS:
136
+ - Large, clear numbers or bullet points
137
+ - Icons representing each list item
138
+ - Brief, scannable text descriptions
139
+ - Consistent visual treatment for all items
140
+ - Clear hierarchy (title, items, details)
141
+ - Adequate spacing between items
142
+ - Visual variety to prevent monotony
143
+ """
144
+ },
145
+ "geographic": {
146
+ "name": "Geographic/Map-Based",
147
+ "guidelines": """
148
+ GEOGRAPHIC INFOGRAPHIC REQUIREMENTS:
149
+ - Accurate map representation
150
+ - Color-coded regions based on data
151
+ - Clear legend explaining color scale
152
+ - Data callouts for key regions
153
+ - Region labels where space permits
154
+ - Scale or context indicator
155
+ - Clean cartographic style
156
+ """
157
+ },
158
+ "hierarchical": {
159
+ "name": "Hierarchical/Pyramid",
160
+ "guidelines": """
161
+ HIERARCHICAL INFOGRAPHIC REQUIREMENTS:
162
+ - Clear pyramid or tree structure
163
+ - Distinct levels with visual separation
164
+ - Size progression (larger at base, smaller at top)
165
+ - Labels for each tier
166
+ - Color gradient or distinct colors per level
167
+ - Clear top-to-bottom or bottom-to-top hierarchy
168
+ - Balanced, centered composition
169
+ """
170
+ },
171
+ "anatomical": {
172
+ "name": "Anatomical/Visual Metaphor",
173
+ "guidelines": """
174
+ ANATOMICAL INFOGRAPHIC REQUIREMENTS:
175
+ - Central metaphor image (body, tree, machine, etc.)
176
+ - Labeled components with callout lines
177
+ - Clear connection between labels and parts
178
+ - Explanatory text for each labeled part
179
+ - Consistent callout style throughout
180
+ - Educational, diagram-like appearance
181
+ """
182
+ },
183
+ "resume": {
184
+ "name": "Resume/Professional",
185
+ "guidelines": """
186
+ RESUME INFOGRAPHIC REQUIREMENTS:
187
+ - Professional photo/avatar placeholder area
188
+ - Skill visualization (bars, charts, ratings)
189
+ - Experience timeline or list
190
+ - Contact information section with icons
191
+ - Achievement or certification badges
192
+ - Clean, professional layout
193
+ - Personal branding colors
194
+ """
195
+ },
196
+ "social": {
197
+ "name": "Social Media",
198
+ "guidelines": """
199
+ SOCIAL MEDIA INFOGRAPHIC REQUIREMENTS:
200
+ - Bold, attention-grabbing headline
201
+ - Large, impactful central statistic or visual
202
+ - Minimal text, maximum visual impact
203
+ - Platform-appropriate format (square for Instagram)
204
+ - Vibrant, eye-catching colors
205
+ - Call-to-action element
206
+ - Brand/logo placement area
207
+ """
208
+ },
209
+ }
210
+
211
+ # Industry style configurations
212
+ STYLE_PRESETS = {
213
+ "corporate": {
214
+ "name": "Corporate/Business",
215
+ "colors": "navy blue (#1E3A5F), steel blue (#4A90A4), gold (#F5A623) accents",
216
+ "description": "Clean, professional, minimal design with structured layout",
217
+ },
218
+ "healthcare": {
219
+ "name": "Healthcare/Medical",
220
+ "colors": "medical blue (#0077B6), cyan (#00B4D8), light cyan (#90E0EF)",
221
+ "description": "Trust-inducing, clinical, clean design",
222
+ },
223
+ "technology": {
224
+ "name": "Technology/Data",
225
+ "colors": "tech blue (#2563EB), slate gray (#475569), violet (#7C3AED) accents",
226
+ "description": "Modern, innovative, futuristic design",
227
+ },
228
+ "nature": {
229
+ "name": "Nature/Environmental",
230
+ "colors": "forest green (#2D6A4F), mint (#95D5B2), earth brown (#8B4513)",
231
+ "description": "Organic, natural, earth-toned design",
232
+ },
233
+ "education": {
234
+ "name": "Education/Academic",
235
+ "colors": "academic blue (#3D5A80), light blue (#98C1D9), coral (#EE6C4D) accents",
236
+ "description": "Friendly, approachable, educational design",
237
+ },
238
+ "marketing": {
239
+ "name": "Marketing/Creative",
240
+ "colors": "coral (#FF6B6B), teal (#4ECDC4), yellow (#FFE66D)",
241
+ "description": "Bold, vibrant, eye-catching design",
242
+ },
243
+ "finance": {
244
+ "name": "Finance/Investment",
245
+ "colors": "navy (#14213D), gold (#FCA311), green (#2ECC71) for positive",
246
+ "description": "Conservative, trustworthy, professional design",
247
+ },
248
+ "nonprofit": {
249
+ "name": "Nonprofit/Cause",
250
+ "colors": "warm orange (#E07A5F), sage green (#81B29A), sand (#F2CC8F)",
251
+ "description": "Warm, human-centered, impactful design",
252
+ },
253
+ }
254
+
255
+ # Colorblind-safe palette options
256
+ PALETTE_PRESETS = {
257
+ "wong": {
258
+ "name": "Wong's Palette",
259
+ "colors": "orange (#E69F00), sky blue (#56B4E9), bluish green (#009E73), blue (#0072B2), vermillion (#D55E00)",
260
+ },
261
+ "ibm": {
262
+ "name": "IBM Colorblind-Safe",
263
+ "colors": "ultramarine (#648FFF), indigo (#785EF0), magenta (#DC267F), orange (#FE6100), gold (#FFB000)",
264
+ },
265
+ "tol": {
266
+ "name": "Tol's Qualitative",
267
+ "colors": "indigo (#332288), cyan (#88CCEE), teal (#44AA99), green (#117733), sand (#DDCC77), rose (#CC6677)",
268
+ },
269
+ }
270
+
271
+
272
+ class InfographicGenerator:
273
+ """Generate infographics using AI with smart iterative refinement.
274
+
275
+ Uses Gemini 3 Pro for quality review to determine if regeneration is needed.
276
+ Multiple passes only occur if the generated infographic doesn't meet the
277
+ quality threshold for the target document type.
278
+ """
279
+
280
+ # Quality thresholds by document type (score out of 10)
281
+ QUALITY_THRESHOLDS = {
282
+ "marketing": 8.5, # Marketing materials - must be compelling
283
+ "report": 8.0, # Business reports - professional quality
284
+ "presentation": 7.5, # Slides/talks - clear and engaging
285
+ "social": 7.0, # Social media - eye-catching
286
+ "internal": 7.0, # Internal use - good quality
287
+ "draft": 6.5, # Draft/working - acceptable
288
+ "default": 7.5, # Default threshold
289
+ }
290
+
291
+ # Base infographic design guidelines
292
+ INFOGRAPHIC_GUIDELINES = """
293
+ Create a high-quality professional infographic with these requirements:
294
+
295
+ VISUAL QUALITY:
296
+ - Clean white or light solid color background (no busy textures)
297
+ - High contrast for readability
298
+ - Professional, polished appearance
299
+ - Sharp, clear graphics and text
300
+ - Adequate spacing to prevent crowding
301
+ - Balanced composition
302
+
303
+ TYPOGRAPHY:
304
+ - Bold, attention-grabbing headline
305
+ - Clear, readable sans-serif fonts
306
+ - Minimum 12pt font size for body text
307
+ - Larger text for key statistics and headlines
308
+ - Consistent font hierarchy throughout
309
+ - No overlapping text
310
+
311
+ LAYOUT:
312
+ - Clear visual hierarchy (most important info largest/first)
313
+ - Logical reading flow (top-to-bottom or left-to-right)
314
+ - 60% visual elements, 40% text (approximately)
315
+ - Adequate white space between sections
316
+ - Balanced left-right composition
317
+ - Clear section divisions
318
+
319
+ DATA VISUALIZATION:
320
+ - Large, bold numbers for key statistics
321
+ - Clear, accurate charts and graphs
322
+ - Labeled axes and data points
323
+ - Legend where needed
324
+ - Icons that clearly represent concepts
325
+
326
+ ACCESSIBILITY:
327
+ - Colorblind-friendly color choices
328
+ - High contrast between text and background
329
+ - Shapes and labels, not just colors, to convey meaning
330
+ - Works in grayscale
331
+
332
+ IMPORTANT - NO META CONTENT:
333
+ - Do NOT include the prompt, instructions, or metadata in the image
334
+ - Do NOT include layout descriptions like "left panel", "right panel"
335
+ - Do NOT include font or color specifications
336
+ - Only include the actual infographic content
337
+ """
338
+
339
+ def __init__(self, api_key: Optional[str] = None, verbose: bool = False):
340
+ """Initialize the generator."""
341
+ self.api_key = api_key or os.getenv("OPENROUTER_API_KEY")
342
+
343
+ if not self.api_key:
344
+ _load_env_file()
345
+ self.api_key = os.getenv("OPENROUTER_API_KEY")
346
+
347
+ if not self.api_key:
348
+ raise ValueError(
349
+ "OPENROUTER_API_KEY not found. Please either:\n"
350
+ " 1. Set the OPENROUTER_API_KEY environment variable\n"
351
+ " 2. Add OPENROUTER_API_KEY to your .env file\n"
352
+ " 3. Pass api_key parameter to the constructor\n"
353
+ "Get your API key from: https://openrouter.ai/keys"
354
+ )
355
+
356
+ self.verbose = verbose
357
+ self._last_error = None
358
+ self.base_url = "https://openrouter.ai/api/v1"
359
+ # Nano Banana Pro for image generation
360
+ self.image_model = "google/gemini-3-pro-image-preview"
361
+ # Gemini 3 Pro for quality review
362
+ self.review_model = "google/gemini-3-pro"
363
+
364
+ def _log(self, message: str):
365
+ """Log message if verbose mode is enabled."""
366
+ if self.verbose:
367
+ print(f"[{time.strftime('%H:%M:%S')}] {message}")
368
+
369
+ # ========== RESEARCH METHODS ==========
370
+
371
+ def research_topic(self, topic: str, infographic_type: Optional[str] = None) -> Dict[str, Any]:
372
+ """
373
+ Research a topic using Perplexity Sonar Pro to gather facts and data.
374
+
375
+ Args:
376
+ topic: The topic to research
377
+ infographic_type: Type of infographic to tailor the research
378
+
379
+ Returns:
380
+ Dictionary with research results including facts, statistics, and sources
381
+ """
382
+ self._log(f"Researching topic: {topic}")
383
+
384
+ # Build research query based on infographic type
385
+ type_context = ""
386
+ if infographic_type:
387
+ if infographic_type == "statistical":
388
+ type_context = "Focus on statistics, numbers, percentages, and quantitative data."
389
+ elif infographic_type == "timeline":
390
+ type_context = "Focus on key dates, milestones, and chronological events."
391
+ elif infographic_type == "process":
392
+ type_context = "Focus on steps, procedures, and sequential information."
393
+ elif infographic_type == "comparison":
394
+ type_context = "Focus on comparing different options, pros/cons, and differences."
395
+ elif infographic_type == "list":
396
+ type_context = "Focus on key points, tips, facts, and organized information."
397
+ elif infographic_type == "geographic":
398
+ type_context = "Focus on regional data, location-based statistics, and geographic distribution."
399
+ elif infographic_type == "hierarchical":
400
+ type_context = "Focus on levels, rankings, and hierarchical relationships."
401
+
402
+ research_prompt = f"""You are a research assistant gathering information for an infographic.
403
+
404
+ TOPIC: {topic}
405
+
406
+ {type_context}
407
+
408
+ Please provide:
409
+ 1. KEY FACTS: 5-8 key facts or statistics about this topic (with specific numbers where possible)
410
+ 2. CONTEXT: Brief background context (2-3 sentences)
411
+ 3. SOURCES: Mention any major sources or studies
412
+ 4. DATA POINTS: Any specific data points that would make good visualizations
413
+
414
+ Format your response as structured data that can be easily incorporated into an infographic.
415
+ Be specific with numbers, percentages, and dates.
416
+ Prioritize recent information (2023-2026).
417
+ Include citation hints where possible."""
418
+
419
+ messages = [
420
+ {
421
+ "role": "system",
422
+ "content": "You are an expert research assistant. Provide accurate, well-sourced information formatted for infographic creation. Always include specific numbers, dates, and statistics."
423
+ },
424
+ {"role": "user", "content": research_prompt}
425
+ ]
426
+
427
+ try:
428
+ # Use Perplexity Sonar Pro for research
429
+ research_model = "perplexity/sonar-pro"
430
+
431
+ headers = {
432
+ "Authorization": f"Bearer {self.api_key}",
433
+ "Content-Type": "application/json",
434
+ "HTTP-Referer": "https://github.com/scientific-writer",
435
+ "X-Title": "Infographic Research"
436
+ }
437
+
438
+ payload = {
439
+ "model": research_model,
440
+ "messages": messages,
441
+ "max_tokens": 2000,
442
+ "temperature": 0.1,
443
+ "search_mode": "academic",
444
+ "search_context_size": "high"
445
+ }
446
+
447
+ response = requests.post(
448
+ f"{self.base_url}/chat/completions",
449
+ headers=headers,
450
+ json=payload,
451
+ timeout=60
452
+ )
453
+
454
+ if response.status_code != 200:
455
+ self._log(f"Research request failed: {response.status_code}")
456
+ return {"success": False, "error": f"API error: {response.status_code}"}
457
+
458
+ result = response.json()
459
+
460
+ if "choices" in result and len(result["choices"]) > 0:
461
+ content = result["choices"][0].get("message", {}).get("content", "")
462
+
463
+ # Extract any sources from the response
464
+ sources = result.get("search_results", [])
465
+
466
+ self._log(f"Research complete: {len(content)} chars")
467
+
468
+ return {
469
+ "success": True,
470
+ "content": content,
471
+ "sources": sources,
472
+ "model": research_model
473
+ }
474
+ else:
475
+ return {"success": False, "error": "No response from research model"}
476
+
477
+ except Exception as e:
478
+ self._log(f"Research failed: {str(e)}")
479
+ return {"success": False, "error": str(e)}
480
+
481
+ def web_search(self, query: str) -> Dict[str, Any]:
482
+ """
483
+ Perform a quick web search for current information.
484
+
485
+ Args:
486
+ query: Search query
487
+
488
+ Returns:
489
+ Dictionary with search results
490
+ """
491
+ self._log(f"Web search: {query}")
492
+
493
+ search_prompt = f"""Search for current information about: {query}
494
+
495
+ Provide:
496
+ 1. The most relevant and recent facts
497
+ 2. Any statistics or numbers
498
+ 3. Key dates if applicable
499
+ 4. Brief source attribution
500
+
501
+ Be concise and factual. Focus on information useful for an infographic."""
502
+
503
+ messages = [
504
+ {
505
+ "role": "system",
506
+ "content": "You are a web search assistant. Provide accurate, current information with sources."
507
+ },
508
+ {"role": "user", "content": search_prompt}
509
+ ]
510
+
511
+ try:
512
+ # Use Perplexity Sonar for web search
513
+ search_model = "perplexity/sonar-pro"
514
+
515
+ headers = {
516
+ "Authorization": f"Bearer {self.api_key}",
517
+ "Content-Type": "application/json",
518
+ "HTTP-Referer": "https://github.com/scientific-writer",
519
+ "X-Title": "Infographic Web Search"
520
+ }
521
+
522
+ payload = {
523
+ "model": search_model,
524
+ "messages": messages,
525
+ "max_tokens": 1000,
526
+ "temperature": 0.1
527
+ }
528
+
529
+ response = requests.post(
530
+ f"{self.base_url}/chat/completions",
531
+ headers=headers,
532
+ json=payload,
533
+ timeout=30
534
+ )
535
+
536
+ if response.status_code != 200:
537
+ return {"success": False, "error": f"API error: {response.status_code}"}
538
+
539
+ result = response.json()
540
+
541
+ if "choices" in result and len(result["choices"]) > 0:
542
+ content = result["choices"][0].get("message", {}).get("content", "")
543
+ return {
544
+ "success": True,
545
+ "content": content,
546
+ "sources": result.get("search_results", [])
547
+ }
548
+ else:
549
+ return {"success": False, "error": "No response from search"}
550
+
551
+ except Exception as e:
552
+ self._log(f"Web search failed: {str(e)}")
553
+ return {"success": False, "error": str(e)}
554
+
555
+ def _enhance_prompt_with_research(self, user_prompt: str, research_data: Dict[str, Any]) -> str:
556
+ """
557
+ Enhance the user prompt with researched information.
558
+
559
+ Args:
560
+ user_prompt: Original user prompt
561
+ research_data: Research results dictionary
562
+
563
+ Returns:
564
+ Enhanced prompt with research data
565
+ """
566
+ if not research_data.get("success") or not research_data.get("content"):
567
+ return user_prompt
568
+
569
+ enhanced = f"""{user_prompt}
570
+
571
+ RESEARCHED DATA AND FACTS (use these in the infographic):
572
+ {research_data['content']}
573
+
574
+ Use the above researched facts, statistics, and data points to create an accurate, informative infographic.
575
+ Incorporate specific numbers, percentages, and dates from the research."""
576
+
577
+ return enhanced
578
+
579
+ # ========== END RESEARCH METHODS ==========
580
+
581
+ def _make_request(self, model: str, messages: List[Dict[str, Any]],
582
+ modalities: Optional[List[str]] = None) -> Dict[str, Any]:
583
+ """Make a request to OpenRouter API."""
584
+ headers = {
585
+ "Authorization": f"Bearer {self.api_key}",
586
+ "Content-Type": "application/json",
587
+ "HTTP-Referer": "https://github.com/scientific-writer",
588
+ "X-Title": "Infographic Generator"
589
+ }
590
+
591
+ payload = {
592
+ "model": model,
593
+ "messages": messages
594
+ }
595
+
596
+ if modalities:
597
+ payload["modalities"] = modalities
598
+
599
+ self._log(f"Making request to {model}...")
600
+
601
+ try:
602
+ response = requests.post(
603
+ f"{self.base_url}/chat/completions",
604
+ headers=headers,
605
+ json=payload,
606
+ timeout=120
607
+ )
608
+
609
+ try:
610
+ response_json = response.json()
611
+ except json.JSONDecodeError:
612
+ response_json = {"raw_text": response.text[:500]}
613
+
614
+ if response.status_code != 200:
615
+ error_detail = response_json.get("error", response_json)
616
+ self._log(f"HTTP {response.status_code}: {error_detail}")
617
+ raise RuntimeError(f"API request failed (HTTP {response.status_code}): {error_detail}")
618
+
619
+ return response_json
620
+ except requests.exceptions.Timeout:
621
+ raise RuntimeError("API request timed out after 120 seconds")
622
+ except requests.exceptions.RequestException as e:
623
+ raise RuntimeError(f"API request failed: {str(e)}")
624
+
625
+ def _extract_image_from_response(self, response: Dict[str, Any]) -> Optional[bytes]:
626
+ """Extract base64-encoded image from API response."""
627
+ try:
628
+ choices = response.get("choices", [])
629
+ if not choices:
630
+ self._log("No choices in response")
631
+ return None
632
+
633
+ message = choices[0].get("message", {})
634
+
635
+ # Nano Banana Pro returns images in 'images' field
636
+ images = message.get("images", [])
637
+ if images and len(images) > 0:
638
+ self._log(f"Found {len(images)} image(s) in 'images' field")
639
+
640
+ first_image = images[0]
641
+ if isinstance(first_image, dict):
642
+ if first_image.get("type") == "image_url":
643
+ url = first_image.get("image_url", {})
644
+ if isinstance(url, dict):
645
+ url = url.get("url", "")
646
+
647
+ if url and url.startswith("data:image"):
648
+ if "," in url:
649
+ base64_str = url.split(",", 1)[1]
650
+ base64_str = base64_str.replace('\n', '').replace('\r', '').replace(' ', '')
651
+ self._log(f"Extracted base64 data (length: {len(base64_str)})")
652
+ return base64.b64decode(base64_str)
653
+
654
+ # Fallback: check content field
655
+ content = message.get("content", "")
656
+
657
+ if isinstance(content, str) and "data:image" in content:
658
+ import re
659
+ match = re.search(r'data:image/[^;]+;base64,([A-Za-z0-9+/=\n\r]+)', content, re.DOTALL)
660
+ if match:
661
+ base64_str = match.group(1).replace('\n', '').replace('\r', '').replace(' ', '')
662
+ self._log(f"Found image in content field (length: {len(base64_str)})")
663
+ return base64.b64decode(base64_str)
664
+
665
+ if isinstance(content, list):
666
+ for i, block in enumerate(content):
667
+ if isinstance(block, dict) and block.get("type") == "image_url":
668
+ url = block.get("image_url", {})
669
+ if isinstance(url, dict):
670
+ url = url.get("url", "")
671
+ if url and url.startswith("data:image") and "," in url:
672
+ base64_str = url.split(",", 1)[1].replace('\n', '').replace('\r', '').replace(' ', '')
673
+ self._log(f"Found image in content block {i}")
674
+ return base64.b64decode(base64_str)
675
+
676
+ self._log("No image data found in response")
677
+ return None
678
+
679
+ except Exception as e:
680
+ self._log(f"Error extracting image: {str(e)}")
681
+ return None
682
+
683
+ def _image_to_base64(self, image_path: str) -> str:
684
+ """Convert image file to base64 data URL."""
685
+ with open(image_path, "rb") as f:
686
+ image_data = f.read()
687
+
688
+ ext = Path(image_path).suffix.lower()
689
+ mime_type = {
690
+ ".png": "image/png",
691
+ ".jpg": "image/jpeg",
692
+ ".jpeg": "image/jpeg",
693
+ ".gif": "image/gif",
694
+ ".webp": "image/webp"
695
+ }.get(ext, "image/png")
696
+
697
+ base64_data = base64.b64encode(image_data).decode("utf-8")
698
+ return f"data:{mime_type};base64,{base64_data}"
699
+
700
+ def _build_generation_prompt(self, user_prompt: str,
701
+ infographic_type: Optional[str] = None,
702
+ style: Optional[str] = None,
703
+ palette: Optional[str] = None,
704
+ background: str = "white") -> str:
705
+ """Build the full generation prompt with all enhancements."""
706
+ parts = [self.INFOGRAPHIC_GUIDELINES]
707
+
708
+ # Add type-specific guidelines
709
+ if infographic_type and infographic_type in INFOGRAPHIC_TYPES:
710
+ type_config = INFOGRAPHIC_TYPES[infographic_type]
711
+ parts.append(f"\nINFOGRAPHIC TYPE: {type_config['name']}")
712
+ parts.append(type_config['guidelines'])
713
+
714
+ # Add style preset
715
+ if style and style in STYLE_PRESETS:
716
+ style_config = STYLE_PRESETS[style]
717
+ parts.append(f"\nSTYLE: {style_config['name']}")
718
+ parts.append(f"Colors: {style_config['colors']}")
719
+ parts.append(f"Design: {style_config['description']}")
720
+
721
+ # Add colorblind-safe palette
722
+ if palette and palette in PALETTE_PRESETS:
723
+ palette_config = PALETTE_PRESETS[palette]
724
+ parts.append(f"\nCOLORBLIND-SAFE PALETTE: {palette_config['name']}")
725
+ parts.append(f"Use these colors: {palette_config['colors']}")
726
+
727
+ # Add user request
728
+ parts.append(f"\nUSER REQUEST: {user_prompt}")
729
+
730
+ # Add background
731
+ parts.append(f"\nBackground: {background} background")
732
+
733
+ # Final instruction
734
+ parts.append("\nGenerate a professional, publication-quality infographic that meets all the guidelines above.")
735
+
736
+ return "\n".join(parts)
737
+
738
+ def generate_image(self, prompt: str) -> Optional[bytes]:
739
+ """Generate an image using Nano Banana Pro."""
740
+ self._last_error = None
741
+
742
+ messages = [
743
+ {
744
+ "role": "user",
745
+ "content": prompt
746
+ }
747
+ ]
748
+
749
+ try:
750
+ response = self._make_request(
751
+ model=self.image_model,
752
+ messages=messages,
753
+ modalities=["image", "text"]
754
+ )
755
+
756
+ if self.verbose:
757
+ self._log(f"Response keys: {response.keys()}")
758
+ if "error" in response:
759
+ self._log(f"API Error: {response['error']}")
760
+
761
+ if "error" in response:
762
+ error_msg = response["error"]
763
+ if isinstance(error_msg, dict):
764
+ error_msg = error_msg.get("message", str(error_msg))
765
+ self._last_error = f"API Error: {error_msg}"
766
+ print(f"✗ {self._last_error}")
767
+ return None
768
+
769
+ image_data = self._extract_image_from_response(response)
770
+ if image_data:
771
+ self._log(f"✓ Generated image ({len(image_data)} bytes)")
772
+ else:
773
+ self._last_error = "No image data in API response"
774
+ self._log(f"✗ {self._last_error}")
775
+
776
+ return image_data
777
+ except RuntimeError as e:
778
+ self._last_error = str(e)
779
+ self._log(f"✗ Generation failed: {self._last_error}")
780
+ return None
781
+ except Exception as e:
782
+ self._last_error = f"Unexpected error: {str(e)}"
783
+ self._log(f"✗ Generation failed: {self._last_error}")
784
+ return None
785
+
786
+ def review_image(self, image_path: str, original_prompt: str,
787
+ infographic_type: Optional[str],
788
+ iteration: int, doc_type: str = "default",
789
+ max_iterations: int = 3) -> Tuple[str, float, bool]:
790
+ """
791
+ Review generated infographic using Gemini 3 Pro for quality analysis.
792
+
793
+ Evaluates the infographic on multiple criteria specific to good
794
+ infographic design and determines if regeneration is needed.
795
+ """
796
+ image_data_url = self._image_to_base64(image_path)
797
+
798
+ threshold = self.QUALITY_THRESHOLDS.get(doc_type.lower(),
799
+ self.QUALITY_THRESHOLDS["default"])
800
+
801
+ type_name = "general"
802
+ if infographic_type and infographic_type in INFOGRAPHIC_TYPES:
803
+ type_name = INFOGRAPHIC_TYPES[infographic_type]["name"]
804
+
805
+ review_prompt = f"""You are an expert infographic designer reviewing a generated infographic for quality.
806
+
807
+ ORIGINAL REQUEST: {original_prompt}
808
+
809
+ INFOGRAPHIC TYPE: {type_name}
810
+ QUALITY THRESHOLD: {threshold}/10
811
+ ITERATION: {iteration}/{max_iterations}
812
+
813
+ Carefully evaluate this infographic on these criteria:
814
+
815
+ 1. **Visual Hierarchy & Layout** (0-2 points)
816
+ - Clear visual hierarchy (most important elements prominent)
817
+ - Logical reading flow
818
+ - Balanced composition
819
+ - Adequate white space
820
+
821
+ 2. **Typography & Readability** (0-2 points)
822
+ - Text is readable and appropriately sized
823
+ - Headlines are bold and attention-grabbing
824
+ - No overlapping or cramped text
825
+ - Consistent font usage
826
+
827
+ 3. **Data Visualization** (0-2 points)
828
+ - Numbers and statistics are prominent
829
+ - Charts/icons are clear and accurate
830
+ - Data is easy to understand at a glance
831
+ - Labels are present where needed
832
+
833
+ 4. **Color & Accessibility** (0-2 points)
834
+ - Colors are harmonious and professional
835
+ - Sufficient contrast for readability
836
+ - Works for colorblind viewers
837
+ - Colors support the content hierarchy
838
+
839
+ 5. **Overall Impact & Professionalism** (0-2 points)
840
+ - Looks professional and polished
841
+ - Engaging and visually appealing
842
+ - Free of visual bugs or artifacts
843
+ - Achieves its communication goal
844
+
845
+ RESPOND IN THIS EXACT FORMAT:
846
+ SCORE: [total score 0-10]
847
+
848
+ STRENGTHS:
849
+ - [strength 1]
850
+ - [strength 2]
851
+
852
+ ISSUES:
853
+ - [issue 1 if any]
854
+ - [issue 2 if any]
855
+
856
+ SPECIFIC_IMPROVEMENTS:
857
+ - [specific improvement 1]
858
+ - [specific improvement 2]
859
+
860
+ VERDICT: [ACCEPTABLE or NEEDS_IMPROVEMENT]
861
+
862
+ If score >= {threshold}, the infographic is ACCEPTABLE.
863
+ If score < {threshold}, mark as NEEDS_IMPROVEMENT with specific suggestions."""
864
+
865
+ messages = [
866
+ {
867
+ "role": "user",
868
+ "content": [
869
+ {
870
+ "type": "text",
871
+ "text": review_prompt
872
+ },
873
+ {
874
+ "type": "image_url",
875
+ "image_url": {
876
+ "url": image_data_url
877
+ }
878
+ }
879
+ ]
880
+ }
881
+ ]
882
+
883
+ try:
884
+ response = self._make_request(
885
+ model=self.review_model,
886
+ messages=messages
887
+ )
888
+
889
+ choices = response.get("choices", [])
890
+ if not choices:
891
+ return "Image generated successfully", 7.5, False
892
+
893
+ message = choices[0].get("message", {})
894
+ content = message.get("content", "")
895
+
896
+ reasoning = message.get("reasoning", "")
897
+ if reasoning and not content:
898
+ content = reasoning
899
+
900
+ if isinstance(content, list):
901
+ text_parts = []
902
+ for block in content:
903
+ if isinstance(block, dict) and block.get("type") == "text":
904
+ text_parts.append(block.get("text", ""))
905
+ content = "\n".join(text_parts)
906
+
907
+ # Extract score
908
+ score = 7.5
909
+ import re
910
+
911
+ score_match = re.search(r'SCORE:\s*(\d+(?:\.\d+)?)', content, re.IGNORECASE)
912
+ if score_match:
913
+ score = float(score_match.group(1))
914
+ else:
915
+ score_match = re.search(r'(?:score|rating|quality)[:\s]+(\d+(?:\.\d+)?)\s*(?:/\s*10)?', content, re.IGNORECASE)
916
+ if score_match:
917
+ score = float(score_match.group(1))
918
+
919
+ # Determine if improvement is needed
920
+ needs_improvement = False
921
+ if "NEEDS_IMPROVEMENT" in content.upper():
922
+ needs_improvement = True
923
+ elif score < threshold:
924
+ needs_improvement = True
925
+
926
+ self._log(f"✓ Review complete (Score: {score}/10, Threshold: {threshold}/10)")
927
+ self._log(f" Verdict: {'Needs improvement' if needs_improvement else 'Acceptable'}")
928
+
929
+ return (content if content else "Image generated successfully",
930
+ score,
931
+ needs_improvement)
932
+ except Exception as e:
933
+ self._log(f"Review skipped: {str(e)}")
934
+ return "Image generated successfully (review skipped)", 7.5, False
935
+
936
+ def improve_prompt(self, original_prompt: str, critique: str,
937
+ infographic_type: Optional[str],
938
+ style: Optional[str],
939
+ palette: Optional[str],
940
+ background: str,
941
+ iteration: int) -> str:
942
+ """Improve the generation prompt based on critique."""
943
+
944
+ parts = [self.INFOGRAPHIC_GUIDELINES]
945
+
946
+ # Add type-specific guidelines
947
+ if infographic_type and infographic_type in INFOGRAPHIC_TYPES:
948
+ type_config = INFOGRAPHIC_TYPES[infographic_type]
949
+ parts.append(f"\nINFOGRAPHIC TYPE: {type_config['name']}")
950
+ parts.append(type_config['guidelines'])
951
+
952
+ # Add style preset
953
+ if style and style in STYLE_PRESETS:
954
+ style_config = STYLE_PRESETS[style]
955
+ parts.append(f"\nSTYLE: {style_config['name']}")
956
+ parts.append(f"Colors: {style_config['colors']}")
957
+ parts.append(f"Design: {style_config['description']}")
958
+
959
+ # Add palette
960
+ if palette and palette in PALETTE_PRESETS:
961
+ palette_config = PALETTE_PRESETS[palette]
962
+ parts.append(f"\nCOLORBLIND-SAFE PALETTE: {palette_config['name']}")
963
+ parts.append(f"Use these colors: {palette_config['colors']}")
964
+
965
+ # Add original request
966
+ parts.append(f"\nUSER REQUEST: {original_prompt}")
967
+ parts.append(f"\nBackground: {background} background")
968
+
969
+ # Add improvement instructions
970
+ parts.append(f"""
971
+ ITERATION {iteration}: Based on previous review, address these specific improvements:
972
+ {critique}
973
+
974
+ Generate an improved version that:
975
+ 1. Fixes ALL the issues mentioned in the review
976
+ 2. Maintains the requested infographic type and style
977
+ 3. Ensures professional, publication-ready quality
978
+ 4. Has no visual bugs, overlapping elements, or readability issues
979
+ """)
980
+
981
+ return "\n".join(parts)
982
+
983
+ def generate_iterative(self, user_prompt: str, output_path: str,
984
+ infographic_type: Optional[str] = None,
985
+ style: Optional[str] = None,
986
+ palette: Optional[str] = None,
987
+ background: str = "white",
988
+ iterations: int = 3,
989
+ doc_type: str = "default",
990
+ research: bool = False) -> Dict[str, Any]:
991
+ """
992
+ Generate infographic with smart iterative refinement.
993
+
994
+ Only regenerates if the quality score is below the threshold.
995
+
996
+ Args:
997
+ user_prompt: Description of the infographic content
998
+ output_path: Path to save final image
999
+ infographic_type: Type preset (statistical, timeline, etc.)
1000
+ style: Industry style preset
1001
+ palette: Colorblind-safe palette
1002
+ background: Background color
1003
+ iterations: Maximum refinement iterations
1004
+ doc_type: Document type for quality threshold
1005
+ research: If True, research the topic first for better data
1006
+ """
1007
+ output_path = Path(output_path)
1008
+ output_dir = output_path.parent
1009
+ output_dir.mkdir(parents=True, exist_ok=True)
1010
+
1011
+ base_name = output_path.stem
1012
+ extension = output_path.suffix or ".png"
1013
+
1014
+ threshold = self.QUALITY_THRESHOLDS.get(doc_type.lower(),
1015
+ self.QUALITY_THRESHOLDS["default"])
1016
+
1017
+ type_name = infographic_type if infographic_type else "general"
1018
+ style_name = style if style else "default"
1019
+
1020
+ results = {
1021
+ "user_prompt": user_prompt,
1022
+ "infographic_type": infographic_type,
1023
+ "style": style,
1024
+ "palette": palette,
1025
+ "doc_type": doc_type,
1026
+ "quality_threshold": threshold,
1027
+ "research_enabled": research,
1028
+ "research_data": None,
1029
+ "iterations": [],
1030
+ "final_image": None,
1031
+ "final_score": 0.0,
1032
+ "success": False,
1033
+ "early_stop": False,
1034
+ "early_stop_reason": None
1035
+ }
1036
+
1037
+ print(f"\n{'='*60}")
1038
+ print(f"Generating Infographic with Nano Banana Pro")
1039
+ print(f"{'='*60}")
1040
+ print(f"Content: {user_prompt}")
1041
+ print(f"Type: {type_name}")
1042
+ print(f"Style: {style_name}")
1043
+ print(f"Research: {'Enabled' if research else 'Disabled'}")
1044
+ print(f"Quality Threshold: {threshold}/10")
1045
+ print(f"Max Iterations: {iterations}")
1046
+ print(f"Output: {output_path}")
1047
+ print(f"{'='*60}\n")
1048
+
1049
+ # ===== RESEARCH PHASE =====
1050
+ enhanced_prompt = user_prompt
1051
+ if research:
1052
+ print(f"\n[Research Phase]")
1053
+ print("-" * 40)
1054
+ print(f"Researching topic for accurate data...")
1055
+
1056
+ research_result = self.research_topic(user_prompt, infographic_type)
1057
+
1058
+ if research_result.get("success"):
1059
+ print(f"✓ Research complete - gathered facts and statistics")
1060
+ results["research_data"] = research_result
1061
+
1062
+ # Enhance the prompt with researched data
1063
+ enhanced_prompt = self._enhance_prompt_with_research(user_prompt, research_result)
1064
+
1065
+ # Save research data to file
1066
+ research_path = output_dir / f"{base_name}_research.json"
1067
+ with open(research_path, "w") as f:
1068
+ json.dump(research_result, f, indent=2)
1069
+ print(f"✓ Research saved: {research_path}")
1070
+ else:
1071
+ print(f"⚠ Research failed: {research_result.get('error', 'Unknown error')}")
1072
+ print(f" Proceeding with original prompt...")
1073
+
1074
+ # Build initial prompt (using enhanced prompt if research was done)
1075
+ current_prompt = self._build_generation_prompt(
1076
+ enhanced_prompt, infographic_type, style, palette, background
1077
+ )
1078
+
1079
+ for i in range(1, iterations + 1):
1080
+ print(f"\n[Iteration {i}/{iterations}]")
1081
+ print("-" * 40)
1082
+
1083
+ # Generate image
1084
+ print(f"Generating infographic with Nano Banana Pro...")
1085
+ image_data = self.generate_image(current_prompt)
1086
+
1087
+ if not image_data:
1088
+ error_msg = getattr(self, '_last_error', 'Generation failed')
1089
+ print(f"✗ Generation failed: {error_msg}")
1090
+ results["iterations"].append({
1091
+ "iteration": i,
1092
+ "success": False,
1093
+ "error": error_msg
1094
+ })
1095
+ continue
1096
+
1097
+ # Save iteration image
1098
+ iter_path = output_dir / f"{base_name}_v{i}{extension}"
1099
+ with open(iter_path, "wb") as f:
1100
+ f.write(image_data)
1101
+ print(f"✓ Saved: {iter_path}")
1102
+
1103
+ # Review image using Gemini 3 Pro
1104
+ print(f"Reviewing with Gemini 3 Pro...")
1105
+ critique, score, needs_improvement = self.review_image(
1106
+ str(iter_path), user_prompt, infographic_type, i, doc_type, iterations
1107
+ )
1108
+ print(f"✓ Score: {score}/10 (threshold: {threshold}/10)")
1109
+
1110
+ # Save iteration results
1111
+ iteration_result = {
1112
+ "iteration": i,
1113
+ "image_path": str(iter_path),
1114
+ "prompt_length": len(current_prompt),
1115
+ "critique": critique,
1116
+ "score": score,
1117
+ "needs_improvement": needs_improvement,
1118
+ "success": True
1119
+ }
1120
+ results["iterations"].append(iteration_result)
1121
+
1122
+ # Check if quality is acceptable
1123
+ if not needs_improvement:
1124
+ print(f"\n✓ Quality meets threshold ({score} >= {threshold})")
1125
+ print(f" No further iterations needed!")
1126
+ results["final_image"] = str(iter_path)
1127
+ results["final_score"] = score
1128
+ results["success"] = True
1129
+ results["early_stop"] = True
1130
+ results["early_stop_reason"] = f"Quality score {score} meets threshold {threshold}"
1131
+ break
1132
+
1133
+ # If this is the last iteration, we're done
1134
+ if i == iterations:
1135
+ print(f"\n⚠ Maximum iterations reached")
1136
+ results["final_image"] = str(iter_path)
1137
+ results["final_score"] = score
1138
+ results["success"] = True
1139
+ break
1140
+
1141
+ # Quality below threshold - improve prompt
1142
+ print(f"\n⚠ Quality below threshold ({score} < {threshold})")
1143
+ print(f"Improving prompt based on feedback...")
1144
+ current_prompt = self.improve_prompt(
1145
+ user_prompt, critique, infographic_type, style, palette, background, i + 1
1146
+ )
1147
+
1148
+ # Copy final version to output path
1149
+ if results["success"] and results["final_image"]:
1150
+ final_iter_path = Path(results["final_image"])
1151
+ if final_iter_path != output_path:
1152
+ import shutil
1153
+ shutil.copy(final_iter_path, output_path)
1154
+ print(f"\n✓ Final image: {output_path}")
1155
+
1156
+ # Save review log
1157
+ log_path = output_dir / f"{base_name}_review_log.json"
1158
+ with open(log_path, "w") as f:
1159
+ json.dump(results, f, indent=2)
1160
+ print(f"✓ Review log: {log_path}")
1161
+
1162
+ print(f"\n{'='*60}")
1163
+ print(f"Generation Complete!")
1164
+ print(f"Final Score: {results['final_score']}/10")
1165
+ if results["early_stop"]:
1166
+ iterations_used = len([r for r in results['iterations'] if r.get('success')])
1167
+ print(f"Iterations Used: {iterations_used}/{iterations} (early stop)")
1168
+ print(f"{'='*60}\n")
1169
+
1170
+ return results
1171
+
1172
+
1173
+ def main():
1174
+ """Command-line interface."""
1175
+ parser = argparse.ArgumentParser(
1176
+ description="Generate infographics using Nano Banana Pro with smart iterative refinement",
1177
+ formatter_class=argparse.RawDescriptionHelpFormatter,
1178
+ epilog="""
1179
+ Examples:
1180
+ # Generate a list infographic
1181
+ python generate_infographic_ai.py "5 benefits of meditation" -o benefits.png --type list
1182
+
1183
+ # Generate a timeline with corporate style
1184
+ python generate_infographic_ai.py "Company history 2010-2025" -o timeline.png --type timeline --style corporate
1185
+
1186
+ # Generate with colorblind-safe palette
1187
+ python generate_infographic_ai.py "Heart disease stats" -o stats.png --type statistical --palette wong
1188
+
1189
+ # Generate with RESEARCH for accurate data (uses Perplexity Sonar)
1190
+ python generate_infographic_ai.py "Global AI market 2025" -o ai_market.png --type statistical --research
1191
+
1192
+ # Verbose output
1193
+ python generate_infographic_ai.py "Process diagram" -o process.png --type process -v
1194
+
1195
+ Infographic Types:
1196
+ statistical - Data-driven with charts and numbers
1197
+ timeline - Chronological events
1198
+ process - Step-by-step instructions
1199
+ comparison - Side-by-side comparison
1200
+ list - Tips, facts, key points
1201
+ geographic - Map-based visualization
1202
+ hierarchical - Pyramid or tree structure
1203
+ anatomical - Visual metaphor
1204
+ resume - Professional/CV style
1205
+ social - Social media optimized
1206
+
1207
+ Style Presets:
1208
+ corporate, healthcare, technology, nature, education, marketing, finance, nonprofit
1209
+
1210
+ Colorblind-Safe Palettes:
1211
+ wong, ibm, tol
1212
+
1213
+ Document Types (quality thresholds):
1214
+ marketing 8.5/10 - Marketing materials
1215
+ report 8.0/10 - Business reports
1216
+ presentation 7.5/10 - Slides/talks
1217
+ social 7.0/10 - Social media
1218
+ internal 7.0/10 - Internal use
1219
+ draft 6.5/10 - Working drafts
1220
+ default 7.5/10 - General purpose
1221
+
1222
+ Environment:
1223
+ OPENROUTER_API_KEY OpenRouter API key (required)
1224
+ """
1225
+ )
1226
+
1227
+ parser.add_argument("prompt", help="Description of the infographic content")
1228
+ parser.add_argument("-o", "--output", required=True,
1229
+ help="Output image path (e.g., infographic.png)")
1230
+ parser.add_argument("--type", "-t", choices=list(INFOGRAPHIC_TYPES.keys()),
1231
+ help="Infographic type preset")
1232
+ parser.add_argument("--style", "-s", choices=list(STYLE_PRESETS.keys()),
1233
+ help="Industry style preset")
1234
+ parser.add_argument("--palette", "-p", choices=list(PALETTE_PRESETS.keys()),
1235
+ help="Colorblind-safe palette")
1236
+ parser.add_argument("--background", "-b", default="white",
1237
+ help="Background color (default: white)")
1238
+ parser.add_argument("--iterations", type=int, default=3,
1239
+ help="Maximum refinement iterations (default: 3)")
1240
+ parser.add_argument("--doc-type", default="default",
1241
+ choices=["marketing", "report", "presentation", "social",
1242
+ "internal", "draft", "default"],
1243
+ help="Document type for quality threshold (default: default)")
1244
+ parser.add_argument("--api-key", help="OpenRouter API key (or set OPENROUTER_API_KEY)")
1245
+ parser.add_argument("-v", "--verbose", action="store_true",
1246
+ help="Verbose output")
1247
+ parser.add_argument("--research", "-r", action="store_true",
1248
+ help="Research the topic first using Perplexity Sonar for accurate data")
1249
+
1250
+ args = parser.parse_args()
1251
+
1252
+ # Check for API key
1253
+ api_key = args.api_key or os.getenv("OPENROUTER_API_KEY")
1254
+ if not api_key:
1255
+ print("Error: OPENROUTER_API_KEY environment variable not set")
1256
+ print("\nSet it with:")
1257
+ print(" export OPENROUTER_API_KEY='your_api_key'")
1258
+ print("\nOr provide via --api-key flag")
1259
+ sys.exit(1)
1260
+
1261
+ try:
1262
+ generator = InfographicGenerator(api_key=api_key, verbose=args.verbose)
1263
+ results = generator.generate_iterative(
1264
+ user_prompt=args.prompt,
1265
+ output_path=args.output,
1266
+ infographic_type=args.type,
1267
+ style=args.style,
1268
+ palette=args.palette,
1269
+ background=args.background,
1270
+ iterations=args.iterations,
1271
+ doc_type=args.doc_type,
1272
+ research=args.research
1273
+ )
1274
+
1275
+ if results["success"]:
1276
+ print(f"\n✓ Success! Infographic saved to: {args.output}")
1277
+ if results.get("early_stop"):
1278
+ iterations_used = len([r for r in results['iterations'] if r.get('success')])
1279
+ print(f" (Completed in {iterations_used} iteration(s) - quality threshold met)")
1280
+ sys.exit(0)
1281
+ else:
1282
+ print(f"\n✗ Generation failed. Check review log for details.")
1283
+ sys.exit(1)
1284
+ except Exception as e:
1285
+ print(f"\n✗ Error: {str(e)}")
1286
+ sys.exit(1)
1287
+
1288
+
1289
+ if __name__ == "__main__":
1290
+ main()