@brainpilot/skills 0.0.6 → 0.0.7
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.
- package/package.json +2 -2
- package/skills/01_Meta-Skills/academic-research-hub/SKILL.md +108 -0
- package/skills/01_Meta-Skills/academic-research-hub/scripts/requirements.txt +17 -0
- package/skills/01_Meta-Skills/academic-research-hub/scripts/research.py +781 -0
- package/skills/01_Meta-Skills/beautiful-log/SKILL.md +64 -0
- package/skills/01_Meta-Skills/beautiful-log/scripts/beautiful_log.py +274 -0
- package/skills/01_Meta-Skills/ethoclaw-daily-paper/SKILL.md +130 -0
- package/skills/01_Meta-Skills/ethoclaw-daily-paper/assets/config.template.yaml +54 -0
- package/skills/01_Meta-Skills/ethoclaw-daily-paper/assets/top5_digest_template.md +5 -0
- package/skills/01_Meta-Skills/ethoclaw-daily-paper/scripts/build_top5_digest.py +300 -0
- package/skills/01_Meta-Skills/ethoclaw-daily-paper/scripts/common.py +137 -0
- package/skills/01_Meta-Skills/ethoclaw-daily-paper/scripts/merge_results.py +106 -0
- package/skills/01_Meta-Skills/ethoclaw-daily-paper/scripts/run_pipeline.py +177 -0
- package/skills/01_Meta-Skills/ethoclaw-daily-paper/scripts/search_arxiv.py +162 -0
- package/skills/01_Meta-Skills/ethoclaw-daily-paper/scripts/search_pubmed.py +202 -0
- package/skills/01_Meta-Skills/ethoclaw-normalize-tabular/SKILL.md +173 -0
- package/skills/01_Meta-Skills/ethoclaw-normalize-tabular/scripts/normalize_data.py +874 -0
- package/skills/01_Meta-Skills/ethoclaw-pdf-research/SKILL.md +134 -0
- package/skills/01_Meta-Skills/ethoclaw-pdf-research/references/confirmation-prompts.md +31 -0
- package/skills/01_Meta-Skills/ethoclaw-pdf-research/references/output-patterns.md +45 -0
- package/skills/01_Meta-Skills/ethoclaw-pdf-research/scripts/build_markdown_deliverables.py +41 -0
- package/skills/01_Meta-Skills/ethoclaw-pdf-research/scripts/build_research_log.py +84 -0
- package/skills/01_Meta-Skills/ethoclaw-pdf-research/scripts/build_summary_md.py +63 -0
- package/skills/01_Meta-Skills/ethoclaw-pdf-research/scripts/extract_pdf_bundle.py +140 -0
- package/skills/01_Meta-Skills/experiment-controller/SKILL.md +140 -0
- package/skills/01_Meta-Skills/knowledge-graph-builder/SKILL.md +366 -0
- package/skills/01_Meta-Skills/knowledge-graph-builder/scripts/entity_resolution.py +120 -0
- package/skills/01_Meta-Skills/knowledge-graph-builder/scripts/extraction_prompt_template.txt +19 -0
- package/skills/01_Meta-Skills/knowledge-graph-builder/scripts/graph_query.py +106 -0
- package/skills/01_Meta-Skills/knowledge-graph-builder/scripts/hypothesis_cli_reference.py +42 -0
- package/skills/01_Meta-Skills/knowledge-graph-builder/scripts/new_data_source_template.py +116 -0
- package/skills/01_Meta-Skills/knowledge-graph-builder/scripts/requirements.txt +15 -0
- package/skills/01_Meta-Skills/method-design/SKILL.md +61 -0
- package/skills/01_Meta-Skills/multi-search-engine/SKILL.md +119 -0
- package/skills/01_Meta-Skills/research-idea/SKILL.md +65 -0
- package/skills/05_EEG_ERP/eeg-skill/SKILL.md +197 -0
- package/skills/05_EEG_ERP/meg-skill/SKILL.md +188 -0
- package/skills/05_EEG_ERP/meg-skill/scripts/time_frequency.py +223 -0
- package/skills/05_EEG_ERP/mne-eeg-tool/SKILL.md +165 -0
- package/skills/05_EEG_ERP/mne-eeg-tool/scripts/eeg_pipeline_reference.py +231 -0
- package/skills/05_EEG_ERP/seed-iv-skill/SKILL.md +184 -0
- package/skills/05_EEG_ERP/seed-iv-skill/scripts/classify_seed_iv.py +154 -0
- package/skills/05_EEG_ERP/seed-iv-skill/scripts/extract_seed_iv_features.py +190 -0
- package/skills/05_EEG_ERP/seed-iv-skill/scripts/validate_seed_iv.py +102 -0
- package/skills/05_EEG_ERP/seed-vig-skill/SKILL.md +182 -0
- package/skills/05_EEG_ERP/seed-vig-skill/scripts/classify_seed_vig.py +165 -0
- package/skills/05_EEG_ERP/seed-vig-skill/scripts/extract_seed_vig_features.py +185 -0
- package/skills/05_EEG_ERP/seed-vig-skill/scripts/validate_seed_vig.py +88 -0
- package/skills/06_fMRI_Neuroimaging/abcd-skill/SKILL.md +308 -0
- package/skills/06_fMRI_Neuroimaging/abcd-skill/scripts/abcd_qc_summary.py +449 -0
- package/skills/06_fMRI_Neuroimaging/abcd-skill/scripts/extract_abcd_phenotype.py +292 -0
- package/skills/06_fMRI_Neuroimaging/abcd-skill/scripts/reorganize_abcd.py +387 -0
- package/skills/06_fMRI_Neuroimaging/abide-skill/SKILL.md +302 -0
- package/skills/06_fMRI_Neuroimaging/abide-skill/scripts/abide_qc_summary.py +317 -0
- package/skills/06_fMRI_Neuroimaging/abide-skill/scripts/extract_abide_phenotype.py +267 -0
- package/skills/06_fMRI_Neuroimaging/abide-skill/scripts/reorganize_abide.py +387 -0
- package/skills/06_fMRI_Neuroimaging/adhd200-skill/SKILL.md +244 -0
- package/skills/06_fMRI_Neuroimaging/adhd200-skill/scripts/adhd200_qc_summary.py +98 -0
- package/skills/06_fMRI_Neuroimaging/adhd200-skill/scripts/extract_adhd200_phenotype.py +134 -0
- package/skills/06_fMRI_Neuroimaging/adhd200-skill/scripts/reorganize_adhd200.py +206 -0
- package/skills/06_fMRI_Neuroimaging/adni-skill/SKILL.md +358 -0
- package/skills/06_fMRI_Neuroimaging/adni-skill/scripts/generate_adni_task_files.py +1305 -0
- package/skills/06_fMRI_Neuroimaging/adni-skill/scripts/generate_vqa_from_tasks.py +766 -0
- package/skills/06_fMRI_Neuroimaging/adni-skill/scripts/reorganize_adni.py +491 -0
- package/skills/06_fMRI_Neuroimaging/aibl-skill/SKILL.md +295 -0
- package/skills/06_fMRI_Neuroimaging/aibl-skill/scripts/aibl_qc_summary.py +260 -0
- package/skills/06_fMRI_Neuroimaging/aibl-skill/scripts/extract_aibl_phenotype.py +365 -0
- package/skills/06_fMRI_Neuroimaging/aibl-skill/scripts/reorganize_aibl.py +394 -0
- package/skills/06_fMRI_Neuroimaging/aomic-skill/SKILL.md +292 -0
- package/skills/06_fMRI_Neuroimaging/aomic-skill/scripts/aomic_qc_summary.py +258 -0
- package/skills/06_fMRI_Neuroimaging/aomic-skill/scripts/extract_aomic_phenotype.py +284 -0
- package/skills/06_fMRI_Neuroimaging/aomic-skill/scripts/reorganize_aomic.py +322 -0
- package/skills/06_fMRI_Neuroimaging/asl-skill/SKILL.md +168 -0
- package/skills/06_fMRI_Neuroimaging/asl-skill/scripts/compute_cbf.py +224 -0
- package/skills/06_fMRI_Neuroimaging/bids-organizer/SKILL.md +241 -0
- package/skills/06_fMRI_Neuroimaging/bold5000-skill/SKILL.md +186 -0
- package/skills/06_fMRI_Neuroimaging/bold5000-skill/scripts/bold5000_qc_summary.py +96 -0
- package/skills/06_fMRI_Neuroimaging/bold5000-skill/scripts/extract_bold5000_stimulus.py +125 -0
- package/skills/06_fMRI_Neuroimaging/bold5000-skill/scripts/reorganize_bold5000.py +102 -0
- package/skills/06_fMRI_Neuroimaging/camcan-skill/SKILL.md +213 -0
- package/skills/06_fMRI_Neuroimaging/camcan-skill/scripts/camcan_qc_summary.py +131 -0
- package/skills/06_fMRI_Neuroimaging/camcan-skill/scripts/extract_camcan_phenotype.py +145 -0
- package/skills/06_fMRI_Neuroimaging/camcan-skill/scripts/validate_camcan.py +141 -0
- package/skills/06_fMRI_Neuroimaging/cobre-skill/SKILL.md +201 -0
- package/skills/06_fMRI_Neuroimaging/cobre-skill/scripts/cobre_qc_summary.py +95 -0
- package/skills/06_fMRI_Neuroimaging/cobre-skill/scripts/extract_cobre_phenotype.py +104 -0
- package/skills/06_fMRI_Neuroimaging/cobre-skill/scripts/reorganize_cobre.py +140 -0
- package/skills/06_fMRI_Neuroimaging/conn-tool/SKILL.md +180 -0
- package/skills/06_fMRI_Neuroimaging/dcm2nii/SKILL.md +189 -0
- package/skills/06_fMRI_Neuroimaging/dmt-har-med-skill/SKILL.md +183 -0
- package/skills/06_fMRI_Neuroimaging/dmt-har-med-skill/scripts/dmt_har_med_qc_summary.py +96 -0
- package/skills/06_fMRI_Neuroimaging/dmt-har-med-skill/scripts/extract_dmt_har_med_phenotype.py +121 -0
- package/skills/06_fMRI_Neuroimaging/dmt-har-med-skill/scripts/reorganize_dmt_har_med.py +125 -0
- package/skills/06_fMRI_Neuroimaging/dwi-skill/SKILL.md +359 -0
- package/skills/06_fMRI_Neuroimaging/fmri-skill/SKILL.md +371 -0
- package/skills/06_fMRI_Neuroimaging/fmriprep-tool/SKILL.md +228 -0
- package/skills/06_fMRI_Neuroimaging/freesurfer-tool/SKILL.md +286 -0
- package/skills/06_fMRI_Neuroimaging/freesurfer-tool/scripts/freesurfer_processor.py +145 -0
- package/skills/06_fMRI_Neuroimaging/fsl-tool/SKILL.md +208 -0
- package/skills/06_fMRI_Neuroimaging/hbn-skill/SKILL.md +271 -0
- package/skills/06_fMRI_Neuroimaging/hbn-skill/scripts/extract_hbn_phenotype.py +107 -0
- package/skills/06_fMRI_Neuroimaging/hbn-skill/scripts/hbn_qc_summary.py +96 -0
- package/skills/06_fMRI_Neuroimaging/hbn-skill/scripts/reorganize_hbn.py +150 -0
- package/skills/06_fMRI_Neuroimaging/hcpa-skill/SKILL.md +210 -0
- package/skills/06_fMRI_Neuroimaging/hcpa-skill/scripts/extract_hcpa_phenotype.py +146 -0
- package/skills/06_fMRI_Neuroimaging/hcpa-skill/scripts/hcpa_qc_summary.py +120 -0
- package/skills/06_fMRI_Neuroimaging/hcpa-skill/scripts/reorganize_hcpa.py +155 -0
- package/skills/06_fMRI_Neuroimaging/hcpd-skill/SKILL.md +210 -0
- package/skills/06_fMRI_Neuroimaging/hcpd-skill/scripts/extract_hcpd_phenotype.py +148 -0
- package/skills/06_fMRI_Neuroimaging/hcpd-skill/scripts/hcpd_qc_summary.py +125 -0
- package/skills/06_fMRI_Neuroimaging/hcpd-skill/scripts/reorganize_hcpd.py +146 -0
- package/skills/06_fMRI_Neuroimaging/hcpep-skill/SKILL.md +215 -0
- package/skills/06_fMRI_Neuroimaging/hcpep-skill/scripts/extract_hcpep_phenotype.py +157 -0
- package/skills/06_fMRI_Neuroimaging/hcpep-skill/scripts/hcpep_qc_summary.py +143 -0
- package/skills/06_fMRI_Neuroimaging/hcpep-skill/scripts/reorganize_hcpep.py +146 -0
- package/skills/06_fMRI_Neuroimaging/hcppipeline-tool/SKILL.md +217 -0
- package/skills/06_fMRI_Neuroimaging/hcpya-skill/SKILL.md +214 -0
- package/skills/06_fMRI_Neuroimaging/hcpya-skill/scripts/extract_hcpya_phenotype.py +190 -0
- package/skills/06_fMRI_Neuroimaging/hcpya-skill/scripts/hcpya_qc_summary.py +152 -0
- package/skills/06_fMRI_Neuroimaging/hcpya-skill/scripts/reorganize_hcpya.py +203 -0
- package/skills/06_fMRI_Neuroimaging/ixi-skill/SKILL.md +198 -0
- package/skills/06_fMRI_Neuroimaging/ixi-skill/scripts/ixi_qc_summary.py +137 -0
- package/skills/06_fMRI_Neuroimaging/ixi-skill/scripts/reorganize_ixi.py +190 -0
- package/skills/06_fMRI_Neuroimaging/mnd-skill/SKILL.md +191 -0
- package/skills/06_fMRI_Neuroimaging/mnd-skill/scripts/extract_mnd_phenotype.py +143 -0
- package/skills/06_fMRI_Neuroimaging/mnd-skill/scripts/mnd_qc_summary.py +120 -0
- package/skills/06_fMRI_Neuroimaging/mnd-skill/scripts/validate_mnd.py +107 -0
- package/skills/06_fMRI_Neuroimaging/mschallenge-skill/SKILL.md +203 -0
- package/skills/06_fMRI_Neuroimaging/mschallenge-skill/scripts/analyze_lesions.py +119 -0
- package/skills/06_fMRI_Neuroimaging/mschallenge-skill/scripts/longitudinal_lesion.py +148 -0
- package/skills/06_fMRI_Neuroimaging/mschallenge-skill/scripts/mschallenge_qc_summary.py +132 -0
- package/skills/06_fMRI_Neuroimaging/mschallenge-skill/scripts/validate_mschallenge.py +116 -0
- package/skills/06_fMRI_Neuroimaging/nibabel-skill/SKILL.md +184 -0
- package/skills/06_fMRI_Neuroimaging/nibabel-skill/scripts/atlas_coordinate_reference.py +61 -0
- package/skills/06_fMRI_Neuroimaging/nibabel-skill/scripts/freesurfer_io_reference.py +34 -0
- package/skills/06_fMRI_Neuroimaging/nibabel-skill/scripts/nifti_inspection_reference.py +35 -0
- package/skills/06_fMRI_Neuroimaging/nifd-skill/SKILL.md +205 -0
- package/skills/06_fMRI_Neuroimaging/nifd-skill/scripts/extract_nifd_phenotype.py +132 -0
- package/skills/06_fMRI_Neuroimaging/nifd-skill/scripts/nifd_qc_summary.py +111 -0
- package/skills/06_fMRI_Neuroimaging/nifd-skill/scripts/validate_nifd.py +111 -0
- package/skills/06_fMRI_Neuroimaging/nii2dcm/SKILL.md +143 -0
- package/skills/06_fMRI_Neuroimaging/nilearn-tool/SKILL.md +266 -0
- package/skills/06_fMRI_Neuroimaging/nilearn-tool/scripts/connectome_reference.py +65 -0
- package/skills/06_fMRI_Neuroimaging/nilearn-tool/scripts/denoise_timeseries_reference.py +58 -0
- package/skills/06_fMRI_Neuroimaging/nilearn-tool/scripts/hierarchical_parcellation_reference.py +53 -0
- package/skills/06_fMRI_Neuroimaging/nilearn-tool/scripts/kmeans_parcellation_reference.py +53 -0
- package/skills/06_fMRI_Neuroimaging/nilearn-tool/scripts/preprocess_bold_reference.py +76 -0
- package/skills/06_fMRI_Neuroimaging/nilearn-tool/scripts/rest_dictlearning_reference.py +56 -0
- package/skills/06_fMRI_Neuroimaging/nilearn-tool/scripts/rest_ica_reference.py +59 -0
- package/skills/06_fMRI_Neuroimaging/nilearn-tool/scripts/second_level_glm_reference.py +58 -0
- package/skills/06_fMRI_Neuroimaging/nilearn-tool/scripts/spacenet_classifier_reference.py +59 -0
- package/skills/06_fMRI_Neuroimaging/nilearn-tool/scripts/svm_classifier_reference.py +60 -0
- package/skills/06_fMRI_Neuroimaging/nilearn-tool/scripts/task_glm_reference.py +63 -0
- package/skills/06_fMRI_Neuroimaging/nilearn-tool/scripts/zalff_summary_reference.py +109 -0
- package/skills/06_fMRI_Neuroimaging/nsd-skill/SKILL.md +210 -0
- package/skills/06_fMRI_Neuroimaging/nsd-skill/scripts/extract_nsd_stimulus.py +171 -0
- package/skills/06_fMRI_Neuroimaging/nsd-skill/scripts/nsd_qc_summary.py +142 -0
- package/skills/06_fMRI_Neuroimaging/nsd-skill/scripts/validate_nsd.py +142 -0
- package/skills/06_fMRI_Neuroimaging/oasis-skill/SKILL.md +205 -0
- package/skills/06_fMRI_Neuroimaging/oasis-skill/scripts/extract_oasis_phenotype.py +126 -0
- package/skills/06_fMRI_Neuroimaging/oasis-skill/scripts/oasis_qc_summary.py +115 -0
- package/skills/06_fMRI_Neuroimaging/oasis-skill/scripts/validate_oasis.py +119 -0
- package/skills/06_fMRI_Neuroimaging/pet-skill/SKILL.md +173 -0
- package/skills/06_fMRI_Neuroimaging/pet-skill/scripts/compute_suvr.py +202 -0
- package/skills/06_fMRI_Neuroimaging/pnc-skill/SKILL.md +206 -0
- package/skills/06_fMRI_Neuroimaging/pnc-skill/scripts/extract_pnc_phenotype.py +136 -0
- package/skills/06_fMRI_Neuroimaging/pnc-skill/scripts/pnc_qc_summary.py +116 -0
- package/skills/06_fMRI_Neuroimaging/pnc-skill/scripts/validate_pnc.py +120 -0
- package/skills/06_fMRI_Neuroimaging/ppmi-skill/SKILL.md +209 -0
- package/skills/06_fMRI_Neuroimaging/ppmi-skill/scripts/extract_ppmi_phenotype.py +138 -0
- package/skills/06_fMRI_Neuroimaging/ppmi-skill/scripts/ppmi_qc_summary.py +111 -0
- package/skills/06_fMRI_Neuroimaging/ppmi-skill/scripts/validate_ppmi.py +117 -0
- package/skills/06_fMRI_Neuroimaging/qsiprep-tool/SKILL.md +320 -0
- package/skills/06_fMRI_Neuroimaging/rest-mneta-mdd-skill/SKILL.md +215 -0
- package/skills/06_fMRI_Neuroimaging/rest-mneta-mdd-skill/scripts/extract_rest_mdd_phenotype.py +132 -0
- package/skills/06_fMRI_Neuroimaging/rest-mneta-mdd-skill/scripts/harmonize_sites.py +152 -0
- package/skills/06_fMRI_Neuroimaging/rest-mneta-mdd-skill/scripts/rest_mdd_qc_summary.py +124 -0
- package/skills/06_fMRI_Neuroimaging/rest-mneta-mdd-skill/scripts/validate_rest_mdd.py +103 -0
- package/skills/06_fMRI_Neuroimaging/smri-skill/SKILL.md +302 -0
- package/skills/06_fMRI_Neuroimaging/tcp-skill/SKILL.md +204 -0
- package/skills/06_fMRI_Neuroimaging/tcp-skill/scripts/extract_tcp_phenotype.py +139 -0
- package/skills/06_fMRI_Neuroimaging/tcp-skill/scripts/tcp_qc_summary.py +111 -0
- package/skills/06_fMRI_Neuroimaging/tcp-skill/scripts/validate_tcp.py +99 -0
- package/skills/06_fMRI_Neuroimaging/ucla-cnp-skill/SKILL.md +217 -0
- package/skills/06_fMRI_Neuroimaging/ucla-cnp-skill/scripts/extract_ucla_cnp_phenotype.py +145 -0
- package/skills/06_fMRI_Neuroimaging/ucla-cnp-skill/scripts/ucla_cnp_qc_summary.py +111 -0
- package/skills/06_fMRI_Neuroimaging/ucla-cnp-skill/scripts/validate_ucla_cnp.py +113 -0
- package/skills/06_fMRI_Neuroimaging/ukb-skill/SKILL.md +310 -0
- package/skills/06_fMRI_Neuroimaging/ukb-skill/scripts/build_ukb_survival.py +210 -0
- package/skills/06_fMRI_Neuroimaging/ukb-skill/scripts/extract_ukb_cases.py +308 -0
- package/skills/06_fMRI_Neuroimaging/ukb-skill/scripts/extract_ukb_phenotype.py +232 -0
- package/skills/06_fMRI_Neuroimaging/ukb-skill/scripts/ukb_qc_summary.py +158 -0
- package/skills/06_fMRI_Neuroimaging/wmh-segmentation/SKILL.md +133 -0
- package/skills/07_Computational_Modeling/detrending/SKILL.md +118 -0
- package/skills/07_Computational_Modeling/dictlearning/SKILL.md +122 -0
- package/skills/07_Computational_Modeling/filtering/SKILL.md +121 -0
- package/skills/07_Computational_Modeling/glm/SKILL.md +153 -0
- package/skills/07_Computational_Modeling/hierarchical/SKILL.md +121 -0
- package/skills/07_Computational_Modeling/ica/SKILL.md +122 -0
- package/skills/07_Computational_Modeling/kmeans/SKILL.md +119 -0
- package/skills/07_Computational_Modeling/run_models/SKILL.md +427 -0
- package/skills/07_Computational_Modeling/spacenet/SKILL.md +122 -0
- package/skills/07_Computational_Modeling/svm/SKILL.md +120 -0
- package/skills/08_Computational_Neuroscience/brain_gnn/SKILL.md +183 -0
- package/skills/08_Computational_Neuroscience/dipy-tool/SKILL.md +239 -0
- package/skills/08_Computational_Neuroscience/dipy-tool/scripts/dti_metrics_reference.py +70 -0
- package/skills/08_Computational_Neuroscience/dipy-tool/scripts/load_and_mask_reference.py +76 -0
- package/skills/08_Computational_Neuroscience/dipy-tool/scripts/roi_stats_reference.py +59 -0
- package/skills/08_Computational_Neuroscience/fm_app/SKILL.md +195 -0
- package/skills/08_Computational_Neuroscience/neurostorm/SKILL.md +151 -0
- package/skills/13_Visualization/brain-visualization/SKILL.md +191 -0
- package/skills/13_Visualization/brain-visualization/scripts/connectome_reference.py +108 -0
- package/skills/13_Visualization/brain-visualization/scripts/freesurfer_ply_reference.py +54 -0
- package/skills/13_Visualization/brain-visualization/scripts/zalff_summary_reference.py +116 -0
- package/skills/13_Visualization/ethoclaw-paper-figure-layout/SKILL.md +78 -0
- package/skills/13_Visualization/ethoclaw-paper-figure-layout/assets/naturecomm_figures.tex +74 -0
- package/skills/13_Visualization/ethoclaw-paper-figure-layout/scripts/layout_results_foldered.py +579 -0
- package/skills/14_Writing/overleaf-skill/SKILL.md +184 -0
- package/skills/14_Writing/overleaf-skill/scripts/install.sh +30 -0
- package/skills/14_Writing/paper-writing/SKILL.md +146 -0
- package/skills/14_Writing/paper-writing/scripts/data_statement_templates.py +164 -0
- package/skills/14_Writing/paper-writing/scripts/figure_templates.py +315 -0
- package/skills/14_Writing/paper-writing/scripts/nature_figure_style.py +214 -0
- package/skills/14_Writing/paper-writing/scripts/section_phrasebank.py +246 -0
- package/skills/16_Animal_Behavior/deeplabcut/SKILL.md +154 -0
- package/skills/16_Animal_Behavior/deeplabcut/references/3d-pose.md +89 -0
- package/skills/16_Animal_Behavior/deeplabcut/references/maDLC.md +123 -0
- package/skills/16_Animal_Behavior/deeplabcut/references/modelzoo.md +98 -0
- package/skills/16_Animal_Behavior/deeplabcut/references/standard-pipeline.md +165 -0
- package/skills/16_Animal_Behavior/deeplabcut/references/utilities.md +146 -0
- package/skills/16_Animal_Behavior/ethoclaw-analysis-report/SKILL.md +274 -0
- package/skills/16_Animal_Behavior/ethoclaw-analysis-report/assets/report_template_en.html +112 -0
- package/skills/16_Animal_Behavior/ethoclaw-analysis-report/assets/report_template_en.md +21 -0
- package/skills/16_Animal_Behavior/ethoclaw-analysis-report/assets/section_templates/cluster-section.md +5 -0
- package/skills/16_Animal_Behavior/ethoclaw-analysis-report/assets/section_templates/heatmap-section.md +5 -0
- package/skills/16_Animal_Behavior/ethoclaw-analysis-report/assets/section_templates/integrated-interpretation.md +3 -0
- package/skills/16_Animal_Behavior/ethoclaw-analysis-report/assets/section_templates/overview.md +3 -0
- package/skills/16_Animal_Behavior/ethoclaw-analysis-report/assets/section_templates/project-summary.md +3 -0
- package/skills/16_Animal_Behavior/ethoclaw-analysis-report/assets/section_templates/radar-section.md +5 -0
- package/skills/16_Animal_Behavior/ethoclaw-analysis-report/assets/section_templates/raw-trajectory.md +3 -0
- package/skills/16_Animal_Behavior/ethoclaw-analysis-report/assets/section_templates/sample-check.md +3 -0
- package/skills/16_Animal_Behavior/ethoclaw-analysis-report/assets/section_templates/single-subject-section.md +3 -0
- package/skills/16_Animal_Behavior/ethoclaw-analysis-report/assets/section_templates/stats-section.md +5 -0
- package/skills/16_Animal_Behavior/ethoclaw-analysis-report/references/experiment-types/epm.md +52 -0
- package/skills/16_Animal_Behavior/ethoclaw-analysis-report/references/experiment-types/fst.md +37 -0
- package/skills/16_Animal_Behavior/ethoclaw-analysis-report/references/experiment-types/nor.md +39 -0
- package/skills/16_Animal_Behavior/ethoclaw-analysis-report/references/experiment-types/oft.md +43 -0
- package/skills/16_Animal_Behavior/ethoclaw-analysis-report/references/experiment-types/tcst.md +45 -0
- package/skills/16_Animal_Behavior/ethoclaw-analysis-report/references/experiment-types/tst.md +36 -0
- package/skills/16_Animal_Behavior/ethoclaw-analysis-report/references/input-types.md +59 -0
- package/skills/16_Animal_Behavior/ethoclaw-analysis-report/references/interpretation-guardrails.md +45 -0
- package/skills/16_Animal_Behavior/ethoclaw-analysis-report/references/metadata-schema.md +57 -0
- package/skills/16_Animal_Behavior/ethoclaw-analysis-report/references/report-sections.md +86 -0
- package/skills/16_Animal_Behavior/ethoclaw-analysis-report/references/section-selection-rules.md +169 -0
- package/skills/16_Animal_Behavior/ethoclaw-analysis-report/scripts/build_report_manifest.py +27 -0
- package/skills/16_Animal_Behavior/ethoclaw-analysis-report/scripts/render_report.py +34 -0
- package/skills/16_Animal_Behavior/ethoclaw-analysis-report/scripts/report_utils.py +1121 -0
- package/skills/16_Animal_Behavior/ethoclaw-animal-grounding/SKILL.md +390 -0
- package/skills/16_Animal_Behavior/ethoclaw-animal-grounding/reference_code.py +98 -0
- package/skills/16_Animal_Behavior/ethoclaw-animal-pose-estimation/SKILL.md +336 -0
- package/skills/16_Animal_Behavior/ethoclaw-kinematic-parameter-generator/README.md +21 -0
- package/skills/16_Animal_Behavior/ethoclaw-kinematic-parameter-generator/SKILL.md +41 -0
- package/skills/16_Animal_Behavior/ethoclaw-kinematic-parameter-generator/batch_kinematic_generator.py +663 -0
- package/skills/16_Animal_Behavior/ethoclaw-kinematic-parameter-generator/config.json +19 -0
- package/skills/16_Animal_Behavior/ethoclaw-kinematic-parameter-generator/generate_kinematic_parameter.py +401 -0
- package/skills/16_Animal_Behavior/ethoclaw-kinematic-parameter-generator/kinematic_generator.py +265 -0
- package/skills/16_Animal_Behavior/ethoclaw-multiparameter-clustermap-generate/SKILL.md +72 -0
- package/skills/16_Animal_Behavior/ethoclaw-multiparameter-clustermap-generate/references/config.example.toml +56 -0
- package/skills/16_Animal_Behavior/ethoclaw-multiparameter-clustermap-generate/scripts/cluster_all_params.py +232 -0
- package/skills/16_Animal_Behavior/ethoclaw-multiparameter-clustermap-generate/scripts/cluster_all_params_from_config.py +236 -0
- package/skills/16_Animal_Behavior/ethoclaw-multiparameter-radar-generate/SKILL.md +68 -0
- package/skills/16_Animal_Behavior/ethoclaw-multiparameter-radar-generate/references/notes.md +5 -0
- package/skills/16_Animal_Behavior/ethoclaw-multiparameter-radar-generate/scripts/plot_h5_radar.py +513 -0
- package/skills/16_Animal_Behavior/ethoclaw-multiparameter-violin-stats-generate/SKILL.md +52 -0
- package/skills/16_Animal_Behavior/ethoclaw-multiparameter-violin-stats-generate/config.toml +81 -0
- package/skills/16_Animal_Behavior/ethoclaw-multiparameter-violin-stats-generate/references/stats-rule.md +18 -0
- package/skills/16_Animal_Behavior/ethoclaw-multiparameter-violin-stats-generate/scripts/h5_inspect.py +79 -0
- package/skills/16_Animal_Behavior/ethoclaw-multiparameter-violin-stats-generate/scripts/h5_violin_batch.py +624 -0
- package/skills/16_Animal_Behavior/ethoclaw-multiparameter-violin-stats-generate/scripts/h5_violin_stats.py +438 -0
- package/skills/16_Animal_Behavior/ethoclaw-trajectory-velocity-heatmap-generate/SKILL.md +280 -0
- package/skills/16_Animal_Behavior/ethoclaw-trajectory-velocity-heatmap-generate/core_scripts/heatmap_trajectory.py +790 -0
- package/skills/16_Animal_Behavior/ethoclaw-trajectory-velocity-heatmap-generate/core_scripts/heatmap_velocity.py +855 -0
- package/skills/16_Animal_Behavior/ethoclaw-trajectory-velocity-heatmap-generate/reference_data/reference_2d.csv +101 -0
- package/skills/16_Animal_Behavior/ethoclaw-trajectory-velocity-heatmap-generate/reference_data/reference_2d.h5 +0 -0
- package/skills/16_Animal_Behavior/ethoclaw-trajectory-velocity-heatmap-generate/reference_data/reference_data_readme.md +126 -0
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: beautiful-log
|
|
3
|
+
description: "Use this skill after a conversation or task is completed when the user wants a clean, beautiful HTML chat log. It keeps only direct NeuroClaw <-> User dialogue, filters out tool calls / internal traces / SKILL.md reading notes, and renders distinct colored message cards for each side."
|
|
4
|
+
license: MIT License (NeuroClaw custom skill - freely modifiable within the project)
|
|
5
|
+
layer: base
|
|
6
|
+
skill_type: tool
|
|
7
|
+
dependencies: []
|
|
8
|
+
---
|
|
9
|
+
# Beautiful Log (Dialogue-to-HTML)
|
|
10
|
+
|
|
11
|
+
## Overview
|
|
12
|
+
`beautiful-log` converts a conversation transcript into a clean, shareable HTML report.
|
|
13
|
+
|
|
14
|
+
It is designed for research logging and progress tracking, while removing noisy execution traces.
|
|
15
|
+
|
|
16
|
+
This skill:
|
|
17
|
+
- Keeps only direct dialogue between **User** and **NeuroClaw**.
|
|
18
|
+
- Filters out tool/system/internal content (for example: tool calls, file-read traces, SKILL.md parsing notes, hidden reasoning traces).
|
|
19
|
+
- Renders a polished HTML page with **different background colors** for User and NeuroClaw messages.
|
|
20
|
+
- Preserves message order and basic formatting (line breaks, code blocks as plain text).
|
|
21
|
+
|
|
22
|
+
## When to Call This Skill
|
|
23
|
+
- A task is finished and the user wants a readable conversation archive.
|
|
24
|
+
- The user asks for an exportable discussion record.
|
|
25
|
+
- Weekly or daily research summary requires clean chat evidence.
|
|
26
|
+
|
|
27
|
+
## Core Workflow (Never Bypassed)
|
|
28
|
+
1. Receive input transcript file path (JSON, JSONL, or simple Markdown text export).
|
|
29
|
+
2. Parse and normalize messages to a unified schema: `role`, `content`, `timestamp` (optional).
|
|
30
|
+
3. Keep only `user` and `assistant` / `neuroclaw` roles.
|
|
31
|
+
4. Remove internal/tool/system traces.
|
|
32
|
+
5. Generate HTML cards:
|
|
33
|
+
- User: warm light background card.
|
|
34
|
+
- NeuroClaw: cool light background card.
|
|
35
|
+
6. Save output HTML to user-specified location.
|
|
36
|
+
7. Return summary: kept messages, filtered messages, output path.
|
|
37
|
+
|
|
38
|
+
## Input / Output
|
|
39
|
+
- Input: conversation export file (recommended JSON/JSONL).
|
|
40
|
+
- Output: standalone HTML file (no external assets required).
|
|
41
|
+
|
|
42
|
+
## Recommended Script
|
|
43
|
+
Use:
|
|
44
|
+
- `scripts/beautiful_log.py`
|
|
45
|
+
|
|
46
|
+
Example:
|
|
47
|
+
```bash
|
|
48
|
+
python skills/beautiful-log/scripts/beautiful_log.py \
|
|
49
|
+
--input logs/session_2026-04-05.jsonl \
|
|
50
|
+
--output logs/session_2026-04-05_beautiful.html \
|
|
51
|
+
--title "NeuroClaw Session Log"
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Safety and Data Rules
|
|
55
|
+
- Do not include hidden reasoning or tool internals in final export.
|
|
56
|
+
- Keep only direct dialogue content.
|
|
57
|
+
- If sensitive information appears in user messages, recommend manual redaction before sharing externally.
|
|
58
|
+
|
|
59
|
+
## Complementary / Related Skills
|
|
60
|
+
- `claw-shell` (safe command execution)
|
|
61
|
+
|
|
62
|
+
Created At: 2026-04-05 23:26 HKT
|
|
63
|
+
Last Updated At: 2026-04-05 23:26 HKT
|
|
64
|
+
Author: chengwang96
|
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Generate a clean HTML conversation log for NeuroClaw sessions.
|
|
3
|
+
|
|
4
|
+
This script keeps only direct User <-> NeuroClaw dialogue and filters
|
|
5
|
+
system/tool/internal traces when they are available in the transcript format.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
import argparse
|
|
11
|
+
import html
|
|
12
|
+
import json
|
|
13
|
+
from datetime import datetime
|
|
14
|
+
from pathlib import Path
|
|
15
|
+
from typing import Any, Dict, Iterable, List, Optional
|
|
16
|
+
|
|
17
|
+
ALLOWED_ROLES = {"user", "assistant", "neuroclaw"}
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def _normalize_role(raw_role: Optional[str]) -> str:
|
|
21
|
+
if not raw_role:
|
|
22
|
+
return ""
|
|
23
|
+
role = str(raw_role).strip().lower()
|
|
24
|
+
if role in {"assistant", "neuroclaw", "ai", "copilot"}:
|
|
25
|
+
return "assistant"
|
|
26
|
+
if role in {"user", "human"}:
|
|
27
|
+
return "user"
|
|
28
|
+
return role
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def _extract_text(content: Any) -> str:
|
|
32
|
+
if content is None:
|
|
33
|
+
return ""
|
|
34
|
+
|
|
35
|
+
if isinstance(content, str):
|
|
36
|
+
return content.strip()
|
|
37
|
+
|
|
38
|
+
if isinstance(content, list):
|
|
39
|
+
parts: List[str] = []
|
|
40
|
+
for item in content:
|
|
41
|
+
if isinstance(item, str):
|
|
42
|
+
parts.append(item)
|
|
43
|
+
elif isinstance(item, dict):
|
|
44
|
+
text = item.get("text") or item.get("content")
|
|
45
|
+
if isinstance(text, str):
|
|
46
|
+
parts.append(text)
|
|
47
|
+
return "\n".join(p.strip() for p in parts if p and p.strip())
|
|
48
|
+
|
|
49
|
+
if isinstance(content, dict):
|
|
50
|
+
text = content.get("text") or content.get("content")
|
|
51
|
+
if isinstance(text, str):
|
|
52
|
+
return text.strip()
|
|
53
|
+
|
|
54
|
+
return ""
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def _extract_message(item: Dict[str, Any]) -> Optional[Dict[str, str]]:
|
|
58
|
+
role = _normalize_role(item.get("role") or item.get("sender") or item.get("author"))
|
|
59
|
+
if role not in ALLOWED_ROLES:
|
|
60
|
+
return None
|
|
61
|
+
|
|
62
|
+
text = _extract_text(item.get("content") or item.get("message") or item.get("text"))
|
|
63
|
+
if not text:
|
|
64
|
+
return None
|
|
65
|
+
|
|
66
|
+
# Filter obvious internal/tool traces that may leak into assistant content.
|
|
67
|
+
lowered = text.lower()
|
|
68
|
+
blocked_markers = [
|
|
69
|
+
"tool call",
|
|
70
|
+
"read_file",
|
|
71
|
+
"list_dir",
|
|
72
|
+
"apply_patch",
|
|
73
|
+
"internal reasoning",
|
|
74
|
+
"skill.md",
|
|
75
|
+
"trace id",
|
|
76
|
+
]
|
|
77
|
+
if any(marker in lowered for marker in blocked_markers):
|
|
78
|
+
return None
|
|
79
|
+
|
|
80
|
+
timestamp = str(item.get("timestamp") or item.get("time") or "")
|
|
81
|
+
return {"role": role, "content": text, "timestamp": timestamp}
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
def _load_json(path: Path) -> Iterable[Dict[str, Any]]:
|
|
85
|
+
data = json.loads(path.read_text(encoding="utf-8"))
|
|
86
|
+
if isinstance(data, list):
|
|
87
|
+
return [obj for obj in data if isinstance(obj, dict)]
|
|
88
|
+
|
|
89
|
+
if isinstance(data, dict):
|
|
90
|
+
for key in ("messages", "conversation", "items", "chat"):
|
|
91
|
+
value = data.get(key)
|
|
92
|
+
if isinstance(value, list):
|
|
93
|
+
return [obj for obj in value if isinstance(obj, dict)]
|
|
94
|
+
|
|
95
|
+
return []
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
def _load_jsonl(path: Path) -> Iterable[Dict[str, Any]]:
|
|
99
|
+
rows: List[Dict[str, Any]] = []
|
|
100
|
+
for line in path.read_text(encoding="utf-8").splitlines():
|
|
101
|
+
text = line.strip()
|
|
102
|
+
if not text:
|
|
103
|
+
continue
|
|
104
|
+
try:
|
|
105
|
+
obj = json.loads(text)
|
|
106
|
+
except json.JSONDecodeError:
|
|
107
|
+
continue
|
|
108
|
+
if isinstance(obj, dict):
|
|
109
|
+
rows.append(obj)
|
|
110
|
+
return rows
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
def _load_markdown(path: Path) -> Iterable[Dict[str, Any]]:
|
|
114
|
+
messages: List[Dict[str, Any]] = []
|
|
115
|
+
current_role = ""
|
|
116
|
+
buffer: List[str] = []
|
|
117
|
+
|
|
118
|
+
for line in path.read_text(encoding="utf-8").splitlines():
|
|
119
|
+
stripped = line.strip()
|
|
120
|
+
if stripped.lower().startswith(("user:", "neuroclaw:", "assistant:")):
|
|
121
|
+
if current_role and buffer:
|
|
122
|
+
messages.append({"role": current_role, "content": "\n".join(buffer).strip()})
|
|
123
|
+
head, body = stripped.split(":", 1)
|
|
124
|
+
current_role = _normalize_role(head)
|
|
125
|
+
buffer = [body.strip()] if body.strip() else []
|
|
126
|
+
elif current_role:
|
|
127
|
+
buffer.append(line)
|
|
128
|
+
|
|
129
|
+
if current_role and buffer:
|
|
130
|
+
messages.append({"role": current_role, "content": "\n".join(buffer).strip()})
|
|
131
|
+
|
|
132
|
+
return messages
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
def load_messages(path: Path) -> List[Dict[str, str]]:
|
|
136
|
+
suffix = path.suffix.lower()
|
|
137
|
+
if suffix == ".json":
|
|
138
|
+
raw = _load_json(path)
|
|
139
|
+
elif suffix == ".jsonl":
|
|
140
|
+
raw = _load_jsonl(path)
|
|
141
|
+
elif suffix in {".md", ".txt"}:
|
|
142
|
+
raw = _load_markdown(path)
|
|
143
|
+
else:
|
|
144
|
+
raise ValueError(f"Unsupported input format: {suffix}")
|
|
145
|
+
|
|
146
|
+
result: List[Dict[str, str]] = []
|
|
147
|
+
for item in raw:
|
|
148
|
+
normalized = _extract_message(item)
|
|
149
|
+
if normalized is not None:
|
|
150
|
+
result.append(normalized)
|
|
151
|
+
return result
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
def render_html(messages: List[Dict[str, str]], title: str) -> str:
|
|
155
|
+
generated_at = datetime.now().astimezone().isoformat(timespec="seconds")
|
|
156
|
+
|
|
157
|
+
cards: List[str] = []
|
|
158
|
+
for msg in messages:
|
|
159
|
+
role = msg["role"]
|
|
160
|
+
speaker = "User" if role == "user" else "NeuroClaw"
|
|
161
|
+
css = "msg-user" if role == "user" else "msg-neuroclaw"
|
|
162
|
+
timestamp = html.escape(msg["timestamp"]) if msg["timestamp"] else ""
|
|
163
|
+
meta = f"<div class=\"meta\">{speaker}{(' · ' + timestamp) if timestamp else ''}</div>"
|
|
164
|
+
body = html.escape(msg["content"]).replace("\n", "<br>")
|
|
165
|
+
cards.append(f"<article class=\"msg {css}\">{meta}<div class=\"body\">{body}</div></article>")
|
|
166
|
+
|
|
167
|
+
cards_html = "\n".join(cards) if cards else "<p class=\"empty\">No direct User/NeuroClaw dialogue found.</p>"
|
|
168
|
+
|
|
169
|
+
return f"""<!doctype html>
|
|
170
|
+
<html lang=\"en\">
|
|
171
|
+
<head>
|
|
172
|
+
<meta charset=\"utf-8\" />
|
|
173
|
+
<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />
|
|
174
|
+
<title>{html.escape(title)}</title>
|
|
175
|
+
<style>
|
|
176
|
+
:root {{
|
|
177
|
+
--bg: #f7f8fb;
|
|
178
|
+
--panel: #ffffff;
|
|
179
|
+
--text: #1f2430;
|
|
180
|
+
--muted: #5a6475;
|
|
181
|
+
--user-bg: #fff4de;
|
|
182
|
+
--user-border: #f4c46a;
|
|
183
|
+
--nc-bg: #e8f3ff;
|
|
184
|
+
--nc-border: #8cb9ff;
|
|
185
|
+
}}
|
|
186
|
+
* {{ box-sizing: border-box; }}
|
|
187
|
+
body {{
|
|
188
|
+
margin: 0;
|
|
189
|
+
background: linear-gradient(180deg, #f3f6fb 0%, #f8fafc 100%);
|
|
190
|
+
color: var(--text);
|
|
191
|
+
font-family: "Segoe UI", "Helvetica Neue", Arial, sans-serif;
|
|
192
|
+
line-height: 1.55;
|
|
193
|
+
}}
|
|
194
|
+
.wrap {{
|
|
195
|
+
max-width: 980px;
|
|
196
|
+
margin: 0 auto;
|
|
197
|
+
padding: 32px 20px 48px;
|
|
198
|
+
}}
|
|
199
|
+
.hero {{
|
|
200
|
+
background: var(--panel);
|
|
201
|
+
border: 1px solid #e7ebf3;
|
|
202
|
+
border-radius: 14px;
|
|
203
|
+
padding: 18px 20px;
|
|
204
|
+
box-shadow: 0 8px 30px rgba(31, 36, 48, 0.06);
|
|
205
|
+
margin-bottom: 18px;
|
|
206
|
+
}}
|
|
207
|
+
h1 {{ margin: 0 0 8px; font-size: 1.35rem; }}
|
|
208
|
+
.sub {{ color: var(--muted); font-size: 0.94rem; }}
|
|
209
|
+
.msg {{
|
|
210
|
+
border-radius: 14px;
|
|
211
|
+
border: 1px solid transparent;
|
|
212
|
+
padding: 14px 16px;
|
|
213
|
+
margin: 12px 0;
|
|
214
|
+
box-shadow: 0 4px 14px rgba(20, 24, 34, 0.05);
|
|
215
|
+
}}
|
|
216
|
+
.msg-user {{ background: var(--user-bg); border-color: var(--user-border); }}
|
|
217
|
+
.msg-neuroclaw {{ background: var(--nc-bg); border-color: var(--nc-border); }}
|
|
218
|
+
.meta {{ font-size: 0.83rem; color: #3f4a5d; font-weight: 600; margin-bottom: 6px; }}
|
|
219
|
+
.body {{ white-space: normal; word-break: break-word; }}
|
|
220
|
+
.empty {{
|
|
221
|
+
color: #6b7486;
|
|
222
|
+
font-style: italic;
|
|
223
|
+
background: #fff;
|
|
224
|
+
border: 1px dashed #c8d2e5;
|
|
225
|
+
border-radius: 10px;
|
|
226
|
+
padding: 12px;
|
|
227
|
+
}}
|
|
228
|
+
footer {{
|
|
229
|
+
margin-top: 22px;
|
|
230
|
+
color: #667086;
|
|
231
|
+
font-size: 0.82rem;
|
|
232
|
+
}}
|
|
233
|
+
</style>
|
|
234
|
+
</head>
|
|
235
|
+
<body>
|
|
236
|
+
<main class=\"wrap\">
|
|
237
|
+
<section class=\"hero\">
|
|
238
|
+
<h1>{html.escape(title)}</h1>
|
|
239
|
+
<div class=\"sub\">Beautiful dialogue log containing only direct User and NeuroClaw messages.</div>
|
|
240
|
+
</section>
|
|
241
|
+
{cards_html}
|
|
242
|
+
<footer>Generated at {html.escape(generated_at)}.</footer>
|
|
243
|
+
</main>
|
|
244
|
+
</body>
|
|
245
|
+
</html>
|
|
246
|
+
"""
|
|
247
|
+
|
|
248
|
+
|
|
249
|
+
def main() -> None:
|
|
250
|
+
parser = argparse.ArgumentParser(description="Generate a beautiful HTML log for NeuroClaw dialogue.")
|
|
251
|
+
parser.add_argument("--input", required=True, help="Input transcript file (.json, .jsonl, .md, .txt)")
|
|
252
|
+
parser.add_argument("--output", required=True, help="Output HTML path")
|
|
253
|
+
parser.add_argument("--title", default="NeuroClaw Conversation Log", help="HTML page title")
|
|
254
|
+
args = parser.parse_args()
|
|
255
|
+
|
|
256
|
+
input_path = Path(args.input).expanduser().resolve()
|
|
257
|
+
output_path = Path(args.output).expanduser().resolve()
|
|
258
|
+
|
|
259
|
+
if not input_path.exists():
|
|
260
|
+
raise FileNotFoundError(f"Input file does not exist: {input_path}")
|
|
261
|
+
|
|
262
|
+
messages = load_messages(input_path)
|
|
263
|
+
html_text = render_html(messages, args.title)
|
|
264
|
+
|
|
265
|
+
output_path.parent.mkdir(parents=True, exist_ok=True)
|
|
266
|
+
output_path.write_text(html_text, encoding="utf-8")
|
|
267
|
+
|
|
268
|
+
print(f"Input: {input_path}")
|
|
269
|
+
print(f"Output: {output_path}")
|
|
270
|
+
print(f"Kept messages: {len(messages)}")
|
|
271
|
+
|
|
272
|
+
|
|
273
|
+
if __name__ == "__main__":
|
|
274
|
+
main()
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ethoclaw-daily-paper
|
|
3
|
+
description: "Search arXiv and PubMed for research papers, rank candidates by title only, then read the title and abstract of the selected Top 5 in a single session and write a Markdown digest directly."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Top 5 Digest
|
|
7
|
+
|
|
8
|
+
Use the bundled scripts. Prefer a single-session workflow.
|
|
9
|
+
|
|
10
|
+
## Default operating mode
|
|
11
|
+
|
|
12
|
+
The default flow is:
|
|
13
|
+
|
|
14
|
+
1. Run retrieval once.
|
|
15
|
+
2. Read `candidate_titles.md` only and choose Top 5 by title.
|
|
16
|
+
3. After Top 5 is fixed, read only those 5 papers' titles and abstracts.
|
|
17
|
+
4. Write or render the final Markdown directly.
|
|
18
|
+
|
|
19
|
+
Do not default to a parent session plus sub-session split.
|
|
20
|
+
Do not default to reading the full candidate pool for ranking.
|
|
21
|
+
Do not default to building large intermediate review artifacts unless the user asks.
|
|
22
|
+
|
|
23
|
+
## Required output style
|
|
24
|
+
|
|
25
|
+
For each selected paper, the output should include:
|
|
26
|
+
|
|
27
|
+
- title
|
|
28
|
+
- selection reason
|
|
29
|
+
- one digest block
|
|
30
|
+
|
|
31
|
+
That single digest block should still cover the background, methods, main findings, significance, and limitations, but it should be written as one continuous explanation. You may use natural paragraph breaks for readability.
|
|
32
|
+
|
|
33
|
+
The digest should be written from the English title and abstract. If the abstract is not enough to support a strong claim, say so explicitly inside the digest.
|
|
34
|
+
|
|
35
|
+
## Recommended single-session workflow
|
|
36
|
+
|
|
37
|
+
1. Review `assets/config.template.yaml` only if the user wants narrower or broader coverage.
|
|
38
|
+
2. Run:
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
<python3-interpreter> scripts/run_pipeline.py --output-dir ./runs/20260318-daily/work
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
3. Read:
|
|
45
|
+
- `work/candidate_titles.md`
|
|
46
|
+
|
|
47
|
+
4. Choose Top 5 using titles only.
|
|
48
|
+
|
|
49
|
+
5. Render a direct final-digest skeleton from the selected indexes:
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
<python3-interpreter> scripts/build_top5_digest.py \
|
|
53
|
+
--input ./runs/20260318-daily/work/merged.json \
|
|
54
|
+
--paper-indexes 1,2,3,4,5 \
|
|
55
|
+
--direct-md-output ./runs/20260318-daily/work/final_digest.md \
|
|
56
|
+
--generator-label same-agent
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
6. Open `work/final_digest.md`.
|
|
60
|
+
|
|
61
|
+
7. For each selected paper:
|
|
62
|
+
- read the English title already present in the section header
|
|
63
|
+
- read the English abstract already embedded in that section
|
|
64
|
+
- write the title, selection reason, and a single digest block directly into the same Markdown file
|
|
65
|
+
|
|
66
|
+
8. When complete, copy the Markdown into the desired output path.
|
|
67
|
+
|
|
68
|
+
## Optional JSON workflow
|
|
69
|
+
|
|
70
|
+
If you still want a structured intermediate packet, use:
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
<python3-interpreter> scripts/build_top5_digest.py \
|
|
74
|
+
--input ./runs/20260318-daily/work/merged.json \
|
|
75
|
+
--paper-indexes 1,2,3,4,5 \
|
|
76
|
+
--agent-json-output ./runs/20260318-daily/work/top5_agent_packet.json \
|
|
77
|
+
--review-md-output ./runs/20260318-daily/work/top5_agent_packet.md
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Then fill the JSON and render:
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
<python3-interpreter> scripts/build_top5_digest.py \
|
|
84
|
+
--from-agent-json ./runs/20260318-daily/work/top5_agent_packet.json \
|
|
85
|
+
--output ./runs/20260318-daily/work/final_digest.md \
|
|
86
|
+
--generator-label same-agent
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
Use this only when a structured intermediate artifact is genuinely helpful.
|
|
90
|
+
|
|
91
|
+
## Resources
|
|
92
|
+
|
|
93
|
+
### `scripts/run_pipeline.py`
|
|
94
|
+
|
|
95
|
+
- One-shot retrieval entry point.
|
|
96
|
+
- Writes `arxiv.json`, `pubmed.json`, `merged.json`, `candidate_pool.md`, and `candidate_titles.md`.
|
|
97
|
+
- `candidate_titles.md` is the default ranking surface.
|
|
98
|
+
|
|
99
|
+
### `scripts/build_top5_digest.py`
|
|
100
|
+
|
|
101
|
+
- Builds an optional structured packet for the selected papers.
|
|
102
|
+
- Can render the final digest from a completed packet.
|
|
103
|
+
- Can now also render a final Markdown skeleton directly from `merged.json` and selected indexes with `--direct-md-output`.
|
|
104
|
+
|
|
105
|
+
### `assets/top5_digest_template.md`
|
|
106
|
+
|
|
107
|
+
- Final Markdown wrapper.
|
|
108
|
+
- Keep placeholder names unchanged unless the rendering script changes too.
|
|
109
|
+
|
|
110
|
+
### `assets/config.template.yaml`
|
|
111
|
+
|
|
112
|
+
- Tune queries, include keywords, exclude keywords, and source weights.
|
|
113
|
+
|
|
114
|
+
## Writing guidance
|
|
115
|
+
|
|
116
|
+
When drafting the digest:
|
|
117
|
+
|
|
118
|
+
- keep the wording precise rather than promotional
|
|
119
|
+
- preserve species, brain regions, behavioral paradigms, and recording or manipulation methods when available
|
|
120
|
+
- make findings concrete rather than generic
|
|
121
|
+
- explain why the paper matters for neuroethology or behavioral neuroscience
|
|
122
|
+
- call out uncertainty when the abstract alone is insufficient
|
|
123
|
+
- do not split the digest with subsection headings; if needed, use one or two natural paragraph breaks only
|
|
124
|
+
|
|
125
|
+
## Notes
|
|
126
|
+
|
|
127
|
+
- Use any working Python 3 interpreter on the current machine. On some Windows setups this may be a full interpreter path rather than `python3`.
|
|
128
|
+
- Keep PubMed weighting above arXiv when published papers should outrank preprints.
|
|
129
|
+
- The time-consuming part is usually agent writing, not retrieval, so keep ranking title-only unless the user asks for deeper triage.
|
|
130
|
+
- Do not call an external summarization API.
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# Neuroethology Top 5 digest config
|
|
2
|
+
|
|
3
|
+
query: all:((neuroethology OR neuroscience OR "behavioral neuroscience" OR "behavioural neuroscience" OR "neural circuit" OR electrophysiology OR "calcium imaging" OR "neural recording" OR "neural decoding") AND (behavior OR behaviour OR "animal behavior" OR "animal behaviour" OR locomotion OR vocalization OR courtship OR foraging OR decision-making OR zebrafish OR drosophila OR rodent OR mouse OR songbird OR bat OR primate))
|
|
4
|
+
pubmed_query: (((neuroethology[tiab] OR neuroscience[tiab] OR "behavioral neuroscience"[tiab] OR "behavioural neuroscience"[tiab] OR "Neural Circuits"[mh] OR electrophysiology[tiab] OR "calcium imaging"[tiab] OR "neural recording"[tiab] OR "neural decoding"[tiab])) AND (("Behavior, Animal"[mh] OR behavior[tiab] OR behaviour[tiab] OR "animal behavior"[tiab] OR "animal behaviour"[tiab] OR locomotion[tiab] OR vocalization[tiab] OR courtship[tiab] OR foraging[tiab] OR decision-making[tiab]) AND (zebrafish[tiab] OR drosophila[tiab] OR rodent[tiab] OR mouse[tiab] OR songbird[tiab] OR bat[tiab] OR primate[tiab] OR animal[tiab])))
|
|
5
|
+
max_results: 80
|
|
6
|
+
pubmed_max_results: 80
|
|
7
|
+
source_weight_pubmed: 1.25
|
|
8
|
+
source_weight_arxiv: 1.0
|
|
9
|
+
|
|
10
|
+
include_keywords:
|
|
11
|
+
- neuroethology
|
|
12
|
+
- behavioral neuroscience
|
|
13
|
+
- behavioural neuroscience
|
|
14
|
+
- animal behavior
|
|
15
|
+
- animal behaviour
|
|
16
|
+
- neural circuit
|
|
17
|
+
- neural activity
|
|
18
|
+
- electrophysiology
|
|
19
|
+
- calcium imaging
|
|
20
|
+
- neural recording
|
|
21
|
+
- neural decoding
|
|
22
|
+
- behavior analysis
|
|
23
|
+
- locomotion
|
|
24
|
+
- vocalization
|
|
25
|
+
- courtship
|
|
26
|
+
- foraging
|
|
27
|
+
- decision-making
|
|
28
|
+
- social behavior
|
|
29
|
+
- zebrafish
|
|
30
|
+
- drosophila
|
|
31
|
+
- rodent
|
|
32
|
+
- mouse
|
|
33
|
+
- songbird
|
|
34
|
+
- bat
|
|
35
|
+
- primate
|
|
36
|
+
|
|
37
|
+
exclude_keywords:
|
|
38
|
+
- large language model
|
|
39
|
+
- llm
|
|
40
|
+
- robot
|
|
41
|
+
- robotic
|
|
42
|
+
- robotics
|
|
43
|
+
- quadruped
|
|
44
|
+
- quadrupedal
|
|
45
|
+
- text-to-image
|
|
46
|
+
- image generation
|
|
47
|
+
- diffusion model for images
|
|
48
|
+
- recommender system
|
|
49
|
+
- blood glucose
|
|
50
|
+
- scleral
|
|
51
|
+
- stock prediction
|
|
52
|
+
- benchmark only
|
|
53
|
+
- jailbreak
|
|
54
|
+
- code generation
|