@pikaa-ai/pikaa 0.3.1 → 0.3.5
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/dist/cli.js +1181 -600
- package/dist/index.js +525 -204
- package/package.json +5 -3
- package/skills/adaptyv/references/api-endpoints.md +0 -690
- package/skills/aeon/references/anomaly_detection.md +0 -154
- package/skills/aeon/references/classification.md +0 -144
- package/skills/aeon/references/clustering.md +0 -123
- package/skills/aeon/references/datasets_benchmarking.md +0 -392
- package/skills/aeon/references/distances.md +0 -256
- package/skills/aeon/references/forecasting.md +0 -109
- package/skills/aeon/references/networks.md +0 -289
- package/skills/aeon/references/regression.md +0 -118
- package/skills/aeon/references/segmentation.md +0 -163
- package/skills/aeon/references/similarity_search.md +0 -187
- package/skills/aeon/references/transformations.md +0 -246
- package/skills/analytical-method-validation/assets/validation-protocol-template.md +0 -106
- package/skills/analytical-method-validation/assets/validation-report-template.md +0 -116
- package/skills/analytical-method-validation/references/compendial-and-clsi.md +0 -96
- package/skills/analytical-method-validation/references/framework-selection.md +0 -87
- package/skills/analytical-method-validation/references/ich-m10-bioanalytical.md +0 -123
- package/skills/analytical-method-validation/references/ich-q2r2.md +0 -229
- package/skills/analytical-method-validation/references/source-ledger.md +0 -125
- package/skills/analytical-method-validation/references/statistics.md +0 -209
- package/skills/analytical-method-validation/scripts/_catalog.py +0 -499
- package/skills/analytical-method-validation/scripts/_common.py +0 -955
- package/skills/analytical-method-validation/scripts/check_accuracy_precision.py +0 -328
- package/skills/analytical-method-validation/scripts/check_bioanalytical_run.py +0 -293
- package/skills/analytical-method-validation/scripts/check_detection_limits.py +0 -310
- package/skills/analytical-method-validation/scripts/check_response.py +0 -243
- package/skills/analytical-method-validation/scripts/compare_methods.py +0 -215
- package/skills/analytical-method-validation/scripts/plan_validation.py +0 -381
- package/skills/anndata/references/best_practices.md +0 -532
- package/skills/anndata/references/concatenation.md +0 -399
- package/skills/anndata/references/data_structure.md +0 -314
- package/skills/anndata/references/io_operations.md +0 -466
- package/skills/anndata/references/manipulation.md +0 -516
- package/skills/arbor/references/arbor-upstream.md +0 -91
- package/skills/arbor/references/executor-brief.md +0 -68
- package/skills/arbor/references/htr-methodology.md +0 -177
- package/skills/arbor/references/report-template.md +0 -39
- package/skills/arbor/scripts/tree.py +0 -564
- package/skills/arboreto/references/algorithms.md +0 -152
- package/skills/arboreto/references/basic_inference.md +0 -181
- package/skills/arboreto/references/distributed_computing.md +0 -242
- package/skills/arboreto/scripts/basic_grn_inference.py +0 -107
- package/skills/astropy/references/coordinates.md +0 -280
- package/skills/astropy/references/cosmology.md +0 -309
- package/skills/astropy/references/fits.md +0 -398
- package/skills/astropy/references/tables.md +0 -495
- package/skills/astropy/references/time.md +0 -412
- package/skills/astropy/references/units.md +0 -178
- package/skills/astropy/references/wcs_and_other_modules.md +0 -377
- package/skills/autoskill/config.yaml +0 -53
- package/skills/autoskill/references/https-proxy.md +0 -62
- package/skills/autoskill/references/screenpipe-config.yaml +0 -61
- package/skills/autoskill/scripts/autoskill.py +0 -35
- package/skills/autoskill/scripts/backends.py +0 -116
- package/skills/autoskill/scripts/cluster.py +0 -54
- package/skills/autoskill/scripts/doctor.py +0 -108
- package/skills/autoskill/scripts/fetch_window.py +0 -33
- package/skills/autoskill/scripts/match_skills.py +0 -46
- package/skills/autoskill/scripts/promote.py +0 -58
- package/skills/autoskill/scripts/redact.py +0 -40
- package/skills/autoskill/scripts/run.py +0 -194
- package/skills/autoskill/scripts/synthesize.py +0 -72
- package/skills/benchling-integration/references/api_endpoints.md +0 -883
- package/skills/benchling-integration/references/authentication.md +0 -390
- package/skills/benchling-integration/references/core_capabilities.md +0 -355
- package/skills/benchling-integration/references/eventbridge.md +0 -255
- package/skills/benchling-integration/references/sdk_reference.md +0 -772
- package/skills/bids/references/beps.yml +0 -637
- package/skills/bids/references/bids_schema.json +0 -21015
- package/skills/bids/references/bids_specification.md +0 -165
- package/skills/bids/references/conversion_tools.md +0 -475
- package/skills/bids/references/core_workflows.md +0 -552
- package/skills/bids/references/metadata_fields.md +0 -365
- package/skills/bids/scripts/update_schema.py +0 -89
- package/skills/biopython/references/advanced.md +0 -580
- package/skills/biopython/references/alignment.md +0 -377
- package/skills/biopython/references/blast.md +0 -463
- package/skills/biopython/references/databases.md +0 -492
- package/skills/biopython/references/phylogenetics.md +0 -566
- package/skills/biopython/references/sequence_io.md +0 -289
- package/skills/biopython/references/structure.md +0 -564
- package/skills/bioservices/references/identifier_mapping.md +0 -685
- package/skills/bioservices/references/services_reference.md +0 -638
- package/skills/bioservices/references/workflow_patterns.md +0 -813
- package/skills/bioservices/scripts/batch_id_converter.py +0 -347
- package/skills/bioservices/scripts/compound_cross_reference.py +0 -387
- package/skills/bioservices/scripts/pathway_analysis.py +0 -309
- package/skills/bioservices/scripts/protein_analysis_workflow.py +0 -441
- package/skills/bulk-rnaseq/references/counts-and-handoff.md +0 -91
- package/skills/bulk-rnaseq/references/design-and-qc.md +0 -68
- package/skills/bulk-rnaseq/references/upstream-manual.md +0 -128
- package/skills/bulk-rnaseq/references/upstream-nfcore.md +0 -108
- package/skills/bulk-rnaseq/scripts/build_counts_matrix.py +0 -203
- package/skills/bulk-rnaseq/scripts/validate_samplesheet.py +0 -206
- package/skills/cellxgene-census/references/census_schema.md +0 -218
- package/skills/cellxgene-census/references/common_patterns.md +0 -368
- package/skills/cellxgene-census/references/core_workflow_patterns.md +0 -297
- package/skills/cirq/references/building.md +0 -307
- package/skills/cirq/references/experiments.md +0 -572
- package/skills/cirq/references/hardware.md +0 -527
- package/skills/cirq/references/noise.md +0 -514
- package/skills/cirq/references/simulation.md +0 -353
- package/skills/cirq/references/transformation.md +0 -416
- package/skills/citation-management/assets/bibtex_template.bib +0 -264
- package/skills/citation-management/assets/citation_checklist.md +0 -386
- package/skills/citation-management/references/best_practices.md +0 -91
- package/skills/citation-management/references/bibtex_formatting.md +0 -908
- package/skills/citation-management/references/citation_validation.md +0 -835
- package/skills/citation-management/references/core_workflow.md +0 -569
- package/skills/citation-management/references/example_workflows.md +0 -126
- package/skills/citation-management/references/google_scholar_search.md +0 -732
- package/skills/citation-management/references/metadata_extraction.md +0 -870
- package/skills/citation-management/references/pubmed_search.md +0 -839
- package/skills/citation-management/references/script_reference.md +0 -250
- package/skills/citation-management/references/search_strategies.md +0 -110
- package/skills/citation-management/scripts/_common.py +0 -331
- package/skills/citation-management/scripts/doi_to_bibtex.py +0 -204
- package/skills/citation-management/scripts/extract_metadata.py +0 -690
- package/skills/citation-management/scripts/format_bibtex.py +0 -356
- package/skills/citation-management/scripts/search_google_scholar.py +0 -268
- package/skills/citation-management/scripts/search_openalex.py +0 -297
- package/skills/citation-management/scripts/search_pubmed.py +0 -419
- package/skills/citation-management/scripts/validate_citations.py +0 -688
- package/skills/clinical-decision-support/assets/aggregate_cohort_table_template.json +0 -114
- package/skills/clinical-decision-support/assets/aggregate_model_evaluation_template.json +0 -115
- package/skills/clinical-decision-support/assets/artifact_intended_use_template.json +0 -81
- package/skills/clinical-decision-support/assets/decision_logic_traceability_template.json +0 -108
- package/skills/clinical-decision-support/assets/deidentification_checklist_template.json +0 -176
- package/skills/clinical-decision-support/assets/evidence_profile_template.json +0 -139
- package/skills/clinical-decision-support/assets/survival_analysis_plan_template.json +0 -134
- package/skills/clinical-decision-support/references/cohort_evaluation.md +0 -142
- package/skills/clinical-decision-support/references/decision_logic_traceability.md +0 -146
- package/skills/clinical-decision-support/references/evidence_profiles.md +0 -153
- package/skills/clinical-decision-support/references/model_biomarker_evaluation.md +0 -152
- package/skills/clinical-decision-support/references/privacy_and_disclosure.md +0 -144
- package/skills/clinical-decision-support/references/regulatory_and_governance.md +0 -104
- package/skills/clinical-decision-support/references/safety_and_scope.md +0 -103
- package/skills/clinical-decision-support/references/security_validation.md +0 -60
- package/skills/clinical-decision-support/references/sources.md +0 -119
- package/skills/clinical-decision-support/references/study_reporting.md +0 -134
- package/skills/clinical-decision-support/references/survival_analysis.md +0 -156
- package/skills/clinical-decision-support/scripts/_common.py +0 -223
- package/skills/clinical-decision-support/scripts/cohort_table_generator.py +0 -288
- package/skills/clinical-decision-support/scripts/decision_logic_traceability.py +0 -313
- package/skills/clinical-decision-support/scripts/deidentification_checklist.py +0 -260
- package/skills/clinical-decision-support/scripts/evidence_profile_check.py +0 -259
- package/skills/clinical-decision-support/scripts/model_biomarker_evaluation.py +0 -345
- package/skills/clinical-decision-support/scripts/survival_plan_validator.py +0 -294
- package/skills/clinical-decision-support/scripts/validate_cds_artifact.py +0 -269
- package/skills/clinical-reports/assets/adverse_event_aggregate_input_template.csv +0 -1
- package/skills/clinical-reports/assets/case_report_template.json +0 -43
- package/skills/clinical-reports/assets/clinical_trial_csr_template.json +0 -51
- package/skills/clinical-reports/assets/clinical_trial_results_template.json +0 -66
- package/skills/clinical-reports/assets/clinical_trial_safety_aggregate_template.json +0 -49
- package/skills/clinical-reports/assets/consistency_manifest_template.json +0 -15
- package/skills/clinical-reports/assets/deidentification_process_checklist.json +0 -56
- package/skills/clinical-reports/assets/lab_report_template.json +0 -36
- package/skills/clinical-reports/assets/pathology_report_template.json +0 -36
- package/skills/clinical-reports/assets/provenance_manifest_template.json +0 -17
- package/skills/clinical-reports/assets/quality_review_checklist.json +0 -34
- package/skills/clinical-reports/assets/radiology_report_template.json +0 -34
- package/skills/clinical-reports/assets/research_summary_template.json +0 -36
- package/skills/clinical-reports/assets/terminology_manifest_template.json +0 -11
- package/skills/clinical-reports/assets/trial_protocol_reporting_checklist.json +0 -70
- package/skills/clinical-reports/references/case_report_guidelines.md +0 -72
- package/skills/clinical-reports/references/clinical_trial_reporting.md +0 -97
- package/skills/clinical-reports/references/data_presentation.md +0 -92
- package/skills/clinical-reports/references/diagnostic_reports_standards.md +0 -76
- package/skills/clinical-reports/references/medical_terminology.md +0 -84
- package/skills/clinical-reports/references/privacy_and_deidentification.md +0 -84
- package/skills/clinical-reports/references/professional_review.md +0 -78
- package/skills/clinical-reports/references/report_type_routing.md +0 -57
- package/skills/clinical-reports/references/safety_reporting.md +0 -109
- package/skills/clinical-reports/references/sources.md +0 -75
- package/skills/clinical-reports/scripts/_common.py +0 -263
- package/skills/clinical-reports/scripts/check_deidentification.py +0 -298
- package/skills/clinical-reports/scripts/consistency_checker.py +0 -390
- package/skills/clinical-reports/scripts/format_adverse_events.py +0 -455
- package/skills/clinical-reports/scripts/generate_report_template.py +0 -115
- package/skills/clinical-reports/scripts/provenance_validator.py +0 -263
- package/skills/clinical-reports/scripts/terminology_validator.py +0 -277
- package/skills/clinical-reports/scripts/validate_case_report.py +0 -278
- package/skills/clinical-reports/scripts/validate_trial_report.py +0 -534
- package/skills/cobrapy/references/api_quick_reference.md +0 -665
- package/skills/cobrapy/references/workflows.md +0 -600
- package/skills/consciousness-council/references/advanced-configurations.md +0 -96
- package/skills/dask/references/arrays.md +0 -495
- package/skills/dask/references/bags.md +0 -468
- package/skills/dask/references/best-practices.md +0 -277
- package/skills/dask/references/dataframes.md +0 -370
- package/skills/dask/references/futures.md +0 -541
- package/skills/dask/references/schedulers.md +0 -517
- package/skills/database-lookup/references/addgene.md +0 -38
- package/skills/database-lookup/references/alphafold.md +0 -52
- package/skills/database-lookup/references/alphavantage.md +0 -261
- package/skills/database-lookup/references/bea.md +0 -409
- package/skills/database-lookup/references/bindingdb.md +0 -85
- package/skills/database-lookup/references/biogrid.md +0 -110
- package/skills/database-lookup/references/bls.md +0 -235
- package/skills/database-lookup/references/brenda.md +0 -71
- package/skills/database-lookup/references/cbioportal.md +0 -206
- package/skills/database-lookup/references/census.md +0 -251
- package/skills/database-lookup/references/chebi.md +0 -103
- package/skills/database-lookup/references/chembl.md +0 -80
- package/skills/database-lookup/references/clinicaltrials.md +0 -86
- package/skills/database-lookup/references/clinpgx.md +0 -64
- package/skills/database-lookup/references/clinvar.md +0 -91
- package/skills/database-lookup/references/cod.md +0 -121
- package/skills/database-lookup/references/cosmic.md +0 -59
- package/skills/database-lookup/references/dailymed.md +0 -65
- package/skills/database-lookup/references/database_selection_guide.md +0 -166
- package/skills/database-lookup/references/datacommons.md +0 -237
- package/skills/database-lookup/references/dbsnp.md +0 -143
- package/skills/database-lookup/references/disgenet.md +0 -52
- package/skills/database-lookup/references/drugbank.md +0 -54
- package/skills/database-lookup/references/ecb.md +0 -191
- package/skills/database-lookup/references/emdb.md +0 -37
- package/skills/database-lookup/references/ena.md +0 -372
- package/skills/database-lookup/references/encode.md +0 -47
- package/skills/database-lookup/references/ensembl.md +0 -539
- package/skills/database-lookup/references/epa.md +0 -232
- package/skills/database-lookup/references/eurostat.md +0 -237
- package/skills/database-lookup/references/fda.md +0 -64
- package/skills/database-lookup/references/federal-reserve.md +0 -216
- package/skills/database-lookup/references/fred.md +0 -297
- package/skills/database-lookup/references/gene-ontology.md +0 -147
- package/skills/database-lookup/references/geo.md +0 -130
- package/skills/database-lookup/references/gnomad.md +0 -93
- package/skills/database-lookup/references/gtex.md +0 -136
- package/skills/database-lookup/references/gwas-catalog.md +0 -46
- package/skills/database-lookup/references/hca.md +0 -35
- package/skills/database-lookup/references/hpo.md +0 -48
- package/skills/database-lookup/references/human-protein-atlas.md +0 -57
- package/skills/database-lookup/references/interpro.md +0 -120
- package/skills/database-lookup/references/jaspar.md +0 -50
- package/skills/database-lookup/references/kegg.md +0 -78
- package/skills/database-lookup/references/lincs-l1000.md +0 -68
- package/skills/database-lookup/references/materials-project.md +0 -123
- package/skills/database-lookup/references/metabolomics-workbench.md +0 -98
- package/skills/database-lookup/references/monarch.md +0 -46
- package/skills/database-lookup/references/mousemine.md +0 -40
- package/skills/database-lookup/references/nasa-exoplanet-archive.md +0 -112
- package/skills/database-lookup/references/nasa.md +0 -121
- package/skills/database-lookup/references/ncbi-gene.md +0 -64
- package/skills/database-lookup/references/ncbi-protein.md +0 -104
- package/skills/database-lookup/references/ncbi-taxonomy.md +0 -121
- package/skills/database-lookup/references/nist.md +0 -105
- package/skills/database-lookup/references/noaa.md +0 -199
- package/skills/database-lookup/references/omim.md +0 -114
- package/skills/database-lookup/references/opentargets.md +0 -459
- package/skills/database-lookup/references/openweathermap.md +0 -255
- package/skills/database-lookup/references/pdb.md +0 -121
- package/skills/database-lookup/references/pride.md +0 -74
- package/skills/database-lookup/references/pubchem.md +0 -145
- package/skills/database-lookup/references/quickgo.md +0 -45
- package/skills/database-lookup/references/reactome.md +0 -140
- package/skills/database-lookup/references/retrieval-contract.md +0 -123
- package/skills/database-lookup/references/rummageo.md +0 -32
- package/skills/database-lookup/references/sdss.md +0 -130
- package/skills/database-lookup/references/sec-edgar.md +0 -315
- package/skills/database-lookup/references/simbad.md +0 -405
- package/skills/database-lookup/references/sra.md +0 -149
- package/skills/database-lookup/references/string.md +0 -283
- package/skills/database-lookup/references/tcga-gdc.md +0 -58
- package/skills/database-lookup/references/treasury.md +0 -215
- package/skills/database-lookup/references/ucsc-genome.md +0 -135
- package/skills/database-lookup/references/uniprot.md +0 -283
- package/skills/database-lookup/references/usgs.md +0 -260
- package/skills/database-lookup/references/uspto.md +0 -130
- package/skills/database-lookup/references/who.md +0 -283
- package/skills/database-lookup/references/worldbank.md +0 -239
- package/skills/database-lookup/references/zinc.md +0 -202
- package/skills/datamol/references/conformers_module.md +0 -131
- package/skills/datamol/references/core_api.md +0 -136
- package/skills/datamol/references/core_workflows.md +0 -451
- package/skills/datamol/references/descriptors_viz.md +0 -195
- package/skills/datamol/references/fragments_scaffolds.md +0 -174
- package/skills/datamol/references/io_module.md +0 -112
- package/skills/datamol/references/reactions_data.md +0 -218
- package/skills/datamol/references/workflow_patterns.md +0 -104
- package/skills/deepchem/references/api_reference.md +0 -305
- package/skills/deepchem/references/core_capabilities.md +0 -276
- package/skills/deepchem/references/typical_workflows.md +0 -109
- package/skills/deepchem/references/workflows.md +0 -491
- package/skills/deepchem/scripts/graph_neural_network.py +0 -350
- package/skills/deepchem/scripts/predict_solubility.py +0 -223
- package/skills/deepchem/scripts/transfer_learning.py +0 -443
- package/skills/deepspot-m/references/api.md +0 -186
- package/skills/deepspot-m/references/whole_slide.md +0 -174
- package/skills/deeptools/assets/quick_reference.md +0 -65
- package/skills/deeptools/references/core_workflows.md +0 -134
- package/skills/deeptools/references/effective_genome_sizes.md +0 -118
- package/skills/deeptools/references/normalization_methods.md +0 -424
- package/skills/deeptools/references/tools_reference.md +0 -569
- package/skills/deeptools/references/workflows.md +0 -476
- package/skills/deeptools/scripts/validate_files.py +0 -195
- package/skills/deeptools/scripts/workflow_generator.py +0 -520
- package/skills/depmap/references/dependency_analysis.md +0 -178
- package/skills/dhdna-profiler/references/advanced-profiling.md +0 -72
- package/skills/diffdock/assets/batch_template.csv +0 -4
- package/skills/diffdock/assets/custom_inference_config.yaml +0 -94
- package/skills/diffdock/references/confidence_and_limitations.md +0 -182
- package/skills/diffdock/references/parameters_reference.md +0 -173
- package/skills/diffdock/references/workflows_examples.md +0 -401
- package/skills/diffdock/scripts/analyze_results.py +0 -346
- package/skills/diffdock/scripts/prepare_batch_csv.py +0 -257
- package/skills/diffdock/scripts/setup_check.py +0 -283
- package/skills/dnanexus-integration/references/app-development.md +0 -371
- package/skills/dnanexus-integration/references/authentication.md +0 -226
- package/skills/dnanexus-integration/references/configuration.md +0 -444
- package/skills/dnanexus-integration/references/data-operations.md +0 -474
- package/skills/dnanexus-integration/references/job-execution.md +0 -482
- package/skills/dnanexus-integration/references/operations-and-troubleshooting.md +0 -506
- package/skills/dnanexus-integration/references/python-sdk.md +0 -548
- package/skills/dnanexus-integration/references/sources.md +0 -168
- package/skills/dnanexus-integration/references/workflow-languages.md +0 -292
- package/skills/dnanexus-integration/scripts/inspect_dxpy.py +0 -366
- package/skills/dnanexus-integration/scripts/validate_dxapp.py +0 -796
- package/skills/docx/LICENSE.txt +0 -30
- package/skills/docx/scripts/__init__.py +0 -1
- package/skills/docx/scripts/accept_changes.py +0 -135
- package/skills/docx/scripts/comment.py +0 -368
- package/skills/docx/scripts/merge_runs.py +0 -310
- package/skills/docx/scripts/office/helpers/__init__.py +0 -111
- package/skills/docx/scripts/office/helpers/pptx_chart.py +0 -170
- package/skills/docx/scripts/office/helpers/pptx_slide.py +0 -60
- package/skills/docx/scripts/office/helpers/pptx_theme.py +0 -114
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -1499
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -146
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -1085
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -11
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -3081
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -23
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -185
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -287
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -1676
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -28
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -144
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -174
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -25
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -18
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -59
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -56
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -195
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -582
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -25
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -4439
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -570
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -509
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -12
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -108
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -96
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -3646
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -116
- package/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -42
- package/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -50
- package/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -49
- package/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -33
- package/skills/docx/scripts/office/schemas/mce/mc.xsd +0 -75
- package/skills/docx/scripts/office/schemas/microsoft/wml-2010.xsd +0 -560
- package/skills/docx/scripts/office/schemas/microsoft/wml-2012.xsd +0 -67
- package/skills/docx/scripts/office/schemas/microsoft/wml-2018.xsd +0 -14
- package/skills/docx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +0 -20
- package/skills/docx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +0 -13
- package/skills/docx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -4
- package/skills/docx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +0 -8
- package/skills/docx/scripts/office/soffice.py +0 -232
- package/skills/docx/scripts/office/validate.py +0 -173
- package/skills/docx/scripts/office/validators/__init__.py +0 -15
- package/skills/docx/scripts/office/validators/base.py +0 -875
- package/skills/docx/scripts/office/validators/docx.py +0 -466
- package/skills/docx/scripts/office/validators/pptx.py +0 -441
- package/skills/docx/scripts/office/validators/redlining.py +0 -299
- package/skills/docx/scripts/templates/comments.xml +0 -3
- package/skills/docx/scripts/templates/commentsExtended.xml +0 -3
- package/skills/docx/scripts/templates/commentsExtensible.xml +0 -3
- package/skills/docx/scripts/templates/commentsIds.xml +0 -3
- package/skills/docx/scripts/templates/people.xml +0 -3
- package/skills/esm/references/biohub-platform.md +0 -111
- package/skills/esm/references/esm-c-api.md +0 -609
- package/skills/esm/references/esm3-api.md +0 -462
- package/skills/esm/references/forge-api.md +0 -675
- package/skills/esm/references/workflows.md +0 -685
- package/skills/etetoolkit/references/api_reference.md +0 -546
- package/skills/etetoolkit/references/migration-ete3-to-ete4.md +0 -579
- package/skills/etetoolkit/references/taxonomy.md +0 -362
- package/skills/etetoolkit/references/visualization.md +0 -516
- package/skills/etetoolkit/references/workflows.md +0 -537
- package/skills/etetoolkit/scripts/quick_visualize.py +0 -455
- package/skills/etetoolkit/scripts/tree_operations.py +0 -446
- package/skills/exa-search/references/web-extract.md +0 -53
- package/skills/exa-search/references/web-search.md +0 -119
- package/skills/exa-search/scripts/exa_extract.py +0 -117
- package/skills/exa-search/scripts/exa_search.py +0 -179
- package/skills/experimental-design/references/design_types.md +0 -129
- package/skills/experimental-design/references/factorial_and_doe.md +0 -130
- package/skills/experimental-design/references/randomization_and_blocking.md +0 -116
- package/skills/experimental-design/references/sequential_and_adaptive.md +0 -97
- package/skills/experimental-design/scripts/doe_designs.py +0 -183
- package/skills/experimental-design/scripts/randomization.py +0 -171
- package/skills/exploratory-data-analysis/assets/report_template.md +0 -202
- package/skills/exploratory-data-analysis/references/bioinformatics_genomics_formats.md +0 -192
- package/skills/exploratory-data-analysis/references/chemistry_molecular_formats.md +0 -183
- package/skills/exploratory-data-analysis/references/general_scientific_formats.md +0 -259
- package/skills/exploratory-data-analysis/references/microscopy_imaging_formats.md +0 -189
- package/skills/exploratory-data-analysis/references/proteomics_metabolomics_formats.md +0 -217
- package/skills/exploratory-data-analysis/references/spectroscopy_analytical_formats.md +0 -191
- package/skills/exploratory-data-analysis/scripts/__init__.py +0 -1
- package/skills/exploratory-data-analysis/scripts/_capabilities.py +0 -576
- package/skills/exploratory-data-analysis/scripts/_common.py +0 -460
- package/skills/exploratory-data-analysis/scripts/_structured.py +0 -391
- package/skills/exploratory-data-analysis/scripts/_tabular.py +0 -905
- package/skills/exploratory-data-analysis/scripts/capability_manifest.py +0 -184
- package/skills/exploratory-data-analysis/scripts/distribution_sensitivity.py +0 -117
- package/skills/exploratory-data-analysis/scripts/eda_analyzer.py +0 -345
- package/skills/exploratory-data-analysis/scripts/image_inspector.py +0 -214
- package/skills/exploratory-data-analysis/scripts/missingness_leakage_audit.py +0 -130
- package/skills/exploratory-data-analysis/scripts/report_scaffold.py +0 -143
- package/skills/exploratory-data-analysis/scripts/sequence_inspector.py +0 -255
- package/skills/exploratory-data-analysis/scripts/tabular_profile.py +0 -109
- package/skills/flowio/references/api_reference.md +0 -355
- package/skills/flowio/references/fcs_semantics.md +0 -315
- package/skills/flowio/references/sources.md +0 -89
- package/skills/flowio/references/troubleshooting.md +0 -399
- package/skills/flowio/references/workflows.md +0 -368
- package/skills/flowio/scripts/inspect_fcs.py +0 -439
- package/skills/fluidsim/references/advanced_features.md +0 -347
- package/skills/fluidsim/references/installation.md +0 -263
- package/skills/fluidsim/references/output_analysis.md +0 -314
- package/skills/fluidsim/references/parameters.md +0 -322
- package/skills/fluidsim/references/simulation_workflow.md +0 -329
- package/skills/fluidsim/references/solvers.md +0 -191
- package/skills/fluidsim/scripts/__init__.py +0 -1
- package/skills/fluidsim/scripts/_common.py +0 -491
- package/skills/fluidsim/scripts/_schema.py +0 -872
- package/skills/fluidsim/scripts/budget_summary.py +0 -396
- package/skills/fluidsim/scripts/grid_resource_estimator.py +0 -286
- package/skills/fluidsim/scripts/output_inventory.py +0 -353
- package/skills/fluidsim/scripts/restart_compatibility.py +0 -424
- package/skills/fluidsim/scripts/simulation_dry_run.py +0 -246
- package/skills/fluidsim/scripts/solver_config_validator.py +0 -70
- package/skills/generate-image/references/models.md +0 -173
- package/skills/generate-image/scripts/generate_image.py +0 -752
- package/skills/geniml/references/bedspace.md +0 -267
- package/skills/geniml/references/consensus_peaks.md +0 -334
- package/skills/geniml/references/region2vec.md +0 -289
- package/skills/geniml/references/scembed.md +0 -307
- package/skills/geniml/references/utilities.md +0 -385
- package/skills/geniml/scripts/__init__.py +0 -1
- package/skills/geniml/scripts/_common.py +0 -399
- package/skills/geniml/scripts/bed_validator.py +0 -363
- package/skills/geniml/scripts/consensus_plan.py +0 -416
- package/skills/geniml/scripts/corpus_auditor.py +0 -304
- package/skills/geniml/scripts/embedding_plan.py +0 -476
- package/skills/geniml/scripts/model_artifact_inspector.py +0 -358
- package/skills/geniml/scripts/tokenizer_compatibility.py +0 -321
- package/skills/genomic-coordinates/references/format-conventions.md +0 -205
- package/skills/genomic-coordinates/references/reference-builds.md +0 -154
- package/skills/genomic-coordinates/references/transcript-coordinates.md +0 -141
- package/skills/genomic-coordinates/references/variant-representation.md +0 -155
- package/skills/genomic-coordinates/scripts/_common.py +0 -335
- package/skills/genomic-coordinates/scripts/audit_intervals.py +0 -511
- package/skills/genomic-coordinates/scripts/check_contigs.py +0 -382
- package/skills/genomic-coordinates/scripts/convert_coords.py +0 -180
- package/skills/genomic-coordinates/scripts/normalize_variant.py +0 -290
- package/skills/genomic-intelligence/references/api-and-auth.md +0 -45
- package/skills/genomic-intelligence/references/mcp.md +0 -94
- package/skills/genomic-intelligence/references/sequence-acquisition.md +0 -52
- package/skills/genomic-intelligence/references/tasks.md +0 -75
- package/skills/geomaster/references/advanced-gis.md +0 -376
- package/skills/geomaster/references/big-data.md +0 -363
- package/skills/geomaster/references/code-examples.md +0 -531
- package/skills/geomaster/references/coordinate-systems.md +0 -364
- package/skills/geomaster/references/core-libraries.md +0 -273
- package/skills/geomaster/references/data-sources.md +0 -330
- package/skills/geomaster/references/gis-software.md +0 -369
- package/skills/geomaster/references/industry-applications.md +0 -420
- package/skills/geomaster/references/machine-learning.md +0 -462
- package/skills/geomaster/references/programming-languages.md +0 -456
- package/skills/geomaster/references/remote-sensing.md +0 -370
- package/skills/geomaster/references/scientific-domains.md +0 -416
- package/skills/geomaster/references/specialized-topics.md +0 -428
- package/skills/geomaster/references/troubleshooting.md +0 -439
- package/skills/geopandas/references/crs-management.md +0 -231
- package/skills/geopandas/references/data-io.md +0 -323
- package/skills/geopandas/references/data-structures.md +0 -207
- package/skills/geopandas/references/geometric-operations.md +0 -262
- package/skills/geopandas/references/spatial-analysis.md +0 -294
- package/skills/geopandas/references/visualization.md +0 -230
- package/skills/geopandas/scripts/_common.py +0 -605
- package/skills/geopandas/scripts/crs_reprojection_plan.py +0 -210
- package/skills/geopandas/scripts/export_plan.py +0 -305
- package/skills/geopandas/scripts/geometry_validity_report.py +0 -227
- package/skills/geopandas/scripts/sensitive_coordinates_checklist.py +0 -230
- package/skills/geopandas/scripts/spatial_join_audit.py +0 -368
- package/skills/geopandas/scripts/vector_inventory.py +0 -140
- package/skills/get-available-resources/references/resource_semantics.md +0 -206
- package/skills/get-available-resources/references/snapshot_schema.md +0 -172
- package/skills/get-available-resources/references/sources.md +0 -124
- package/skills/get-available-resources/scripts/_common.py +0 -190
- package/skills/get-available-resources/scripts/accelerator_diagnostics.py +0 -151
- package/skills/get-available-resources/scripts/detect_resources.py +0 -1767
- package/skills/get-available-resources/scripts/plan_workload.py +0 -311
- package/skills/get-available-resources/scripts/snapshot_tools.py +0 -486
- package/skills/gget/references/common_workflows.md +0 -120
- package/skills/gget/references/database_info.md +0 -336
- package/skills/gget/references/module_catalog.md +0 -733
- package/skills/gget/references/module_reference.md +0 -526
- package/skills/gget/references/workflows.md +0 -815
- package/skills/gget/scripts/batch_sequence_analysis.py +0 -192
- package/skills/gget/scripts/enrichment_pipeline.py +0 -235
- package/skills/gget/scripts/gene_analysis.py +0 -175
- package/skills/ginkgo-cloud-lab/references/cell-free-protein-expression-hibit.md +0 -53
- package/skills/ginkgo-cloud-lab/references/cell-free-protein-expression-optimization.md +0 -85
- package/skills/ginkgo-cloud-lab/references/cell-free-protein-expression-validation.md +0 -71
- package/skills/ginkgo-cloud-lab/references/cfps-expression-purification-quantification.md +0 -60
- package/skills/ginkgo-cloud-lab/references/cfps-strep-purification-thermal-shift.md +0 -63
- package/skills/ginkgo-cloud-lab/references/cfps-strep-tag-purification-a280.md +0 -55
- package/skills/ginkgo-cloud-lab/references/echo-ms-cfps-detection.md +0 -49
- package/skills/ginkgo-cloud-lab/references/echo-ms-method-onboarding.md +0 -56
- package/skills/ginkgo-cloud-lab/references/ecoli-expression-purification-quantification.md +0 -49
- package/skills/ginkgo-cloud-lab/references/ecoli-minibinder-expression-histag-a280.md +0 -62
- package/skills/ginkgo-cloud-lab/references/ecoli-protein-expression-hibit.md +0 -44
- package/skills/ginkgo-cloud-lab/references/ecoli-protein-expression-histag-a280.md +0 -47
- package/skills/ginkgo-cloud-lab/references/fluorescent-pixel-art-generation.md +0 -73
- package/skills/ginkgo-cloud-lab/references/ivt-rna-synthesis-qpcr.md +0 -67
- package/skills/ginkgo-cloud-lab/references/minibinder-strep-tag-a280.md +0 -58
- package/skills/ginkgo-cloud-lab/references/pichia-protein-expression-labchip.md +0 -43
- package/skills/ginkgo-cloud-lab/references/spr-target-onboarding.md +0 -58
- package/skills/glycoengineering/references/glycan_databases.md +0 -165
- package/skills/gtars/references/cli.md +0 -334
- package/skills/gtars/references/coverage.md +0 -224
- package/skills/gtars/references/overlap.md +0 -220
- package/skills/gtars/references/python-api.md +0 -280
- package/skills/gtars/references/refget.md +0 -318
- package/skills/gtars/references/tokenizers.md +0 -256
- package/skills/gtars/scripts/__init__.py +0 -1
- package/skills/gtars/scripts/_common.py +0 -461
- package/skills/gtars/scripts/artifact_inspector.py +0 -328
- package/skills/gtars/scripts/bed_validator.py +0 -183
- package/skills/gtars/scripts/coverage_preflight.py +0 -256
- package/skills/gtars/scripts/execution_plan.py +0 -365
- package/skills/gtars/scripts/refget_digest_plan.py +0 -311
- package/skills/gtars/scripts/tokenizer_manifest.py +0 -238
- package/skills/histolab/references/core_capabilities.md +0 -305
- package/skills/histolab/references/filters_preprocessing.md +0 -537
- package/skills/histolab/references/slide_management.md +0 -184
- package/skills/histolab/references/tile_extraction.md +0 -421
- package/skills/histolab/references/tissue_masks.md +0 -251
- package/skills/histolab/references/typical_workflows.md +0 -196
- package/skills/histolab/references/visualization.md +0 -548
- package/skills/hugging-science/references/flagship-resources.md +0 -81
- package/skills/hugging-science/references/topics-and-slugs.md +0 -82
- package/skills/hugging-science/references/using-datasets.md +0 -107
- package/skills/hugging-science/references/using-models.md +0 -122
- package/skills/hugging-science/references/using-spaces.md +0 -119
- package/skills/hugging-science/scripts/fetch_catalog.py +0 -358
- package/skills/hypogenic/assets/dataset_manifest.example.json +0 -30
- package/skills/hypogenic/assets/result.example.json +0 -18
- package/skills/hypogenic/assets/run_config.example.json +0 -46
- package/skills/hypogenic/assets/task_config.example.yaml +0 -38
- package/skills/hypogenic/references/configuration.md +0 -136
- package/skills/hypogenic/references/datasets.md +0 -146
- package/skills/hypogenic/references/evaluation.md +0 -155
- package/skills/hypogenic/references/security.md +0 -167
- package/skills/hypogenic/references/sources.md +0 -113
- package/skills/hypogenic/references/upstream.md +0 -188
- package/skills/hypogenic/scripts/__init__.py +0 -1
- package/skills/hypogenic/scripts/_common.py +0 -1312
- package/skills/hypogenic/scripts/audit_dataset.py +0 -410
- package/skills/hypogenic/scripts/evaluate_local.py +0 -250
- package/skills/hypogenic/scripts/inspect_outputs.py +0 -166
- package/skills/hypogenic/scripts/plan_run.py +0 -247
- package/skills/hypogenic/scripts/validate_config.py +0 -192
- package/skills/hypothesis-generation/assets/evidence_ledger_template.csv +0 -2
- package/skills/hypothesis-generation/assets/falsification_controls_template.json +0 -116
- package/skills/hypothesis-generation/assets/hypothesis_record_template.json +0 -331
- package/skills/hypothesis-generation/assets/operationalization_template.json +0 -56
- package/skills/hypothesis-generation/assets/prediction_rival_matrix_template.csv +0 -3
- package/skills/hypothesis-generation/assets/preregistration_scaffold_template.md +0 -137
- package/skills/hypothesis-generation/assets/search_boundary_template.json +0 -23
- package/skills/hypothesis-generation/assets/source_ledger.csv +0 -37
- package/skills/hypothesis-generation/references/causal_inference_and_claims.md +0 -190
- package/skills/hypothesis-generation/references/concepts_and_workflow.md +0 -173
- package/skills/hypothesis-generation/references/ethics_safety_and_ai.md +0 -216
- package/skills/hypothesis-generation/references/experimental_design_patterns.md +0 -301
- package/skills/hypothesis-generation/references/hypothesis_quality_criteria.md +0 -203
- package/skills/hypothesis-generation/references/literature_search_strategies.md +0 -208
- package/skills/hypothesis-generation/references/preregistration_and_open_science.md +0 -205
- package/skills/hypothesis-generation/references/security_validation.md +0 -74
- package/skills/hypothesis-generation/references/source_ledger.md +0 -116
- package/skills/hypothesis-generation/references/tool_reference.md +0 -246
- package/skills/hypothesis-generation/scripts/_common.py +0 -412
- package/skills/hypothesis-generation/scripts/audit_evidence_ledger.py +0 -337
- package/skills/hypothesis-generation/scripts/check_falsification_controls.py +0 -455
- package/skills/hypothesis-generation/scripts/check_operationalization.py +0 -237
- package/skills/hypothesis-generation/scripts/generate_preregistration_scaffold.py +0 -384
- package/skills/hypothesis-generation/scripts/lint_causal_claims.py +0 -189
- package/skills/hypothesis-generation/scripts/validate_hypothesis_schema.py +0 -1078
- package/skills/hypothesis-generation/scripts/validate_prediction_matrix.py +0 -286
- package/skills/imaging-data-commons/references/bigquery_guide.md +0 -858
- package/skills/imaging-data-commons/references/cli_guide.md +0 -287
- package/skills/imaging-data-commons/references/clinical_data_guide.md +0 -328
- package/skills/imaging-data-commons/references/cloud_storage_guide.md +0 -333
- package/skills/imaging-data-commons/references/dicomweb_guide.md +0 -399
- package/skills/imaging-data-commons/references/digital_pathology_guide.md +0 -403
- package/skills/imaging-data-commons/references/index_tables_guide.md +0 -203
- package/skills/imaging-data-commons/references/licensing_and_citation.md +0 -230
- package/skills/imaging-data-commons/references/mcp_guide.md +0 -181
- package/skills/imaging-data-commons/references/parquet_access_guide.md +0 -200
- package/skills/imaging-data-commons/references/rest_api_guide.md +0 -612
- package/skills/imaging-data-commons/references/sql_patterns.md +0 -462
- package/skills/imaging-data-commons/references/use_cases.md +0 -277
- package/skills/imaging-data-commons/scripts/check_version.py +0 -132
- package/skills/infographics/references/color_palettes.md +0 -496
- package/skills/infographics/references/design_principles.md +0 -636
- package/skills/infographics/references/infographic_type_catalog.md +0 -158
- package/skills/infographics/references/infographic_types.md +0 -907
- package/skills/infographics/references/iterative_refinement.md +0 -119
- package/skills/infographics/scripts/generate_infographic.py +0 -291
- package/skills/infographics/scripts/generate_infographic_ai.py +0 -1446
- package/skills/iso-standards-readiness/assets/templates/capa-record-template.json +0 -99
- package/skills/iso-standards-readiness/assets/templates/document-register-template.json +0 -75
- package/skills/iso-standards-readiness/assets/templates/evidence-manifest-template.json +0 -65
- package/skills/iso-standards-readiness/assets/templates/laboratory-scope-intake-template.json +0 -111
- package/skills/iso-standards-readiness/assets/templates/medical-laboratory-scope-intake-template.json +0 -111
- package/skills/iso-standards-readiness/assets/templates/procedures/CAPA-procedure-template.md +0 -148
- package/skills/iso-standards-readiness/assets/templates/procedures/document-control-procedure-template.md +0 -132
- package/skills/iso-standards-readiness/assets/templates/qmsr-transition-template.json +0 -181
- package/skills/iso-standards-readiness/assets/templates/quality-manual-template.md +0 -182
- package/skills/iso-standards-readiness/assets/templates/scope-intake-template.json +0 -109
- package/skills/iso-standards-readiness/assets/templates/supplier-controls-template.json +0 -119
- package/skills/iso-standards-readiness/assets/templates/traceability-matrix-template.json +0 -154
- package/skills/iso-standards-readiness/references/assurance-lanes.md +0 -116
- package/skills/iso-standards-readiness/references/evidence-architecture.md +0 -282
- package/skills/iso-standards-readiness/references/gap-analysis-checklist.md +0 -346
- package/skills/iso-standards-readiness/references/iso-13485.md +0 -236
- package/skills/iso-standards-readiness/references/iso-14971.md +0 -172
- package/skills/iso-standards-readiness/references/iso-15189.md +0 -219
- package/skills/iso-standards-readiness/references/iso-17025.md +0 -208
- package/skills/iso-standards-readiness/references/quality-manual-guide.md +0 -282
- package/skills/iso-standards-readiness/references/source-ledger.md +0 -357
- package/skills/iso-standards-readiness/scripts/_catalog.py +0 -248
- package/skills/iso-standards-readiness/scripts/_common.py +0 -558
- package/skills/iso-standards-readiness/scripts/audit_document_records.py +0 -148
- package/skills/iso-standards-readiness/scripts/check_capa.py +0 -240
- package/skills/iso-standards-readiness/scripts/check_qmsr_transition.py +0 -164
- package/skills/iso-standards-readiness/scripts/check_supplier_controls.py +0 -166
- package/skills/iso-standards-readiness/scripts/check_traceability.py +0 -171
- package/skills/iso-standards-readiness/scripts/gap_analyzer.py +0 -167
- package/skills/iso-standards-readiness/scripts/validate_evidence_manifest.py +0 -246
- package/skills/iso-standards-readiness/scripts/validate_scope_intake.py +0 -209
- package/skills/lab-hardware-cad/assets/standards.json +0 -198
- package/skills/lab-hardware-cad/references/behavior-rigs.md +0 -136
- package/skills/lab-hardware-cad/references/build123d-patterns.md +0 -363
- package/skills/lab-hardware-cad/references/fabrication-limits.md +0 -156
- package/skills/lab-hardware-cad/references/labware-adapters.md +0 -190
- package/skills/lab-hardware-cad/references/microfluidics.md +0 -157
- package/skills/lab-hardware-cad/references/optomechanics.md +0 -148
- package/skills/lab-hardware-cad/references/validation.md +0 -132
- package/skills/lab-hardware-cad/scripts/_common.py +0 -650
- package/skills/lab-hardware-cad/scripts/check.py +0 -645
- package/skills/lab-hardware-cad/scripts/gen.py +0 -264
- package/skills/lab-hardware-cad/scripts/snapshot.py +0 -278
- package/skills/labarchive-integration/references/api_reference.md +0 -250
- package/skills/labarchive-integration/references/authentication_guide.md +0 -191
- package/skills/labarchive-integration/references/integrations.md +0 -162
- package/skills/labarchive-integration/references/sources.md +0 -213
- package/skills/labarchive-integration/scripts/entry_operations.py +0 -381
- package/skills/labarchive-integration/scripts/notebook_operations.py +0 -451
- package/skills/labarchive-integration/scripts/setup_config.py +0 -258
- package/skills/lamindb/references/annotation-validation.md +0 -510
- package/skills/lamindb/references/core-concepts.md +0 -383
- package/skills/lamindb/references/data-management.md +0 -432
- package/skills/lamindb/references/integrations.md +0 -663
- package/skills/lamindb/references/ontologies.md +0 -498
- package/skills/lamindb/references/setup-deployment.md +0 -755
- package/skills/latchbio-integration/references/data-management.md +0 -257
- package/skills/latchbio-integration/references/latch-mcp.md +0 -158
- package/skills/latchbio-integration/references/nextflow-snakemake.md +0 -258
- package/skills/latchbio-integration/references/operations-and-debugging.md +0 -320
- package/skills/latchbio-integration/references/registry.md +0 -275
- package/skills/latchbio-integration/references/resource-configuration.md +0 -274
- package/skills/latchbio-integration/references/ui-and-automation.md +0 -355
- package/skills/latchbio-integration/references/verified-workflows.md +0 -226
- package/skills/latchbio-integration/references/workflow-creation.md +0 -275
- package/skills/latchbio-integration/scripts/inspect_latch_sdk.py +0 -290
- package/skills/latex-posters/assets/baposter_template.tex +0 -257
- package/skills/latex-posters/assets/beamerposter_template.tex +0 -244
- package/skills/latex-posters/assets/poster_quality_checklist.md +0 -358
- package/skills/latex-posters/assets/tikzposter_template.tex +0 -251
- package/skills/latex-posters/references/ai_graphics_for_posters.md +0 -524
- package/skills/latex-posters/references/compilation_and_quality_control.md +0 -467
- package/skills/latex-posters/references/latex_poster_packages.md +0 -745
- package/skills/latex-posters/references/latex_poster_reference.md +0 -241
- package/skills/latex-posters/references/poster_content_guide.md +0 -748
- package/skills/latex-posters/references/poster_design_principles.md +0 -806
- package/skills/latex-posters/references/poster_layout_design.md +0 -900
- package/skills/latex-posters/references/poster_patterns_and_presentation.md +0 -81
- package/skills/latex-posters/scripts/generate_schematic.py +0 -198
- package/skills/latex-posters/scripts/generate_schematic_ai.py +0 -950
- package/skills/latex-posters/scripts/review_poster.sh +0 -214
- package/skills/liteparse/references/api_reference.md +0 -169
- package/skills/liteparse/references/choosing_a_parser.md +0 -70
- package/skills/liteparse/references/cli_reference.md +0 -118
- package/skills/liteparse/references/ocr_and_formats.md +0 -143
- package/skills/liteparse/references/output_formats.md +0 -146
- package/skills/liteparse/scripts/batch_parse_dir.py +0 -163
- package/skills/literature-review/assets/review_template.md +0 -412
- package/skills/literature-review/references/citation_styles.md +0 -166
- package/skills/literature-review/references/core_workflow.md +0 -260
- package/skills/literature-review/references/database_strategies.md +0 -455
- package/skills/literature-review/references/example_workflow.md +0 -68
- package/skills/literature-review/references/search_and_citation.md +0 -157
- package/skills/literature-review/scripts/generate_pdf.py +0 -176
- package/skills/literature-review/scripts/generate_schematic.py +0 -198
- package/skills/literature-review/scripts/generate_schematic_ai.py +0 -950
- package/skills/literature-review/scripts/search_databases.py +0 -303
- package/skills/literature-review/scripts/verify_citations.py +0 -222
- package/skills/markdown-mermaid-writing/assets/examples/example-research-report.md +0 -221
- package/skills/markdown-mermaid-writing/references/diagrams/architecture.md +0 -108
- package/skills/markdown-mermaid-writing/references/diagrams/block.md +0 -177
- package/skills/markdown-mermaid-writing/references/diagrams/c4.md +0 -136
- package/skills/markdown-mermaid-writing/references/diagrams/class.md +0 -246
- package/skills/markdown-mermaid-writing/references/diagrams/complex_examples.md +0 -384
- package/skills/markdown-mermaid-writing/references/diagrams/er.md +0 -222
- package/skills/markdown-mermaid-writing/references/diagrams/flowchart.md +0 -177
- package/skills/markdown-mermaid-writing/references/diagrams/gantt.md +0 -138
- package/skills/markdown-mermaid-writing/references/diagrams/git_graph.md +0 -74
- package/skills/markdown-mermaid-writing/references/diagrams/kanban.md +0 -107
- package/skills/markdown-mermaid-writing/references/diagrams/mindmap.md +0 -74
- package/skills/markdown-mermaid-writing/references/diagrams/packet.md +0 -55
- package/skills/markdown-mermaid-writing/references/diagrams/pie.md +0 -52
- package/skills/markdown-mermaid-writing/references/diagrams/quadrant.md +0 -66
- package/skills/markdown-mermaid-writing/references/diagrams/radar.md +0 -59
- package/skills/markdown-mermaid-writing/references/diagrams/requirement.md +0 -88
- package/skills/markdown-mermaid-writing/references/diagrams/sankey.md +0 -71
- package/skills/markdown-mermaid-writing/references/diagrams/sequence.md +0 -174
- package/skills/markdown-mermaid-writing/references/diagrams/state.md +0 -150
- package/skills/markdown-mermaid-writing/references/diagrams/timeline.md +0 -96
- package/skills/markdown-mermaid-writing/references/diagrams/treemap.md +0 -66
- package/skills/markdown-mermaid-writing/references/diagrams/user_journey.md +0 -108
- package/skills/markdown-mermaid-writing/references/diagrams/xy_chart.md +0 -53
- package/skills/markdown-mermaid-writing/references/diagrams/zenuml.md +0 -71
- package/skills/markdown-mermaid-writing/references/markdown_style_guide.md +0 -733
- package/skills/markdown-mermaid-writing/references/mermaid_style_guide.md +0 -458
- package/skills/markdown-mermaid-writing/templates/decision_record.md +0 -211
- package/skills/markdown-mermaid-writing/templates/how_to_guide.md +0 -275
- package/skills/markdown-mermaid-writing/templates/issue.md +0 -303
- package/skills/markdown-mermaid-writing/templates/kanban.md +0 -223
- package/skills/markdown-mermaid-writing/templates/presentation.md +0 -312
- package/skills/markdown-mermaid-writing/templates/project_documentation.md +0 -412
- package/skills/markdown-mermaid-writing/templates/pull_request.md +0 -319
- package/skills/markdown-mermaid-writing/templates/research_paper.md +0 -304
- package/skills/markdown-mermaid-writing/templates/status_report.md +0 -185
- package/skills/market-research-reports/assets/FORMATTING_GUIDE.md +0 -149
- package/skills/market-research-reports/assets/claims_ledger_template.csv +0 -4
- package/skills/market-research-reports/assets/competitor_feature_matrix_template.csv +0 -5
- package/skills/market-research-reports/assets/consistency_check_template.csv +0 -3
- package/skills/market-research-reports/assets/forecast_sensitivity_template.json +0 -90
- package/skills/market-research-reports/assets/market_report_template.tex +0 -279
- package/skills/market-research-reports/assets/market_research.sty +0 -241
- package/skills/market-research-reports/assets/market_sizing_scenarios_template.json +0 -129
- package/skills/market-research-reports/assets/report_manifest_template.json +0 -27
- package/skills/market-research-reports/assets/source_ledger_template.csv +0 -4
- package/skills/market-research-reports/references/data_analysis_patterns.md +0 -290
- package/skills/market-research-reports/references/evidence_model.md +0 -148
- package/skills/market-research-reports/references/methods_and_ethics.md +0 -162
- package/skills/market-research-reports/references/official_data_sources.md +0 -196
- package/skills/market-research-reports/references/report_structure_guide.md +0 -283
- package/skills/market-research-reports/references/sources.md +0 -73
- package/skills/market-research-reports/references/visual_generation_guide.md +0 -158
- package/skills/market-research-reports/scripts/_common.py +0 -312
- package/skills/market-research-reports/scripts/audit_claim_citations.py +0 -326
- package/skills/market-research-reports/scripts/calculate_market_sizing.py +0 -389
- package/skills/market-research-reports/scripts/check_unit_consistency.py +0 -217
- package/skills/market-research-reports/scripts/forecast_sensitivity.py +0 -326
- package/skills/market-research-reports/scripts/generate_report_scaffold.py +0 -444
- package/skills/market-research-reports/scripts/validate_competitor_matrix.py +0 -223
- package/skills/market-research-reports/scripts/validate_evidence_ledger.py +0 -291
- package/skills/markitdown/references/api_reference.md +0 -418
- package/skills/markitdown/references/cloud_and_ocr.md +0 -320
- package/skills/markitdown/references/file_formats.md +0 -281
- package/skills/markitdown/references/mcp_and_plugins.md +0 -243
- package/skills/markitdown/references/migration.md +0 -356
- package/skills/markitdown/references/security.md +0 -246
- package/skills/markitdown/references/workflows.md +0 -309
- package/skills/markitdown/scripts/batch_convert.py +0 -354
- package/skills/markitdown/scripts/convert_literature.py +0 -405
- package/skills/markitdown/scripts/inspect_installation.py +0 -162
- package/skills/matchms/references/filtering.md +0 -299
- package/skills/matchms/references/importing_exporting.md +0 -323
- package/skills/matchms/references/migration.md +0 -387
- package/skills/matchms/references/similarity.md +0 -413
- package/skills/matchms/references/sources.md +0 -113
- package/skills/matchms/references/workflows.md +0 -451
- package/skills/matchms/scripts/library_search.py +0 -593
- package/skills/matlab/assets/project_manifest_template.json +0 -33
- package/skills/matlab/assets/python_compatibility_r2026a.json +0 -27
- package/skills/matlab/assets/reproducibility_manifest_template.json +0 -32
- package/skills/matlab/references/data-import-export.md +0 -221
- package/skills/matlab/references/executing-scripts.md +0 -213
- package/skills/matlab/references/graphics-visualization.md +0 -181
- package/skills/matlab/references/mathematics.md +0 -208
- package/skills/matlab/references/matrices-arrays.md +0 -228
- package/skills/matlab/references/octave-compatibility.md +0 -212
- package/skills/matlab/references/programming.md +0 -225
- package/skills/matlab/references/python-integration.md +0 -248
- package/skills/matlab/scripts/_common.py +0 -263
- package/skills/matlab/scripts/generate_function_scaffold.py +0 -165
- package/skills/matlab/scripts/inventory_mat_file.py +0 -351
- package/skills/matlab/scripts/plan_batch_command.py +0 -257
- package/skills/matlab/scripts/plan_python_compatibility.py +0 -176
- package/skills/matlab/scripts/reproducibility_report.py +0 -233
- package/skills/matlab/scripts/scan_m_code.py +0 -433
- package/skills/matlab/scripts/validate_project_manifest.py +0 -348
- package/skills/matplotlib/references/api_reference.md +0 -409
- package/skills/matplotlib/references/common_issues.md +0 -562
- package/skills/matplotlib/references/plot_types.md +0 -469
- package/skills/matplotlib/references/styling_guide.md +0 -600
- package/skills/matplotlib/scripts/plot_template.py +0 -406
- package/skills/matplotlib/scripts/style_configurator.py +0 -412
- package/skills/medchem/references/api_guide.md +0 -331
- package/skills/medchem/references/rules_catalog.md +0 -328
- package/skills/medchem/scripts/filter_molecules.py +0 -302
- package/skills/modal/references/api_reference.md +0 -225
- package/skills/modal/references/examples.md +0 -276
- package/skills/modal/references/functions.md +0 -260
- package/skills/modal/references/getting-started.md +0 -171
- package/skills/modal/references/gpu.md +0 -177
- package/skills/modal/references/images.md +0 -266
- package/skills/modal/references/resources.md +0 -117
- package/skills/modal/references/scaling.md +0 -173
- package/skills/modal/references/scheduled-jobs.md +0 -147
- package/skills/modal/references/secrets.md +0 -119
- package/skills/modal/references/volumes.md +0 -247
- package/skills/modal/references/web-endpoints.md +0 -259
- package/skills/molecular-dynamics/references/mdanalysis_analysis.md +0 -208
- package/skills/molfeat/references/api_reference.md +0 -429
- package/skills/molfeat/references/available_featurizers.md +0 -335
- package/skills/molfeat/references/choosing_a_featurizer.md +0 -192
- package/skills/molfeat/references/examples.md +0 -720
- package/skills/ncats-arax/references/output-schema.md +0 -186
- package/skills/ncats-arax/references/query-contract.md +0 -140
- package/skills/ncats-arax/scripts/arax_client.py +0 -2087
- package/skills/networkx/references/algorithms.md +0 -384
- package/skills/networkx/references/generators.md +0 -385
- package/skills/networkx/references/graph-basics.md +0 -284
- package/skills/networkx/references/io.md +0 -457
- package/skills/networkx/references/visualization.md +0 -531
- package/skills/neurokit2/references/bio_module.md +0 -244
- package/skills/neurokit2/references/complexity.md +0 -212
- package/skills/neurokit2/references/ecg_cardiac.md +0 -193
- package/skills/neurokit2/references/eda.md +0 -185
- package/skills/neurokit2/references/eeg.md +0 -204
- package/skills/neurokit2/references/emg.md +0 -157
- package/skills/neurokit2/references/eog.md +0 -154
- package/skills/neurokit2/references/epochs_events.md +0 -199
- package/skills/neurokit2/references/hrv.md +0 -205
- package/skills/neurokit2/references/ppg.md +0 -191
- package/skills/neurokit2/references/rsp.md +0 -212
- package/skills/neurokit2/references/signal_processing.md +0 -160
- package/skills/neurokit2/scripts/_common.py +0 -567
- package/skills/neurokit2/scripts/ecg_hrv_pipeline.py +0 -303
- package/skills/neurokit2/scripts/eda_pipeline.py +0 -288
- package/skills/neurokit2/scripts/generate_synthetic.py +0 -221
- package/skills/neurokit2/scripts/inspect_signal.py +0 -362
- package/skills/neurokit2/scripts/plan_epochs.py +0 -281
- package/skills/neurokit2/scripts/validate_multimodal.py +0 -350
- package/skills/neuropixels-analysis/assets/analysis_template.py +0 -271
- package/skills/neuropixels-analysis/references/AI_CURATION.md +0 -164
- package/skills/neuropixels-analysis/references/ANALYSIS.md +0 -392
- package/skills/neuropixels-analysis/references/AUTOMATED_CURATION.md +0 -435
- package/skills/neuropixels-analysis/references/MOTION_CORRECTION.md +0 -323
- package/skills/neuropixels-analysis/references/PREPROCESSING.md +0 -273
- package/skills/neuropixels-analysis/references/QUALITY_METRICS.md +0 -359
- package/skills/neuropixels-analysis/references/SPIKE_SORTING.md +0 -339
- package/skills/neuropixels-analysis/references/api_reference.md +0 -229
- package/skills/neuropixels-analysis/references/plotting_guide.md +0 -454
- package/skills/neuropixels-analysis/references/standard_workflow.md +0 -305
- package/skills/neuropixels-analysis/scripts/compute_metrics.py +0 -182
- package/skills/neuropixels-analysis/scripts/explore_recording.py +0 -168
- package/skills/neuropixels-analysis/scripts/export_to_phy.py +0 -79
- package/skills/neuropixels-analysis/scripts/neuropixels_pipeline.py +0 -442
- package/skills/neuropixels-analysis/scripts/preprocess_recording.py +0 -122
- package/skills/neuropixels-analysis/scripts/run_sorting.py +0 -98
- package/skills/nextflow/references/configuration.md +0 -276
- package/skills/nextflow/references/containers.md +0 -92
- package/skills/nextflow/references/developing.md +0 -301
- package/skills/nextflow/references/language.md +0 -327
- package/skills/nextflow/references/nf-core-tools.md +0 -130
- package/skills/nextflow/references/running-pipelines.md +0 -131
- package/skills/nextflow/references/testing.md +0 -189
- package/skills/omero-integration/references/advanced.md +0 -273
- package/skills/omero-integration/references/connection.md +0 -293
- package/skills/omero-integration/references/data_access.md +0 -359
- package/skills/omero-integration/references/image_processing.md +0 -286
- package/skills/omero-integration/references/metadata.md +0 -313
- package/skills/omero-integration/references/rois.md +0 -291
- package/skills/omero-integration/references/scripts.md +0 -304
- package/skills/omero-integration/references/sources.md +0 -194
- package/skills/omero-integration/references/tables.md +0 -269
- package/skills/omero-integration/scripts/export_image_metadata.py +0 -560
- package/skills/omero-integration/scripts/inventory.py +0 -302
- package/skills/omero-integration/scripts/omero_common.py +0 -490
- package/skills/omero-integration/scripts/plan_transfer.py +0 -393
- package/skills/omero-integration/scripts/validate_config.py +0 -140
- package/skills/onekgpd/assets/kgpe.json +0 -48032
- package/skills/onekgpd/references/annotation_vocabularies.md +0 -187
- package/skills/onekgpd/references/onekgpd_commands.md +0 -296
- package/skills/onekgpd/scripts/onekgpd_api.py +0 -794
- package/skills/onekgpd/scripts/onekgpd_meta.py +0 -485
- package/skills/ontology-term-resolution/references/curation-rules.md +0 -110
- package/skills/ontology-term-resolution/references/ols4-api.md +0 -135
- package/skills/ontology-term-resolution/references/ontology-registry.md +0 -110
- package/skills/ontology-term-resolution/scripts/ols_client.py +0 -341
- package/skills/ontology-term-resolution/scripts/resolve_terms.py +0 -255
- package/skills/ontology-term-resolution/scripts/validate_terms.py +0 -297
- package/skills/open-notebook/references/api_reference.md +0 -715
- package/skills/open-notebook/references/architecture.md +0 -163
- package/skills/open-notebook/references/configuration.md +0 -226
- package/skills/open-notebook/references/examples.md +0 -290
- package/skills/open-notebook/scripts/chat_interaction.py +0 -190
- package/skills/open-notebook/scripts/notebook_management.py +0 -142
- package/skills/open-notebook/scripts/source_ingestion.py +0 -160
- package/skills/openpiv/references/advanced_algorithms.md +0 -233
- package/skills/openpiv/scripts/__init__.py +0 -1
- package/skills/openpiv/scripts/analyze.py +0 -143
- package/skills/openpiv/scripts/run_example.py +0 -78
- package/skills/openpiv/scripts/runner.py +0 -214
- package/skills/opentrons-integration/references/api_reference.md +0 -382
- package/skills/opentrons-integration/references/liquid_handling.md +0 -387
- package/skills/opentrons-integration/references/migration-api-2-19-to-2-29.md +0 -328
- package/skills/opentrons-integration/references/modules_and_deck.md +0 -409
- package/skills/opentrons-integration/references/protocol_authoring.md +0 -352
- package/skills/opentrons-integration/references/sources.md +0 -151
- package/skills/opentrons-integration/references/validation_and_operations.md +0 -314
- package/skills/opentrons-integration/requirements-flex.txt +0 -1
- package/skills/opentrons-integration/requirements-ot2.txt +0 -1
- package/skills/opentrons-integration/scripts/absorbance_reader_template.py +0 -82
- package/skills/opentrons-integration/scripts/basic_protocol_template.py +0 -68
- package/skills/opentrons-integration/scripts/ot2_basic_protocol_template.py +0 -63
- package/skills/opentrons-integration/scripts/pcr_setup_template.py +0 -146
- package/skills/opentrons-integration/scripts/runtime_parameters_template.py +0 -110
- package/skills/opentrons-integration/scripts/serial_dilution_template.py +0 -113
- package/skills/optimize-for-gpu/references/code_transformation_patterns.md +0 -301
- package/skills/optimize-for-gpu/references/cucim.md +0 -679
- package/skills/optimize-for-gpu/references/cudf.md +0 -762
- package/skills/optimize-for-gpu/references/cugraph.md +0 -733
- package/skills/optimize-for-gpu/references/cuml.md +0 -710
- package/skills/optimize-for-gpu/references/cupy.md +0 -668
- package/skills/optimize-for-gpu/references/cuspatial.md +0 -420
- package/skills/optimize-for-gpu/references/cuvs.md +0 -671
- package/skills/optimize-for-gpu/references/cuxfilter.md +0 -600
- package/skills/optimize-for-gpu/references/decision_framework.md +0 -234
- package/skills/optimize-for-gpu/references/installation.md +0 -121
- package/skills/optimize-for-gpu/references/kvikio.md +0 -612
- package/skills/optimize-for-gpu/references/numba.md +0 -808
- package/skills/optimize-for-gpu/references/raft.md +0 -312
- package/skills/optimize-for-gpu/references/warp.md +0 -623
- package/skills/pacsomatic/config.yaml +0 -42
- package/skills/pacsomatic/references/agent-playbook.md +0 -73
- package/skills/pacsomatic/references/config-and-output.md +0 -100
- package/skills/pacsomatic/references/pacsomatic_guide.md +0 -254
- package/skills/pacsomatic/scripts/run_pacsomatic.py +0 -794
- package/skills/paper-lookup/references/arxiv.md +0 -275
- package/skills/paper-lookup/references/biorxiv.md +0 -163
- package/skills/paper-lookup/references/core.md +0 -150
- package/skills/paper-lookup/references/crossref.md +0 -181
- package/skills/paper-lookup/references/europepmc.md +0 -226
- package/skills/paper-lookup/references/medrxiv.md +0 -126
- package/skills/paper-lookup/references/openalex.md +0 -174
- package/skills/paper-lookup/references/pmc.md +0 -228
- package/skills/paper-lookup/references/pubmed.md +0 -124
- package/skills/paper-lookup/references/semantic-scholar.md +0 -203
- package/skills/paper-lookup/references/unpaywall.md +0 -127
- package/skills/paper-lookup/scripts/_common.py +0 -227
- package/skills/paper-lookup/scripts/arxiv_atom.py +0 -200
- package/skills/paper-lookup/scripts/jats_to_text.py +0 -324
- package/skills/paper-lookup/scripts/openalex_abstract.py +0 -163
- package/skills/paper-lookup/scripts/paginate.py +0 -490
- package/skills/paperclip/references/cli-reference.md +0 -389
- package/skills/paperclip/references/installation.md +0 -341
- package/skills/paperclip/references/map-reduce.md +0 -252
- package/skills/paperclip/references/python-sdk.md +0 -323
- package/skills/paperclip/references/repos-and-workspace.md +0 -271
- package/skills/paperclip/references/search-and-retrieval.md +0 -281
- package/skills/parallel-web/references/data-enrichment.md +0 -104
- package/skills/parallel-web/references/deep-research.md +0 -91
- package/skills/parallel-web/references/findall.md +0 -81
- package/skills/parallel-web/references/monitor.md +0 -83
- package/skills/parallel-web/references/web-extract.md +0 -59
- package/skills/parallel-web/references/web-search.md +0 -100
- package/skills/pathml/references/data_management.md +0 -357
- package/skills/pathml/references/graphs.md +0 -335
- package/skills/pathml/references/image_loading.md +0 -301
- package/skills/pathml/references/machine_learning.md +0 -408
- package/skills/pathml/references/multiparametric.md +0 -352
- package/skills/pathml/references/preprocessing.md +0 -371
- package/skills/pathml/scripts/_common.py +0 -385
- package/skills/pathml/scripts/image_qc.py +0 -325
- package/skills/pathml/scripts/plan_inference.py +0 -282
- package/skills/pathml/scripts/plan_pipeline.py +0 -239
- package/skills/pathml/scripts/slide_manifest.py +0 -405
- package/skills/pathml/scripts/validate_spatial_schema.py +0 -420
- package/skills/pathogen-variant-surveillance/references/lapis-api.md +0 -209
- package/skills/pathogen-variant-surveillance/references/lineage-nomenclature.md +0 -126
- package/skills/pathogen-variant-surveillance/references/surveillance-caveats.md +0 -149
- package/skills/pathogen-variant-surveillance/scripts/lapis_client.py +0 -776
- package/skills/pathogen-variant-surveillance/scripts/lineage_prevalence.py +0 -310
- package/skills/pathogen-variant-surveillance/scripts/mutation_profile.py +0 -215
- package/skills/pathogen-variant-surveillance/scripts/reporting_lag.py +0 -217
- package/skills/pathogen-variant-surveillance/scripts/resolve_lineage.py +0 -198
- package/skills/pathway-enrichment/references/databases-and-gene-sets.md +0 -140
- package/skills/pathway-enrichment/references/gseapy.md +0 -189
- package/skills/pathway-enrichment/references/interpretation.md +0 -118
- package/skills/pathway-enrichment/scripts/run_enrichment.py +0 -231
- package/skills/pdf/LICENSE.txt +0 -30
- package/skills/pdf/forms.md +0 -294
- package/skills/pdf/reference.md +0 -612
- package/skills/pdf/scripts/check_bounding_boxes.py +0 -65
- package/skills/pdf/scripts/check_fillable_fields.py +0 -11
- package/skills/pdf/scripts/convert_pdf_to_images.py +0 -33
- package/skills/pdf/scripts/create_validation_image.py +0 -37
- package/skills/pdf/scripts/extract_form_field_info.py +0 -122
- package/skills/pdf/scripts/extract_form_structure.py +0 -115
- package/skills/pdf/scripts/fill_fillable_fields.py +0 -98
- package/skills/pdf/scripts/fill_pdf_form_with_annotations.py +0 -107
- package/skills/peer-review/assets/citation_references_template.csv +0 -2
- package/skills/peer-review/assets/claim_evidence_matrix_template.csv +0 -4
- package/skills/peer-review/assets/reporting_checklist_template.csv +0 -31
- package/skills/peer-review/assets/reporting_guidelines.json +0 -466
- package/skills/peer-review/assets/review_intake_template.json +0 -52
- package/skills/peer-review/assets/review_scaffold_template.md +0 -68
- package/skills/peer-review/assets/source_ledger.csv +0 -32
- package/skills/peer-review/assets/statistical_reproducibility_template.json +0 -210
- package/skills/peer-review/assets/study_profile_template.json +0 -12
- package/skills/peer-review/references/common_issues.md +0 -257
- package/skills/peer-review/references/ethical_review_practice.md +0 -233
- package/skills/peer-review/references/reporting_standards.md +0 -249
- package/skills/peer-review/references/security_validation.md +0 -75
- package/skills/peer-review/references/statistical_reproducibility.md +0 -329
- package/skills/peer-review/references/tool_reference.md +0 -253
- package/skills/peer-review/scripts/_common.py +0 -398
- package/skills/peer-review/scripts/audit_citations.py +0 -207
- package/skills/peer-review/scripts/audit_statistics_reproducibility.py +0 -305
- package/skills/peer-review/scripts/generate_review_scaffold.py +0 -81
- package/skills/peer-review/scripts/lint_review.py +0 -254
- package/skills/peer-review/scripts/select_reporting_guidelines.py +0 -383
- package/skills/peer-review/scripts/validate_claim_evidence.py +0 -221
- package/skills/peer-review/scripts/validate_review_intake.py +0 -452
- package/skills/pennylane/references/advanced_features.md +0 -667
- package/skills/pennylane/references/devices_backends.md +0 -562
- package/skills/pennylane/references/getting_started.md +0 -232
- package/skills/pennylane/references/optimization.md +0 -670
- package/skills/pennylane/references/quantum_chemistry.md +0 -576
- package/skills/pennylane/references/quantum_circuits.md +0 -443
- package/skills/pennylane/references/quantum_ml.md +0 -555
- package/skills/phylogenetics/references/iqtree_inference.md +0 -181
- package/skills/phylogenetics/scripts/phylogenetic_analysis.py +0 -272
- package/skills/pi-agent/references/compaction.md +0 -76
- package/skills/pi-agent/references/containerization.md +0 -80
- package/skills/pi-agent/references/custom-provider.md +0 -131
- package/skills/pi-agent/references/development.md +0 -61
- package/skills/pi-agent/references/environment-variables.md +0 -57
- package/skills/pi-agent/references/extensions.md +0 -185
- package/skills/pi-agent/references/json.md +0 -69
- package/skills/pi-agent/references/keybindings.md +0 -58
- package/skills/pi-agent/references/llama-cpp.md +0 -69
- package/skills/pi-agent/references/models.md +0 -114
- package/skills/pi-agent/references/overview.md +0 -37
- package/skills/pi-agent/references/packages.md +0 -103
- package/skills/pi-agent/references/pi-interview.md +0 -123
- package/skills/pi-agent/references/pi-mcp-adapter.md +0 -191
- package/skills/pi-agent/references/pi-subagents.md +0 -371
- package/skills/pi-agent/references/pi-web-access.md +0 -243
- package/skills/pi-agent/references/prompt-templates.md +0 -48
- package/skills/pi-agent/references/providers.md +0 -122
- package/skills/pi-agent/references/quickstart.md +0 -73
- package/skills/pi-agent/references/rpc.md +0 -95
- package/skills/pi-agent/references/sdk.md +0 -151
- package/skills/pi-agent/references/security.md +0 -52
- package/skills/pi-agent/references/session-format.md +0 -90
- package/skills/pi-agent/references/sessions.md +0 -56
- package/skills/pi-agent/references/settings.md +0 -102
- package/skills/pi-agent/references/shell-aliases.md +0 -15
- package/skills/pi-agent/references/skills.md +0 -83
- package/skills/pi-agent/references/terminal-setup.md +0 -87
- package/skills/pi-agent/references/termux.md +0 -31
- package/skills/pi-agent/references/themes.md +0 -69
- package/skills/pi-agent/references/tmux.md +0 -44
- package/skills/pi-agent/references/tui.md +0 -97
- package/skills/pi-agent/references/usage.md +0 -129
- package/skills/pi-agent/references/windows.md +0 -23
- package/skills/pkpd-modeling/assets/nca-reporting-checklist.md +0 -72
- package/skills/pkpd-modeling/assets/popk-analysis-plan.md +0 -136
- package/skills/pkpd-modeling/references/antimicrobial-and-tdm.md +0 -110
- package/skills/pkpd-modeling/references/bioequivalence.md +0 -132
- package/skills/pkpd-modeling/references/dataset-standards.md +0 -103
- package/skills/pkpd-modeling/references/ddi-and-qt.md +0 -132
- package/skills/pkpd-modeling/references/nca-conventions.md +0 -128
- package/skills/pkpd-modeling/references/pbpk.md +0 -103
- package/skills/pkpd-modeling/references/pd-and-exposure-response.md +0 -149
- package/skills/pkpd-modeling/references/population-pk.md +0 -133
- package/skills/pkpd-modeling/references/regulatory-guidance.md +0 -82
- package/skills/pkpd-modeling/references/software-ecosystem.md +0 -123
- package/skills/pkpd-modeling/references/source-ledger.md +0 -89
- package/skills/pkpd-modeling/references/special-populations.md +0 -126
- package/skills/pkpd-modeling/references/structural-models.md +0 -140
- package/skills/pkpd-modeling/references/tmdd-and-biologics.md +0 -115
- package/skills/pkpd-modeling/scripts/_common.py +0 -327
- package/skills/pkpd-modeling/scripts/_models.py +0 -673
- package/skills/pkpd-modeling/scripts/allometry_and_fih.py +0 -346
- package/skills/pkpd-modeling/scripts/bioequivalence.py +0 -480
- package/skills/pkpd-modeling/scripts/check_popk_dataset.py +0 -400
- package/skills/pkpd-modeling/scripts/ddi_static.py +0 -346
- package/skills/pkpd-modeling/scripts/exposure_response.py +0 -328
- package/skills/pkpd-modeling/scripts/fit_compartmental.py +0 -558
- package/skills/pkpd-modeling/scripts/nca.py +0 -587
- package/skills/pkpd-modeling/scripts/simulate_regimen.py +0 -323
- package/skills/pkpd-modeling/scripts/tdm_bayes.py +0 -312
- package/skills/polars/references/best_practices.md +0 -651
- package/skills/polars/references/core_concepts.md +0 -380
- package/skills/polars/references/io_guide.md +0 -564
- package/skills/polars/references/operations.md +0 -602
- package/skills/polars/references/pandas_migration.md +0 -417
- package/skills/polars/references/transformations.md +0 -549
- package/skills/polars-bio/references/bioframe_migration.md +0 -250
- package/skills/polars-bio/references/configuration.md +0 -187
- package/skills/polars-bio/references/file_io.md +0 -469
- package/skills/polars-bio/references/interval_operations.md +0 -370
- package/skills/polars-bio/references/pileup_operations.md +0 -176
- package/skills/polars-bio/references/sql_processing.md +0 -224
- package/skills/pptx/LICENSE.txt +0 -30
- package/skills/pptx/scripts/__init__.py +0 -0
- package/skills/pptx/scripts/add_slide.py +0 -367
- package/skills/pptx/scripts/clean.py +0 -309
- package/skills/pptx/scripts/office/helpers/__init__.py +0 -111
- package/skills/pptx/scripts/office/helpers/pptx_chart.py +0 -170
- package/skills/pptx/scripts/office/helpers/pptx_slide.py +0 -60
- package/skills/pptx/scripts/office/helpers/pptx_theme.py +0 -114
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -1499
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -146
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -1085
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -11
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -3081
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -23
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -185
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -287
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -1676
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -28
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -144
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -174
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -25
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -18
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -59
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -56
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -195
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -582
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -25
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -4439
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -570
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -509
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -12
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -108
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -96
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -3646
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -116
- package/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -42
- package/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -50
- package/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -49
- package/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -33
- package/skills/pptx/scripts/office/schemas/mce/mc.xsd +0 -75
- package/skills/pptx/scripts/office/schemas/microsoft/wml-2010.xsd +0 -560
- package/skills/pptx/scripts/office/schemas/microsoft/wml-2012.xsd +0 -67
- package/skills/pptx/scripts/office/schemas/microsoft/wml-2018.xsd +0 -14
- package/skills/pptx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +0 -20
- package/skills/pptx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +0 -13
- package/skills/pptx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -4
- package/skills/pptx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +0 -8
- package/skills/pptx/scripts/office/soffice.py +0 -232
- package/skills/pptx/scripts/office/validate.py +0 -173
- package/skills/pptx/scripts/office/validators/__init__.py +0 -15
- package/skills/pptx/scripts/office/validators/base.py +0 -875
- package/skills/pptx/scripts/office/validators/docx.py +0 -466
- package/skills/pptx/scripts/office/validators/pptx.py +0 -441
- package/skills/pptx/scripts/office/validators/redlining.py +0 -299
- package/skills/pptx/scripts/thumbnail.py +0 -311
- package/skills/pptx-posters/assets/generation_dependencies.json +0 -5
- package/skills/pptx-posters/assets/poster_manifest_template.json +0 -154
- package/skills/pptx-posters/assets/poster_quality_checklist.md +0 -192
- package/skills/pptx-posters/references/manifest_spec.md +0 -297
- package/skills/pptx-posters/references/poster_content_guide.md +0 -176
- package/skills/pptx-posters/references/poster_design_principles.md +0 -226
- package/skills/pptx-posters/references/poster_layout_design.md +0 -189
- package/skills/pptx-posters/references/pptx_security.md +0 -202
- package/skills/pptx-posters/references/security_validation.md +0 -90
- package/skills/pptx-posters/references/source_ledger.md +0 -256
- package/skills/pptx-posters/scripts/_common.py +0 -396
- package/skills/pptx-posters/scripts/_manifest.py +0 -1318
- package/skills/pptx-posters/scripts/_pptx.py +0 -1484
- package/skills/pptx-posters/scripts/check_layout.py +0 -179
- package/skills/pptx-posters/scripts/check_palette.py +0 -142
- package/skills/pptx-posters/scripts/generate_poster.py +0 -427
- package/skills/pptx-posters/scripts/inspect_pptx.py +0 -40
- package/skills/pptx-posters/scripts/inventory_images.py +0 -252
- package/skills/pptx-posters/scripts/plan_export.py +0 -201
- package/skills/pptx-posters/scripts/validate_manifest.py +0 -55
- package/skills/primekg/scripts/query_primekg.py +0 -128
- package/skills/protocolsio-integration/assets/protocol-snapshot.schema.json +0 -179
- package/skills/protocolsio-integration/references/additional_features.md +0 -202
- package/skills/protocolsio-integration/references/authentication.md +0 -135
- package/skills/protocolsio-integration/references/discussions.md +0 -192
- package/skills/protocolsio-integration/references/file_manager.md +0 -256
- package/skills/protocolsio-integration/references/protocols_api.md +0 -256
- package/skills/protocolsio-integration/references/workspaces.md +0 -192
- package/skills/protocolsio-integration/scripts/__init__.py +0 -1
- package/skills/protocolsio-integration/scripts/_common.py +0 -613
- package/skills/protocolsio-integration/scripts/pagination_helper.py +0 -248
- package/skills/protocolsio-integration/scripts/plan_write_request.py +0 -657
- package/skills/protocolsio-integration/scripts/protocols_read.py +0 -493
- package/skills/protocolsio-integration/scripts/validate_auth_config.py +0 -128
- package/skills/protocolsio-integration/scripts/validate_protocol_json.py +0 -358
- package/skills/pufferlib/references/environments.md +0 -260
- package/skills/pufferlib/references/integration.md +0 -192
- package/skills/pufferlib/references/policies.md +0 -181
- package/skills/pufferlib/references/training.md +0 -287
- package/skills/pufferlib/references/vectorization.md +0 -210
- package/skills/pufferlib/scripts/__init__.py +0 -1
- package/skills/pufferlib/scripts/_common.py +0 -199
- package/skills/pufferlib/scripts/benchmark_vectorization.py +0 -244
- package/skills/pufferlib/scripts/env_contract_validator.py +0 -198
- package/skills/pufferlib/scripts/env_template.py +0 -210
- package/skills/pufferlib/scripts/inspect_checkpoint.py +0 -225
- package/skills/pufferlib/scripts/repro_plan.py +0 -177
- package/skills/pufferlib/scripts/train_template.py +0 -282
- package/skills/pufferlib/scripts/validate_plan.py +0 -570
- package/skills/pydeseq2/references/analysis_patterns.md +0 -70
- package/skills/pydeseq2/references/api_reference.md +0 -256
- package/skills/pydeseq2/references/core_workflow_steps.md +0 -162
- package/skills/pydeseq2/references/workflow_guide.md +0 -603
- package/skills/pydeseq2/scripts/run_deseq2_analysis.py +0 -388
- package/skills/pydicom/references/common_tags.md +0 -277
- package/skills/pydicom/references/transfer_syntaxes.md +0 -348
- package/skills/pydicom/scripts/__init__.py +0 -1
- package/skills/pydicom/scripts/_common.py +0 -916
- package/skills/pydicom/scripts/anonymize_dicom.py +0 -713
- package/skills/pydicom/scripts/deidentification_audit.py +0 -380
- package/skills/pydicom/scripts/dicom_inventory.py +0 -402
- package/skills/pydicom/scripts/dicom_to_image.py +0 -459
- package/skills/pydicom/scripts/extract_metadata.py +0 -330
- package/skills/pydicom/scripts/pixel_frame_planner.py +0 -303
- package/skills/pydicom/scripts/transfer_syntax_inspector.py +0 -245
- package/skills/pydicom/scripts/uid_mapping_validator.py +0 -240
- package/skills/pyhealth/assets/starter_pipeline.py +0 -58
- package/skills/pyhealth/references/datasets.md +0 -126
- package/skills/pyhealth/references/examples.md +0 -237
- package/skills/pyhealth/references/installation.md +0 -112
- package/skills/pyhealth/references/medcode.md +0 -94
- package/skills/pyhealth/references/models.md +0 -114
- package/skills/pyhealth/references/tasks.md +0 -143
- package/skills/pylabrobot/assets/protocol-manifest.schema.json +0 -367
- package/skills/pylabrobot/references/analytical-equipment.md +0 -200
- package/skills/pylabrobot/references/hardware-backends.md +0 -215
- package/skills/pylabrobot/references/liquid-handling.md +0 -223
- package/skills/pylabrobot/references/material-handling.md +0 -229
- package/skills/pylabrobot/references/resources.md +0 -238
- package/skills/pylabrobot/references/visualization.md +0 -187
- package/skills/pylabrobot/scripts/__init__.py +0 -1
- package/skills/pylabrobot/scripts/_common.py +0 -718
- package/skills/pylabrobot/scripts/check_deck_geometry.py +0 -52
- package/skills/pylabrobot/scripts/generate_simulation_plan.py +0 -140
- package/skills/pylabrobot/scripts/inspect_backends.py +0 -216
- package/skills/pylabrobot/scripts/plan_transfers.py +0 -59
- package/skills/pylabrobot/scripts/validate_manifest.py +0 -47
- package/skills/pymatgen/references/analysis_modules.md +0 -352
- package/skills/pymatgen/references/core_classes.md +0 -290
- package/skills/pymatgen/references/io_formats.md +0 -323
- package/skills/pymatgen/references/materials_project_api.md +0 -406
- package/skills/pymatgen/references/transformations_workflows.md +0 -385
- package/skills/pymatgen/scripts/_common.py +0 -316
- package/skills/pymatgen/scripts/artifact_manifest.py +0 -172
- package/skills/pymatgen/scripts/composition_structure_validator.py +0 -300
- package/skills/pymatgen/scripts/io_conversion_plan.py +0 -204
- package/skills/pymatgen/scripts/mp_query.py +0 -416
- package/skills/pymatgen/scripts/phase_diagram_generator.py +0 -415
- package/skills/pymatgen/scripts/structure_analyzer.py +0 -293
- package/skills/pymatgen/scripts/structure_converter.py +0 -219
- package/skills/pymatgen/scripts/symmetry_sensitivity_report.py +0 -212
- package/skills/pymc/assets/hierarchical_model_template.py +0 -332
- package/skills/pymc/assets/linear_regression_template.py +0 -244
- package/skills/pymc/references/distributions.md +0 -345
- package/skills/pymc/references/model_patterns.md +0 -130
- package/skills/pymc/references/sampling_inference.md +0 -432
- package/skills/pymc/references/standard_workflow.md +0 -176
- package/skills/pymc/references/workflows.md +0 -530
- package/skills/pymc/scripts/model_comparison.py +0 -409
- package/skills/pymc/scripts/model_diagnostics.py +0 -328
- package/skills/pymoo/references/algorithms.md +0 -232
- package/skills/pymoo/references/constraints_mcdm.md +0 -417
- package/skills/pymoo/references/operators.md +0 -345
- package/skills/pymoo/references/parallelization.md +0 -80
- package/skills/pymoo/references/problems.md +0 -265
- package/skills/pymoo/references/quick_start_workflows.md +0 -404
- package/skills/pymoo/references/visualization.md +0 -353
- package/skills/pymoo/scripts/custom_problem_example.py +0 -181
- package/skills/pymoo/scripts/decision_making_example.py +0 -161
- package/skills/pymoo/scripts/many_objective_example.py +0 -74
- package/skills/pymoo/scripts/multi_objective_example.py +0 -63
- package/skills/pymoo/scripts/single_objective_example.py +0 -59
- package/skills/pyopenms/references/data_structures.md +0 -498
- package/skills/pyopenms/references/feature_detection.md +0 -495
- package/skills/pyopenms/references/file_io.md +0 -359
- package/skills/pyopenms/references/identification.md +0 -431
- package/skills/pyopenms/references/metabolomics.md +0 -548
- package/skills/pyopenms/references/signal_processing.md +0 -444
- package/skills/pyopenms/scripts/accurate_mass_search.py +0 -111
- package/skills/pyopenms/scripts/align_link_quantify.py +0 -140
- package/skills/pyopenms/scripts/consensus_to_matrix.py +0 -70
- package/skills/pyopenms/scripts/convert_format.py +0 -95
- package/skills/pyopenms/scripts/detect_adducts.py +0 -90
- package/skills/pyopenms/scripts/detect_features_centroided.py +0 -80
- package/skills/pyopenms/scripts/detect_features_metabo.py +0 -110
- package/skills/pyopenms/scripts/digest_protein.py +0 -102
- package/skills/pyopenms/scripts/export_gnps_sirius.py +0 -90
- package/skills/pyopenms/scripts/extract_chromatograms.py +0 -105
- package/skills/pyopenms/scripts/inspect_ms_data.py +0 -167
- package/skills/pyopenms/scripts/mass_calculator.py +0 -92
- package/skills/pyopenms/scripts/plot_ms_data.py +0 -129
- package/skills/pyopenms/scripts/process_identifications.py +0 -111
- package/skills/pyopenms/scripts/process_spectra.py +0 -124
- package/skills/pyopenms/scripts/theoretical_spectrum.py +0 -75
- package/skills/pysam/references/alignment_files.md +0 -374
- package/skills/pysam/references/api_reference.md +0 -421
- package/skills/pysam/references/common_workflows.md +0 -442
- package/skills/pysam/references/coordinates_and_indexing.md +0 -318
- package/skills/pysam/references/cram_and_performance.md +0 -314
- package/skills/pysam/references/migration_to_0_24.md +0 -177
- package/skills/pysam/references/sequence_files.md +0 -316
- package/skills/pysam/references/sources.md +0 -132
- package/skills/pysam/references/variant_files.md +0 -396
- package/skills/pysam/scripts/alignment_qc.py +0 -326
- package/skills/pysam/scripts/filter_alignments.py +0 -359
- package/skills/pysam/scripts/inspect_hts.py +0 -485
- package/skills/pysam/scripts/variant_summary.py +0 -362
- package/skills/pytdc/references/datasets.md +0 -242
- package/skills/pytdc/references/oracles.md +0 -273
- package/skills/pytdc/references/sources.md +0 -165
- package/skills/pytdc/references/utilities.md +0 -364
- package/skills/pytdc/scripts/_common.py +0 -205
- package/skills/pytdc/scripts/benchmark_evaluation.py +0 -367
- package/skills/pytdc/scripts/cache_audit.py +0 -146
- package/skills/pytdc/scripts/discover_metadata.py +0 -174
- package/skills/pytdc/scripts/load_and_split_data.py +0 -374
- package/skills/pytdc/scripts/molecular_generation.py +0 -417
- package/skills/pytorch-lightning/references/best_practices.md +0 -724
- package/skills/pytorch-lightning/references/callbacks.md +0 -564
- package/skills/pytorch-lightning/references/data_module.md +0 -565
- package/skills/pytorch-lightning/references/distributed_training.md +0 -644
- package/skills/pytorch-lightning/references/lightning_module.md +0 -487
- package/skills/pytorch-lightning/references/logging.md +0 -636
- package/skills/pytorch-lightning/references/trainer.md +0 -641
- package/skills/pytorch-lightning/scripts/quick_trainer_setup.py +0 -473
- package/skills/pytorch-lightning/scripts/template_datamodule.py +0 -328
- package/skills/pytorch-lightning/scripts/template_lightning_module.py +0 -220
- package/skills/pyzotero/references/authentication.md +0 -105
- package/skills/pyzotero/references/cli.md +0 -102
- package/skills/pyzotero/references/collections.md +0 -113
- package/skills/pyzotero/references/error-handling.md +0 -108
- package/skills/pyzotero/references/exports.md +0 -102
- package/skills/pyzotero/references/files-attachments.md +0 -97
- package/skills/pyzotero/references/full-text.md +0 -68
- package/skills/pyzotero/references/mcp.md +0 -90
- package/skills/pyzotero/references/pagination.md +0 -79
- package/skills/pyzotero/references/read-api.md +0 -137
- package/skills/pyzotero/references/saved-searches.md +0 -77
- package/skills/pyzotero/references/search-params.md +0 -90
- package/skills/pyzotero/references/tags.md +0 -87
- package/skills/pyzotero/references/write-api.md +0 -123
- package/skills/qiskit/references/algorithms.md +0 -311
- package/skills/qiskit/references/backends.md +0 -382
- package/skills/qiskit/references/circuits.md +0 -319
- package/skills/qiskit/references/migration.md +0 -338
- package/skills/qiskit/references/patterns.md +0 -386
- package/skills/qiskit/references/primitives.md +0 -400
- package/skills/qiskit/references/setup.md +0 -253
- package/skills/qiskit/references/sources.md +0 -156
- package/skills/qiskit/references/testing.md +0 -428
- package/skills/qiskit/references/transpilation.md +0 -333
- package/skills/qiskit/references/visualization.md +0 -361
- package/skills/qiskit/scripts/check_environment.py +0 -260
- package/skills/qiskit/scripts/inspect_runtime.py +0 -224
- package/skills/qiskit/scripts/run_local_primitives.py +0 -200
- package/skills/qutip/references/advanced.md +0 -413
- package/skills/qutip/references/analysis.md +0 -319
- package/skills/qutip/references/core_concepts.md +0 -300
- package/skills/qutip/references/time_evolution.md +0 -373
- package/skills/qutip/references/visualization.md +0 -334
- package/skills/qutip/scripts/_common.py +0 -370
- package/skills/qutip/scripts/convergence_sweep.py +0 -358
- package/skills/qutip/scripts/qobj_model_validator.py +0 -327
- package/skills/qutip/scripts/result_audit.py +0 -395
- package/skills/qutip/scripts/solver_config_planner.py +0 -297
- package/skills/qutip/scripts/steady_state_spectrum_planner.py +0 -245
- package/skills/qutip/scripts/two_level_simulation.py +0 -394
- package/skills/rdkit/references/api_reference.md +0 -443
- package/skills/rdkit/references/core_capabilities.md +0 -604
- package/skills/rdkit/references/descriptors_reference.md +0 -595
- package/skills/rdkit/references/smarts_patterns.md +0 -668
- package/skills/rdkit/references/workflows_and_best_practices.md +0 -169
- package/skills/rdkit/scripts/molecular_properties.py +0 -243
- package/skills/rdkit/scripts/similarity_search.py +0 -297
- package/skills/rdkit/scripts/substructure_filter.py +0 -386
- package/skills/relsa-severity-assessment/assets/example_cohort.csv +0 -55
- package/skills/relsa-severity-assessment/references/forecasting.md +0 -155
- package/skills/relsa-severity-assessment/references/relsa-method.md +0 -175
- package/skills/relsa-severity-assessment/references/thresholds-and-zones.md +0 -154
- package/skills/relsa-severity-assessment/scripts/_common.py +0 -287
- package/skills/relsa-severity-assessment/scripts/forecast_relsa.py +0 -757
- package/skills/relsa-severity-assessment/scripts/kde_thresholds.py +0 -369
- package/skills/relsa-severity-assessment/scripts/relsa_score.py +0 -488
- package/skills/research-grants/assets/budget_justification_template.md +0 -453
- package/skills/research-grants/assets/nih_specific_aims_template.md +0 -166
- package/skills/research-grants/assets/nsf_project_summary_template.md +0 -92
- package/skills/research-grants/references/broader_impacts.md +0 -392
- package/skills/research-grants/references/core_components.md +0 -397
- package/skills/research-grants/references/darpa_guidelines.md +0 -636
- package/skills/research-grants/references/doe_guidelines.md +0 -586
- package/skills/research-grants/references/nih_guidelines.md +0 -853
- package/skills/research-grants/references/nsf_guidelines.md +0 -570
- package/skills/research-grants/references/nstc_guidelines.md +0 -733
- package/skills/research-grants/references/proposal_types_and_resubmission.md +0 -81
- package/skills/research-grants/references/review_criteria.md +0 -93
- package/skills/research-grants/references/specific_aims_guide.md +0 -458
- package/skills/research-grants/references/writing_principles.md +0 -94
- package/skills/research-lookup/scripts/manuscript_packet.py +0 -754
- package/skills/research-lookup/scripts/research_lookup.py +0 -1204
- package/skills/rowan/references/access_and_pricing.md +0 -37
- package/skills/rowan/references/batch_and_webhooks.md +0 -255
- package/skills/rowan/references/end_to_end_example.md +0 -119
- package/skills/rowan/references/troubleshooting.md +0 -106
- package/skills/rowan/references/workflow_catalog.md +0 -308
- package/skills/scanpy/assets/analysis_template.py +0 -301
- package/skills/scanpy/assets/celltype_mapping.json +0 -10
- package/skills/scanpy/assets/gene_signatures.json +0 -9
- package/skills/scanpy/assets/pipeline_config.json +0 -19
- package/skills/scanpy/references/analysis_workflow.md +0 -236
- package/skills/scanpy/references/api_reference.md +0 -267
- package/skills/scanpy/references/plotting_guide.md +0 -365
- package/skills/scanpy/references/r_interop.md +0 -292
- package/skills/scanpy/references/standard_workflow.md +0 -223
- package/skills/scanpy/scripts/_common.py +0 -127
- package/skills/scanpy/scripts/annotate.py +0 -84
- package/skills/scanpy/scripts/batch_correct.py +0 -65
- package/skills/scanpy/scripts/cluster.py +0 -63
- package/skills/scanpy/scripts/convert.py +0 -43
- package/skills/scanpy/scripts/find_markers.py +0 -75
- package/skills/scanpy/scripts/inspect_data.py +0 -81
- package/skills/scanpy/scripts/plot.py +0 -78
- package/skills/scanpy/scripts/preprocess.py +0 -88
- package/skills/scanpy/scripts/pseudobulk.py +0 -74
- package/skills/scanpy/scripts/qc_analysis.py +0 -104
- package/skills/scanpy/scripts/reduce_dimensions.py +0 -64
- package/skills/scanpy/scripts/run_pipeline.py +0 -182
- package/skills/scanpy/scripts/score_genes.py +0 -82
- package/skills/scanpy/scripts/subset.py +0 -64
- package/skills/scholar-evaluation/assets/evaluation_template.json +0 -50
- package/skills/scholar-evaluation/assets/evidence_manifest_template.json +0 -63
- package/skills/scholar-evaluation/assets/process_checklist_template.json +0 -70
- package/skills/scholar-evaluation/assets/ratings_template.csv +0 -21
- package/skills/scholar-evaluation/assets/rubric_template.json +0 -301
- package/skills/scholar-evaluation/references/evaluation_framework.md +0 -264
- package/skills/scholar-evaluation/references/local_tooling.md +0 -232
- package/skills/scholar-evaluation/references/responsible_assessment.md +0 -196
- package/skills/scholar-evaluation/references/security_validation.md +0 -95
- package/skills/scholar-evaluation/references/source_ledger.md +0 -222
- package/skills/scholar-evaluation/scripts/_common.py +0 -986
- package/skills/scholar-evaluation/scripts/calculate_scores.py +0 -57
- package/skills/scholar-evaluation/scripts/check_process.py +0 -231
- package/skills/scholar-evaluation/scripts/check_traceability.py +0 -233
- package/skills/scholar-evaluation/scripts/generate_report_scaffold.py +0 -231
- package/skills/scholar-evaluation/scripts/summarize_agreement.py +0 -235
- package/skills/scholar-evaluation/scripts/validate_rubric.py +0 -54
- package/skills/scholar-evaluation/scripts/weight_sensitivity.py +0 -251
- package/skills/scientific-brainstorming/references/brainstorming_methods.md +0 -292
- package/skills/scientific-brainstorming/references/facilitation_workflows.md +0 -284
- package/skills/scientific-brainstorming/references/idea_evaluation.md +0 -268
- package/skills/scientific-brainstorming/references/responsible_ai.md +0 -220
- package/skills/scientific-brainstorming/references/sources.md +0 -364
- package/skills/scientific-brainstorming/scripts/_common.py +0 -307
- package/skills/scientific-brainstorming/scripts/evaluate_matrix.py +0 -518
- package/skills/scientific-brainstorming/scripts/session_scaffold.py +0 -248
- package/skills/scientific-brainstorming/scripts/validate_register.py +0 -654
- package/skills/scientific-critical-thinking/references/common_biases.md +0 -364
- package/skills/scientific-critical-thinking/references/core_capabilities.md +0 -407
- package/skills/scientific-critical-thinking/references/evidence_hierarchy.md +0 -485
- package/skills/scientific-critical-thinking/references/experimental_design.md +0 -496
- package/skills/scientific-critical-thinking/references/logical_fallacies.md +0 -478
- package/skills/scientific-critical-thinking/references/scientific_method.md +0 -169
- package/skills/scientific-critical-thinking/references/statistical_pitfalls.md +0 -506
- package/skills/scientific-schematics/references/best_practices.md +0 -574
- package/skills/scientific-schematics/references/iterative_refinement.md +0 -315
- package/skills/scientific-schematics/scripts/example_usage.sh +0 -92
- package/skills/scientific-schematics/scripts/generate_schematic.py +0 -198
- package/skills/scientific-schematics/scripts/generate_schematic_ai.py +0 -950
- package/skills/scientific-slides/assets/beamer_template_conference.tex +0 -407
- package/skills/scientific-slides/assets/beamer_template_defense.tex +0 -906
- package/skills/scientific-slides/assets/beamer_template_seminar.tex +0 -870
- package/skills/scientific-slides/assets/powerpoint_design_guide.md +0 -662
- package/skills/scientific-slides/assets/timing_guidelines.md +0 -597
- package/skills/scientific-slides/references/beamer_guide.md +0 -1019
- package/skills/scientific-slides/references/common_pitfalls.md +0 -85
- package/skills/scientific-slides/references/data_visualization_slides.md +0 -708
- package/skills/scientific-slides/references/presentation_structure.md +0 -642
- package/skills/scientific-slides/references/presentation_workflow.md +0 -196
- package/skills/scientific-slides/references/prompt_writing.md +0 -42
- package/skills/scientific-slides/references/script_reference.md +0 -143
- package/skills/scientific-slides/references/slide_capabilities.md +0 -360
- package/skills/scientific-slides/references/slide_design_principles.md +0 -849
- package/skills/scientific-slides/references/talk_types_guide.md +0 -687
- package/skills/scientific-slides/references/visual_review_workflow.md +0 -775
- package/skills/scientific-slides/scripts/generate_schematic.py +0 -198
- package/skills/scientific-slides/scripts/generate_schematic_ai.py +0 -950
- package/skills/scientific-slides/scripts/generate_slide_image.py +0 -197
- package/skills/scientific-slides/scripts/generate_slide_image_ai.py +0 -877
- package/skills/scientific-slides/scripts/pdf_to_images.py +0 -221
- package/skills/scientific-slides/scripts/slides_to_pdf.py +0 -235
- package/skills/scientific-slides/scripts/validate_presentation.py +0 -408
- package/skills/scientific-visualization/assets/color_palettes.py +0 -263
- package/skills/scientific-visualization/assets/nature.mplstyle +0 -68
- package/skills/scientific-visualization/assets/presentation.mplstyle +0 -68
- package/skills/scientific-visualization/assets/publication.mplstyle +0 -77
- package/skills/scientific-visualization/assets/publisher_profiles.json +0 -269
- package/skills/scientific-visualization/references/color_palettes.md +0 -227
- package/skills/scientific-visualization/references/journal_requirements.md +0 -169
- package/skills/scientific-visualization/references/matplotlib_examples.md +0 -336
- package/skills/scientific-visualization/references/publication_guidelines.md +0 -196
- package/skills/scientific-visualization/references/sources.md +0 -76
- package/skills/scientific-visualization/scripts/_common.py +0 -136
- package/skills/scientific-visualization/scripts/export_plan.py +0 -493
- package/skills/scientific-visualization/scripts/figure_export.py +0 -642
- package/skills/scientific-visualization/scripts/image_metadata.py +0 -731
- package/skills/scientific-visualization/scripts/palette_audit.py +0 -327
- package/skills/scientific-visualization/scripts/style_presets.py +0 -501
- package/skills/scientific-visualization/scripts/style_preview.py +0 -232
- package/skills/scientific-writing/assets/REPORT_FORMATTING_GUIDE.md +0 -60
- package/skills/scientific-writing/assets/authorship_template.json +0 -56
- package/skills/scientific-writing/assets/claim_evidence_template.csv +0 -2
- package/skills/scientific-writing/assets/consistency_manifest_template.json +0 -43
- package/skills/scientific-writing/assets/manuscript_manifest_template.json +0 -37
- package/skills/scientific-writing/assets/manuscript_scaffold.md +0 -65
- package/skills/scientific-writing/assets/reporting_coverage_template.json +0 -6
- package/skills/scientific-writing/assets/reporting_guidelines.json +0 -529
- package/skills/scientific-writing/assets/source_manifest_template.json +0 -27
- package/skills/scientific-writing/references/authorship_ai_confidentiality.md +0 -111
- package/skills/scientific-writing/references/citation_styles.md +0 -92
- package/skills/scientific-writing/references/cli_reference.md +0 -113
- package/skills/scientific-writing/references/evidence_workflow.md +0 -94
- package/skills/scientific-writing/references/figures_tables.md +0 -94
- package/skills/scientific-writing/references/imrad_structure.md +0 -114
- package/skills/scientific-writing/references/journal_policies.md +0 -56
- package/skills/scientific-writing/references/professional_report_formatting.md +0 -82
- package/skills/scientific-writing/references/reporting_guidelines.md +0 -107
- package/skills/scientific-writing/references/research_integrity_open_science.md +0 -97
- package/skills/scientific-writing/references/source_ledger.md +0 -268
- package/skills/scientific-writing/references/writing_principles.md +0 -97
- package/skills/scientific-writing/scripts/_common.py +0 -240
- package/skills/scientific-writing/scripts/audit_claims.py +0 -241
- package/skills/scientific-writing/scripts/check_consistency.py +0 -408
- package/skills/scientific-writing/scripts/check_references.py +0 -219
- package/skills/scientific-writing/scripts/lint_manuscript.py +0 -171
- package/skills/scientific-writing/scripts/scaffold_manuscript.py +0 -143
- package/skills/scientific-writing/scripts/select_reporting_guidelines.py +0 -214
- package/skills/scientific-writing/scripts/validate_authorship.py +0 -322
- package/skills/scientific-writing/scripts/validate_manifest.py +0 -460
- package/skills/scikit-bio/references/api_reference.md +0 -766
- package/skills/scikit-learn/references/common_workflows.md +0 -107
- package/skills/scikit-learn/references/core_capabilities.md +0 -133
- package/skills/scikit-learn/references/model_evaluation.md +0 -592
- package/skills/scikit-learn/references/pipelines_and_composition.md +0 -612
- package/skills/scikit-learn/references/preprocessing.md +0 -606
- package/skills/scikit-learn/references/quick_reference.md +0 -436
- package/skills/scikit-learn/references/supervised_learning.md +0 -379
- package/skills/scikit-learn/references/unsupervised_learning.md +0 -517
- package/skills/scikit-learn/scripts/classification_pipeline.py +0 -257
- package/skills/scikit-learn/scripts/clustering_analysis.py +0 -386
- package/skills/scikit-survival/references/competing-risks.md +0 -302
- package/skills/scikit-survival/references/cox-models.md +0 -252
- package/skills/scikit-survival/references/data-handling.md +0 -278
- package/skills/scikit-survival/references/ensemble-models.md +0 -287
- package/skills/scikit-survival/references/evaluation-metrics.md +0 -391
- package/skills/scikit-survival/references/svm-models.md +0 -277
- package/skills/scikit-survival/scripts/_common.py +0 -456
- package/skills/scikit-survival/scripts/competing_risk_cif.py +0 -286
- package/skills/scikit-survival/scripts/evaluate_survival_metrics.py +0 -296
- package/skills/scikit-survival/scripts/model_report.py +0 -297
- package/skills/scikit-survival/scripts/train_survival_model.py +0 -583
- package/skills/scikit-survival/scripts/validate_survival_csv.py +0 -172
- package/skills/scvelo/references/velocity_models.md +0 -168
- package/skills/scvelo/scripts/rna_velocity_workflow.py +0 -240
- package/skills/scvi-tools/references/differential-expression.md +0 -597
- package/skills/scvi-tools/references/models-atac-seq.md +0 -329
- package/skills/scvi-tools/references/models-multimodal.md +0 -400
- package/skills/scvi-tools/references/models-scrna-seq.md +0 -333
- package/skills/scvi-tools/references/models-spatial.md +0 -432
- package/skills/scvi-tools/references/models-specialized.md +0 -376
- package/skills/scvi-tools/references/theoretical-foundations.md +0 -438
- package/skills/scvi-tools/references/workflows.md +0 -559
- package/skills/seaborn/references/examples.md +0 -824
- package/skills/seaborn/references/function_reference.md +0 -772
- package/skills/seaborn/references/grids_and_levels.md +0 -85
- package/skills/seaborn/references/objects_interface.md +0 -963
- package/skills/seaborn/references/palettes_and_theming.md +0 -110
- package/skills/seaborn/references/patterns_and_troubleshooting.md +0 -114
- package/skills/seaborn/references/plotting_functions.md +0 -178
- package/skills/shap/references/data-maskers.md +0 -287
- package/skills/shap/references/explainers.md +0 -376
- package/skills/shap/references/migration.md +0 -415
- package/skills/shap/references/modalities.md +0 -353
- package/skills/shap/references/plots.md +0 -406
- package/skills/shap/references/theory.md +0 -352
- package/skills/shap/references/troubleshooting.md +0 -442
- package/skills/shap/references/workflows.md +0 -565
- package/skills/shap/scripts/tabular_report.py +0 -326
- package/skills/simpy/references/cli-guide.md +0 -266
- package/skills/simpy/references/events.md +0 -225
- package/skills/simpy/references/monitoring.md +0 -260
- package/skills/simpy/references/process-interaction.md +0 -269
- package/skills/simpy/references/real-time.md +0 -174
- package/skills/simpy/references/resources.md +0 -274
- package/skills/simpy/references/simulation-methodology.md +0 -293
- package/skills/simpy/references/sources.md +0 -167
- package/skills/simpy/scripts/_common.py +0 -473
- package/skills/simpy/scripts/basic_simulation_template.py +0 -415
- package/skills/simpy/scripts/bounded_queue_scenario.py +0 -126
- package/skills/simpy/scripts/event_trace_summary.py +0 -296
- package/skills/simpy/scripts/replication_runner.py +0 -194
- package/skills/simpy/scripts/resource_monitor.py +0 -474
- package/skills/simpy/scripts/validate_simulation_config.py +0 -111
- package/skills/stable-baselines3/references/algorithms.md +0 -348
- package/skills/stable-baselines3/references/callbacks.md +0 -571
- package/skills/stable-baselines3/references/custom_environments.md +0 -528
- package/skills/stable-baselines3/references/vectorized_envs.md +0 -580
- package/skills/stable-baselines3/scripts/custom_env_template.py +0 -314
- package/skills/stable-baselines3/scripts/evaluate_agent.py +0 -245
- package/skills/stable-baselines3/scripts/train_rl_agent.py +0 -165
- package/skills/statistical-analysis/references/assumptions_and_diagnostics.md +0 -379
- package/skills/statistical-analysis/references/bayesian_statistics.md +0 -686
- package/skills/statistical-analysis/references/effect_sizes_and_power.md +0 -649
- package/skills/statistical-analysis/references/reporting_standards.md +0 -482
- package/skills/statistical-analysis/references/test_selection_guide.md +0 -129
- package/skills/statistical-analysis/scripts/assumption_checks.py +0 -652
- package/skills/statistical-power/references/closed_form_recipes.md +0 -174
- package/skills/statistical-power/references/effect_sizes.md +0 -121
- package/skills/statistical-power/references/simulation_based_power.md +0 -101
- package/skills/statistical-power/scripts/power.py +0 -320
- package/skills/statistical-power/scripts/simulate_power.py +0 -217
- package/skills/statsmodels/references/discrete_choice.md +0 -669
- package/skills/statsmodels/references/glm.md +0 -619
- package/skills/statsmodels/references/linear_models.md +0 -447
- package/skills/statsmodels/references/model_selection.md +0 -99
- package/skills/statsmodels/references/modeling_capabilities.md +0 -168
- package/skills/statsmodels/references/quick_start_guide.md +0 -154
- package/skills/statsmodels/references/stats_diagnostics.md +0 -859
- package/skills/statsmodels/references/time_series.md +0 -723
- package/skills/sympy/references/advanced-topics.md +0 -635
- package/skills/sympy/references/code-generation-printing.md +0 -628
- package/skills/sympy/references/core-capabilities.md +0 -348
- package/skills/sympy/references/core_capabilities.md +0 -190
- package/skills/sympy/references/matrices-linear-algebra.md +0 -526
- package/skills/sympy/references/physics-mechanics.md +0 -592
- package/skills/tamarind/references/api_reference.md +0 -165
- package/skills/tamarind/references/examples.md +0 -132
- package/skills/tamarind/references/tool_catalog.md +0 -66
- package/skills/tamarind/references/workflows.md +0 -263
- package/skills/timesfm-forecasting/examples/anomaly-detection/detect_anomalies.py +0 -524
- package/skills/timesfm-forecasting/examples/anomaly-detection/output/anomaly_detection.json +0 -448
- package/skills/timesfm-forecasting/examples/anomaly-detection/output/anomaly_detection.png +0 -0
- package/skills/timesfm-forecasting/examples/covariates-forecasting/demo_covariates.py +0 -568
- package/skills/timesfm-forecasting/examples/covariates-forecasting/output/covariates_data.png +0 -0
- package/skills/timesfm-forecasting/examples/covariates-forecasting/output/covariates_metadata.json +0 -59
- package/skills/timesfm-forecasting/examples/covariates-forecasting/output/sales_with_covariates.csv +0 -109
- package/skills/timesfm-forecasting/examples/global-temperature/generate_animation_data.py +0 -147
- package/skills/timesfm-forecasting/examples/global-temperature/generate_gif.py +0 -248
- package/skills/timesfm-forecasting/examples/global-temperature/generate_html.py +0 -544
- package/skills/timesfm-forecasting/examples/global-temperature/output/animation_data.json +0 -5441
- package/skills/timesfm-forecasting/examples/global-temperature/output/forecast_animation.gif +0 -0
- package/skills/timesfm-forecasting/examples/global-temperature/output/forecast_output.csv +0 -13
- package/skills/timesfm-forecasting/examples/global-temperature/output/forecast_output.json +0 -188
- package/skills/timesfm-forecasting/examples/global-temperature/output/forecast_visualization.png +0 -0
- package/skills/timesfm-forecasting/examples/global-temperature/output/interactive_forecast.html +0 -5939
- package/skills/timesfm-forecasting/examples/global-temperature/run_example.sh +0 -53
- package/skills/timesfm-forecasting/examples/global-temperature/run_forecast.py +0 -167
- package/skills/timesfm-forecasting/examples/global-temperature/temperature_anomaly.csv +0 -37
- package/skills/timesfm-forecasting/examples/global-temperature/visualize_forecast.py +0 -123
- package/skills/timesfm-forecasting/references/api_reference.md +0 -231
- package/skills/timesfm-forecasting/references/data_preparation.md +0 -272
- package/skills/timesfm-forecasting/references/examples_and_validation.md +0 -103
- package/skills/timesfm-forecasting/references/output_and_config.md +0 -93
- package/skills/timesfm-forecasting/references/performance_tuning.md +0 -80
- package/skills/timesfm-forecasting/references/system_requirements.md +0 -201
- package/skills/timesfm-forecasting/references/workflows.md +0 -126
- package/skills/timesfm-forecasting/scripts/check_system.py +0 -521
- package/skills/timesfm-forecasting/scripts/forecast_csv.py +0 -269
- package/skills/torch-geometric/references/custom_datasets.md +0 -239
- package/skills/torch-geometric/references/explainability.md +0 -208
- package/skills/torch-geometric/references/heterogeneous.md +0 -241
- package/skills/torch-geometric/references/link_prediction.md +0 -226
- package/skills/torch-geometric/references/message_passing.md +0 -121
- package/skills/torch-geometric/references/scaling.md +0 -269
- package/skills/torchdrug/references/core_concepts.md +0 -241
- package/skills/torchdrug/references/datasets.md +0 -179
- package/skills/torchdrug/references/knowledge_graphs.md +0 -226
- package/skills/torchdrug/references/models_architectures.md +0 -223
- package/skills/torchdrug/references/molecular_generation.md +0 -246
- package/skills/torchdrug/references/molecular_property_prediction.md +0 -239
- package/skills/torchdrug/references/protein_modeling.md +0 -221
- package/skills/torchdrug/references/retrosynthesis.md +0 -247
- package/skills/transformers/references/generation.md +0 -473
- package/skills/transformers/references/models.md +0 -371
- package/skills/transformers/references/pipelines.md +0 -334
- package/skills/transformers/references/tokenizers.md +0 -449
- package/skills/transformers/references/training.md +0 -504
- package/skills/treatment-plans/assets/clinician_authored_intervention_template.json +0 -11
- package/skills/treatment-plans/assets/goals_monitoring_checkpoint_template.json +0 -13
- package/skills/treatment-plans/assets/informed_preference_shared_decision_template.json +0 -11
- package/skills/treatment-plans/assets/intended_use_handoff_template.json +0 -83
- package/skills/treatment-plans/assets/source_fact_manifest_template.json +0 -11
- package/skills/treatment-plans/assets/transition_reconciliation_template.json +0 -27
- package/skills/treatment-plans/references/documentation_workflow.md +0 -165
- package/skills/treatment-plans/references/privacy_governance.md +0 -119
- package/skills/treatment-plans/references/safety_scope.md +0 -101
- package/skills/treatment-plans/references/security_validation.md +0 -68
- package/skills/treatment-plans/references/shared_decision_handoff.md +0 -138
- package/skills/treatment-plans/references/source_boundaries.md +0 -127
- package/skills/treatment-plans/references/source_ledger.md +0 -131
- package/skills/treatment-plans/scripts/_common.py +0 -1160
- package/skills/treatment-plans/scripts/check_completeness.py +0 -572
- package/skills/treatment-plans/scripts/check_consistency.py +0 -386
- package/skills/treatment-plans/scripts/generate_template.py +0 -133
- package/skills/treatment-plans/scripts/privacy_process_check.py +0 -213
- package/skills/treatment-plans/scripts/timeline_generator.py +0 -260
- package/skills/treatment-plans/scripts/validate_traceability.py +0 -147
- package/skills/treatment-plans/scripts/validate_treatment_plan.py +0 -95
- package/skills/umap-learn/references/api_reference.md +0 -574
- package/skills/uncertainty-and-units/references/domain-conversions.md +0 -188
- package/skills/uncertainty-and-units/references/gum-methodology.md +0 -219
- package/skills/uncertainty-and-units/references/pint-recipes.md +0 -228
- package/skills/uncertainty-and-units/references/plausibility-scales.md +0 -168
- package/skills/uncertainty-and-units/references/reporting-rules.md +0 -133
- package/skills/uncertainty-and-units/references/uncertainties-recipes.md +0 -167
- package/skills/uncertainty-and-units/scripts/_common.py +0 -666
- package/skills/uncertainty-and-units/scripts/audit_units.py +0 -575
- package/skills/uncertainty-and-units/scripts/check_plausibility.py +0 -894
- package/skills/uncertainty-and-units/scripts/convert_units.py +0 -280
- package/skills/uncertainty-and-units/scripts/format_result.py +0 -326
- package/skills/uncertainty-and-units/scripts/propagate_uncertainty.py +0 -662
- package/skills/uncertainty-and-units/scripts/uncertainty_budget.py +0 -363
- package/skills/usfiscaldata/references/api-basics.md +0 -105
- package/skills/usfiscaldata/references/datasets-debt.md +0 -166
- package/skills/usfiscaldata/references/datasets-fiscal.md +0 -212
- package/skills/usfiscaldata/references/datasets-interest-rates.md +0 -188
- package/skills/usfiscaldata/references/datasets-securities.md +0 -238
- package/skills/usfiscaldata/references/examples.md +0 -258
- package/skills/usfiscaldata/references/parameters.md +0 -182
- package/skills/usfiscaldata/references/response-format.md +0 -178
- package/skills/vaex/references/core_dataframes.md +0 -373
- package/skills/vaex/references/data_processing.md +0 -555
- package/skills/vaex/references/io_operations.md +0 -718
- package/skills/vaex/references/machine_learning.md +0 -728
- package/skills/vaex/references/performance.md +0 -571
- package/skills/vaex/references/visualization.md +0 -644
- package/skills/venue-templates/assets/examples/cell_summary_example.md +0 -247
- package/skills/venue-templates/assets/examples/medical_structured_abstract.md +0 -313
- package/skills/venue-templates/assets/examples/nature_abstract_examples.md +0 -213
- package/skills/venue-templates/assets/examples/neurips_introduction_example.md +0 -245
- package/skills/venue-templates/assets/grants/nih_specific_aims.tex +0 -237
- package/skills/venue-templates/assets/grants/nsf_proposal_template.tex +0 -384
- package/skills/venue-templates/assets/journals/elsarticle-harv.bst +0 -1598
- package/skills/venue-templates/assets/journals/elsarticle-num-names.bst +0 -1535
- package/skills/venue-templates/assets/journals/elsarticle-num.bst +0 -1509
- package/skills/venue-templates/assets/journals/elsarticle-template-harv.tex +0 -286
- package/skills/venue-templates/assets/journals/elsarticle-template-num-names.tex +0 -284
- package/skills/venue-templates/assets/journals/elsarticle-template-num.tex +0 -286
- package/skills/venue-templates/assets/journals/nature_article.tex +0 -174
- package/skills/venue-templates/assets/journals/neurips_article.tex +0 -292
- package/skills/venue-templates/assets/journals/plos_one.tex +0 -320
- package/skills/venue-templates/assets/posters/beamerposter_academic.tex +0 -312
- package/skills/venue-templates/references/cell_press_style.md +0 -486
- package/skills/venue-templates/references/conferences_formatting.md +0 -175
- package/skills/venue-templates/references/cs_conference_style.md +0 -465
- package/skills/venue-templates/references/grants_requirements.md +0 -267
- package/skills/venue-templates/references/journals_formatting.md +0 -200
- package/skills/venue-templates/references/medical_journal_styles.md +0 -536
- package/skills/venue-templates/references/ml_conference_style.md +0 -562
- package/skills/venue-templates/references/nature_science_style.md +0 -407
- package/skills/venue-templates/references/posters_guidelines.md +0 -630
- package/skills/venue-templates/references/reviewer_expectations.md +0 -422
- package/skills/venue-templates/references/venue_writing_styles.md +0 -323
- package/skills/venue-templates/scripts/customize_template.py +0 -206
- package/skills/venue-templates/scripts/query_template.py +0 -202
- package/skills/venue-templates/scripts/validate_format.py +0 -321
- package/skills/waypoint-bio/references/cli-reference.md +0 -210
- package/skills/waypoint-bio/references/compass-benchmark.md +0 -124
- package/skills/waypoint-bio/references/data-preparation.md +0 -200
- package/skills/waypoint-bio/references/python-api.md +0 -219
- package/skills/waypoint-bio/scripts/profiler_to_waypoint.py +0 -481
- package/skills/waypoint-bio/scripts/vocab_coverage.py +0 -235
- package/skills/what-if-oracle/references/scenario-templates.md +0 -137
- package/skills/xlsx/LICENSE.txt +0 -30
- package/skills/xlsx/scripts/office/helpers/__init__.py +0 -111
- package/skills/xlsx/scripts/office/helpers/pptx_chart.py +0 -170
- package/skills/xlsx/scripts/office/helpers/pptx_slide.py +0 -60
- package/skills/xlsx/scripts/office/helpers/pptx_theme.py +0 -114
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -1499
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -146
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -1085
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -11
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -3081
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -23
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -185
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -287
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -1676
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -28
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -144
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -174
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -25
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -18
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -59
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -56
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -195
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -582
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -25
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -4439
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -570
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -509
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -12
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -108
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -96
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -3646
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -116
- package/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -42
- package/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -50
- package/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -49
- package/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -33
- package/skills/xlsx/scripts/office/schemas/mce/mc.xsd +0 -75
- package/skills/xlsx/scripts/office/schemas/microsoft/wml-2010.xsd +0 -560
- package/skills/xlsx/scripts/office/schemas/microsoft/wml-2012.xsd +0 -67
- package/skills/xlsx/scripts/office/schemas/microsoft/wml-2018.xsd +0 -14
- package/skills/xlsx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +0 -20
- package/skills/xlsx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +0 -13
- package/skills/xlsx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -4
- package/skills/xlsx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +0 -8
- package/skills/xlsx/scripts/office/soffice.py +0 -232
- package/skills/xlsx/scripts/office/validate.py +0 -173
- package/skills/xlsx/scripts/office/validators/__init__.py +0 -15
- package/skills/xlsx/scripts/office/validators/base.py +0 -875
- package/skills/xlsx/scripts/office/validators/docx.py +0 -466
- package/skills/xlsx/scripts/office/validators/pptx.py +0 -441
- package/skills/xlsx/scripts/office/validators/redlining.py +0 -299
- package/skills/xlsx/scripts/recalc.py +0 -308
- package/skills/zarr-python/references/api_reference.md +0 -162
- package/skills/zarr-python/references/chunking_and_compression.md +0 -138
- package/skills/zarr-python/references/integration.md +0 -147
- package/skills/zarr-python/references/performance_and_patterns.md +0 -198
- package/skills/zarr-python/references/storage_backends.md +0 -91
- package/skills/zarr-python/references/v3_migration.md +0 -127
package/dist/cli.js
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
// @bun
|
|
3
3
|
|
|
4
4
|
// src/cli/index.ts
|
|
5
|
-
import { resolve as
|
|
6
|
-
import { existsSync as
|
|
5
|
+
import { resolve as resolve22 } from "path";
|
|
6
|
+
import { existsSync as existsSync20 } from "fs";
|
|
7
7
|
import { createInterface } from "readline";
|
|
8
8
|
|
|
9
9
|
// src/auth/store.ts
|
|
@@ -21,11 +21,32 @@ class CredentialsStore {
|
|
|
21
21
|
return null;
|
|
22
22
|
try {
|
|
23
23
|
const raw = readFileSync(this.filePath, "utf8");
|
|
24
|
-
|
|
24
|
+
const creds = JSON.parse(raw);
|
|
25
|
+
if (creds && creds.idToken && (!creds.user || !creds.user.username)) {
|
|
26
|
+
try {
|
|
27
|
+
const parts = creds.idToken.split(".");
|
|
28
|
+
if (parts[1]) {
|
|
29
|
+
const payload = JSON.parse(Buffer.from(parts[1], "base64").toString("utf8"));
|
|
30
|
+
creds.user = {
|
|
31
|
+
...creds.user,
|
|
32
|
+
id: creds.user?.id || payload.sub,
|
|
33
|
+
email: creds.user?.email || payload.email || payload["https://api.openai.com/profile"]?.email,
|
|
34
|
+
username: creds.user?.username || payload.preferred_username || payload.username || payload.name || (payload.email ? payload.email.split("@")[0] : undefined),
|
|
35
|
+
role: creds.user?.role || payload.role,
|
|
36
|
+
plan: creds.user?.plan || payload["https://api.openai.com/auth"]?.chatgpt_plan_type || payload.plan || payload.tier
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
} catch {}
|
|
40
|
+
}
|
|
41
|
+
return creds;
|
|
25
42
|
} catch {
|
|
26
43
|
return null;
|
|
27
44
|
}
|
|
28
45
|
}
|
|
46
|
+
getUser() {
|
|
47
|
+
const creds = this.load();
|
|
48
|
+
return creds?.user;
|
|
49
|
+
}
|
|
29
50
|
save(credentials) {
|
|
30
51
|
const dir = resolve(this.filePath, "..");
|
|
31
52
|
if (!existsSync(dir)) {
|
|
@@ -52,6 +73,16 @@ class CredentialsStore {
|
|
|
52
73
|
const creds = this.load();
|
|
53
74
|
return creds?.baseUrl;
|
|
54
75
|
}
|
|
76
|
+
getDefaultModel() {
|
|
77
|
+
const creds = this.load();
|
|
78
|
+
return creds?.defaultModel || creds?.model;
|
|
79
|
+
}
|
|
80
|
+
setDefaultModel(model) {
|
|
81
|
+
const existing = this.load() || { accessToken: "" };
|
|
82
|
+
existing.defaultModel = model;
|
|
83
|
+
existing.model = model;
|
|
84
|
+
this.save(existing);
|
|
85
|
+
}
|
|
55
86
|
}
|
|
56
87
|
|
|
57
88
|
// src/client/model-client.ts
|
|
@@ -114,7 +145,7 @@ class DefaultModelClientSession {
|
|
|
114
145
|
if (toolCalls.length > 0) {
|
|
115
146
|
messages.push({
|
|
116
147
|
role: "assistant",
|
|
117
|
-
content: null,
|
|
148
|
+
content: cleanedContent || null,
|
|
118
149
|
tool_calls: toolCalls
|
|
119
150
|
});
|
|
120
151
|
i = j - 1;
|
|
@@ -270,6 +301,8 @@ class DefaultModelClientSession {
|
|
|
270
301
|
const dataStr = trimmed.slice(6);
|
|
271
302
|
if (dataStr === "[DONE]") {
|
|
272
303
|
for (const tc of pendingToolCalls.values()) {
|
|
304
|
+
if (!tc.name || !tc.name.trim())
|
|
305
|
+
continue;
|
|
273
306
|
let parsedArgs = {};
|
|
274
307
|
try {
|
|
275
308
|
parsedArgs = JSON.parse(tc.arguments);
|
|
@@ -384,6 +417,8 @@ class DefaultModelClientSession {
|
|
|
384
417
|
}
|
|
385
418
|
}
|
|
386
419
|
for (const tc of pendingToolCalls.values()) {
|
|
420
|
+
if (!tc.name || !tc.name.trim())
|
|
421
|
+
continue;
|
|
387
422
|
let parsedArgs = {};
|
|
388
423
|
try {
|
|
389
424
|
parsedArgs = JSON.parse(tc.arguments);
|
|
@@ -912,6 +947,8 @@ async function runTurn(session, turnContext, input) {
|
|
|
912
947
|
}
|
|
913
948
|
if (toolCallRequests.length > 0) {
|
|
914
949
|
for (const toolCall of toolCallRequests) {
|
|
950
|
+
if (!toolCall.name || !toolCall.name.trim())
|
|
951
|
+
continue;
|
|
915
952
|
const functionCallItem = {
|
|
916
953
|
id: `call_${Date.now()}_${Math.random().toString(36).slice(2, 6)}`,
|
|
917
954
|
type: "function_call",
|
|
@@ -4629,6 +4666,13 @@ class SessionPersistenceManager {
|
|
|
4629
4666
|
this.bindSession(session, restored.thread.role);
|
|
4630
4667
|
return session;
|
|
4631
4668
|
}
|
|
4669
|
+
loadSession(threadId) {
|
|
4670
|
+
try {
|
|
4671
|
+
return this.store.restoreSession(threadId);
|
|
4672
|
+
} catch {
|
|
4673
|
+
return null;
|
|
4674
|
+
}
|
|
4675
|
+
}
|
|
4632
4676
|
listSessions(options) {
|
|
4633
4677
|
return this.store.listThreads(options);
|
|
4634
4678
|
}
|
|
@@ -4657,6 +4701,7 @@ class SkillsLoader {
|
|
|
4657
4701
|
includeGlobal;
|
|
4658
4702
|
includeBuiltIn;
|
|
4659
4703
|
disabledSkills;
|
|
4704
|
+
skillsCache = new Map;
|
|
4660
4705
|
constructor(optionsOrRoots = {}) {
|
|
4661
4706
|
if (Array.isArray(optionsOrRoots)) {
|
|
4662
4707
|
this.customRoots = optionsOrRoots;
|
|
@@ -4673,17 +4718,24 @@ class SkillsLoader {
|
|
|
4673
4718
|
]);
|
|
4674
4719
|
}
|
|
4675
4720
|
}
|
|
4721
|
+
clearCache() {
|
|
4722
|
+
this.skillsCache.clear();
|
|
4723
|
+
}
|
|
4676
4724
|
disableSkill(name) {
|
|
4677
4725
|
const key = name.trim().toLowerCase();
|
|
4678
4726
|
this.disabledSkills.add(key);
|
|
4727
|
+
this.clearCache();
|
|
4679
4728
|
return true;
|
|
4680
4729
|
}
|
|
4681
4730
|
enableSkill(name) {
|
|
4682
4731
|
const key = name.trim().toLowerCase();
|
|
4683
|
-
|
|
4732
|
+
const res = this.disabledSkills.delete(key);
|
|
4733
|
+
this.clearCache();
|
|
4734
|
+
return res;
|
|
4684
4735
|
}
|
|
4685
4736
|
toggleSkill(name) {
|
|
4686
4737
|
const key = name.trim().toLowerCase();
|
|
4738
|
+
this.clearCache();
|
|
4687
4739
|
if (this.disabledSkills.has(key)) {
|
|
4688
4740
|
this.disabledSkills.delete(key);
|
|
4689
4741
|
return true;
|
|
@@ -4700,6 +4752,7 @@ class SkillsLoader {
|
|
|
4700
4752
|
}
|
|
4701
4753
|
setBuiltInEnabled(enabled) {
|
|
4702
4754
|
this.includeBuiltIn = enabled;
|
|
4755
|
+
this.clearCache();
|
|
4703
4756
|
}
|
|
4704
4757
|
getDiscoveryRoots(cwd) {
|
|
4705
4758
|
const roots = [resolve13(cwd, ".agents", "skills")];
|
|
@@ -4725,6 +4778,12 @@ class SkillsLoader {
|
|
|
4725
4778
|
return this.listSkills(cwd, options);
|
|
4726
4779
|
}
|
|
4727
4780
|
listSkills(cwd, options) {
|
|
4781
|
+
const cacheKey = `${cwd}:${options?.includeDisabled ?? false}`;
|
|
4782
|
+
const cached = this.skillsCache.get(cacheKey);
|
|
4783
|
+
const now = Date.now();
|
|
4784
|
+
if (cached && now - cached.timestamp < 30000) {
|
|
4785
|
+
return cached.skills;
|
|
4786
|
+
}
|
|
4728
4787
|
const roots = this.getDiscoveryRoots(cwd);
|
|
4729
4788
|
const discovered = new Map;
|
|
4730
4789
|
for (const root of roots) {
|
|
@@ -4747,7 +4806,9 @@ class SkillsLoader {
|
|
|
4747
4806
|
}
|
|
4748
4807
|
} catch {}
|
|
4749
4808
|
}
|
|
4750
|
-
|
|
4809
|
+
const result = Array.from(discovered.values());
|
|
4810
|
+
this.skillsCache.set(cacheKey, { timestamp: now, skills: result });
|
|
4811
|
+
return result;
|
|
4751
4812
|
}
|
|
4752
4813
|
loadSkill(cwd, skillName) {
|
|
4753
4814
|
if (this.isSkillDisabled(skillName)) {
|
|
@@ -4771,20 +4832,32 @@ class SkillsLoader {
|
|
|
4771
4832
|
return null;
|
|
4772
4833
|
}
|
|
4773
4834
|
}
|
|
4774
|
-
parseSkillFrontmatter(filePath,
|
|
4835
|
+
parseSkillFrontmatter(filePath, dirName, root, cwd) {
|
|
4775
4836
|
try {
|
|
4776
4837
|
const raw = readFileSync9(filePath, "utf8");
|
|
4777
4838
|
const { attributes } = this.extractFrontmatterAndBody(raw);
|
|
4778
|
-
|
|
4779
|
-
const
|
|
4780
|
-
const
|
|
4839
|
+
let scope = "global";
|
|
4840
|
+
const normPath = filePath.toLowerCase().replace(/\\/g, "/");
|
|
4841
|
+
const normCwd = cwd.toLowerCase().replace(/\\/g, "/");
|
|
4842
|
+
const normRoot = root.toLowerCase().replace(/\\/g, "/");
|
|
4843
|
+
if (normRoot.includes(".agents") || normRoot === `${normCwd}/skills` || normPath.startsWith(normCwd) || this.customRoots.some((r) => normPath.startsWith(resolve13(r).toLowerCase().replace(/\\/g, "/")))) {
|
|
4844
|
+
scope = "workspace";
|
|
4845
|
+
} else if (normRoot.includes("groupy") && (normRoot.endsWith("skills") || normRoot.includes("plugins"))) {
|
|
4846
|
+
scope = "built-in";
|
|
4847
|
+
}
|
|
4848
|
+
const name = attributes["name"] || dirName;
|
|
4849
|
+
const description = attributes["description"] || "Autonomous agent skill";
|
|
4850
|
+
const shortDescription = attributes["short-description"] || attributes["summary"];
|
|
4781
4851
|
return {
|
|
4782
|
-
name
|
|
4783
|
-
description
|
|
4784
|
-
shortDescription
|
|
4852
|
+
name,
|
|
4853
|
+
description,
|
|
4854
|
+
shortDescription,
|
|
4785
4855
|
path: filePath,
|
|
4786
|
-
rootDir,
|
|
4787
|
-
|
|
4856
|
+
rootDir: root,
|
|
4857
|
+
dirPath: resolve13(filePath, ".."),
|
|
4858
|
+
scope,
|
|
4859
|
+
enabled: true,
|
|
4860
|
+
tags: attributes["tags"] ? attributes["tags"].split(",").map((t) => t.trim()) : undefined
|
|
4788
4861
|
};
|
|
4789
4862
|
} catch {
|
|
4790
4863
|
return null;
|
|
@@ -4793,17 +4866,20 @@ class SkillsLoader {
|
|
|
4793
4866
|
extractFrontmatterAndBody(raw) {
|
|
4794
4867
|
const attributes = {};
|
|
4795
4868
|
let body = raw;
|
|
4796
|
-
|
|
4797
|
-
|
|
4798
|
-
|
|
4799
|
-
|
|
4800
|
-
|
|
4801
|
-
`
|
|
4802
|
-
|
|
4803
|
-
|
|
4804
|
-
|
|
4805
|
-
|
|
4806
|
-
|
|
4869
|
+
if (raw.startsWith("---")) {
|
|
4870
|
+
const match = raw.match(/^---\r?\n([\s\S]*?)\r?\n---\r?\n([\s\S]*)$/);
|
|
4871
|
+
if (match) {
|
|
4872
|
+
const yamlContent = match[1] ?? "";
|
|
4873
|
+
body = match[2] ?? "";
|
|
4874
|
+
const lines = yamlContent.split(`
|
|
4875
|
+
`);
|
|
4876
|
+
for (const line of lines) {
|
|
4877
|
+
const trimmed = line.trim();
|
|
4878
|
+
if (!trimmed || trimmed.startsWith("#"))
|
|
4879
|
+
continue;
|
|
4880
|
+
const colonIdx = trimmed.indexOf(":");
|
|
4881
|
+
if (colonIdx === -1)
|
|
4882
|
+
continue;
|
|
4807
4883
|
const key = trimmed.slice(0, colonIdx).trim();
|
|
4808
4884
|
let val = trimmed.slice(colonIdx + 1).trim();
|
|
4809
4885
|
if (val.startsWith('"') && val.endsWith('"') || val.startsWith("'") && val.endsWith("'")) {
|
|
@@ -4819,22 +4895,23 @@ class SkillsLoader {
|
|
|
4819
4895
|
const skills = this.listSkills(cwd, { includeDisabled: false });
|
|
4820
4896
|
if (skills.length === 0)
|
|
4821
4897
|
return "";
|
|
4822
|
-
const
|
|
4898
|
+
const workspaceSkills = skills.filter((s) => s.scope === "workspace");
|
|
4899
|
+
const builtInSkills = skills.filter((s) => s.scope === "built-in");
|
|
4823
4900
|
const otherSkills = skills.filter((s) => s.scope !== "workspace" && s.scope !== "built-in");
|
|
4824
|
-
const selectedSkills = [...
|
|
4901
|
+
const selectedSkills = [...workspaceSkills, ...builtInSkills, ...otherSkills].slice(0, 150);
|
|
4825
4902
|
const lines = selectedSkills.map((s) => {
|
|
4826
4903
|
const desc = s.shortDescription || s.description;
|
|
4827
4904
|
return `- **${s.name}**: ${desc}`;
|
|
4828
4905
|
});
|
|
4829
4906
|
const suffix = skills.length > selectedSkills.length ? `
|
|
4830
|
-
... and ${skills.length - selectedSkills.length} additional skills available via load_skill
|
|
4907
|
+
... and ${skills.length - selectedSkills.length} additional domain skills available via \`load_skill\`.` : "";
|
|
4831
4908
|
return `
|
|
4832
4909
|
## Available Domain Skills
|
|
4833
4910
|
<available_skills>
|
|
4834
4911
|
${lines.join(`
|
|
4835
4912
|
`)}${suffix}
|
|
4836
4913
|
</available_skills>
|
|
4837
|
-
When tackling complex specialized tasks that match any of these skills
|
|
4914
|
+
When tackling complex specialized tasks that match any of these skills, autonomously use the \`load_skill\` tool to retrieve full instructions before implementing.`;
|
|
4838
4915
|
}
|
|
4839
4916
|
}
|
|
4840
4917
|
|
|
@@ -5582,18 +5659,24 @@ class LiveSpinner {
|
|
|
5582
5659
|
setShimmer(enabled) {
|
|
5583
5660
|
this.enableShimmer = enabled;
|
|
5584
5661
|
}
|
|
5585
|
-
start(message = "Thinking...") {
|
|
5662
|
+
start(message = "Thinking...", customStartTime) {
|
|
5586
5663
|
if (this.isSpinning) {
|
|
5664
|
+
if (customStartTime !== undefined) {
|
|
5665
|
+
this.startTime = customStartTime;
|
|
5666
|
+
}
|
|
5587
5667
|
this.update(message);
|
|
5588
5668
|
return;
|
|
5589
5669
|
}
|
|
5590
5670
|
this.isSpinning = true;
|
|
5591
5671
|
this.currentMessage = message;
|
|
5592
|
-
this.startTime = performance.now();
|
|
5672
|
+
this.startTime = customStartTime !== undefined ? customStartTime : performance.now();
|
|
5593
5673
|
this.frameIndex = 0;
|
|
5594
5674
|
this.render();
|
|
5595
5675
|
this.restartTimer();
|
|
5596
5676
|
}
|
|
5677
|
+
setStartTime(timeMs) {
|
|
5678
|
+
this.startTime = timeMs;
|
|
5679
|
+
}
|
|
5597
5680
|
restartTimer() {
|
|
5598
5681
|
if (this.timer) {
|
|
5599
5682
|
clearInterval(this.timer);
|
|
@@ -5759,7 +5842,7 @@ function renderDiff(lines, opts = {}) {
|
|
|
5759
5842
|
if (opts.filePath) {
|
|
5760
5843
|
const headerText = ` ${opts.filePath}`;
|
|
5761
5844
|
const padded = headerText.padEnd(termWidth);
|
|
5762
|
-
out.push(`${ESC2}48;2;
|
|
5845
|
+
out.push(`${ESC2}48;2;36;36;42m${ESC2}38;2;230;230;235m${ESC2}1m${padded}${R}`);
|
|
5763
5846
|
}
|
|
5764
5847
|
let i = 0;
|
|
5765
5848
|
while (i < lines.length) {
|
|
@@ -5880,7 +5963,6 @@ function getPackageMetadata() {
|
|
|
5880
5963
|
const currentDir = typeof __dirname !== "undefined" ? __dirname : dirname8(fileURLToPath(import.meta.url));
|
|
5881
5964
|
searchDirs.push(currentDir);
|
|
5882
5965
|
} catch {}
|
|
5883
|
-
searchDirs.push(process.cwd());
|
|
5884
5966
|
for (const startDir of searchDirs) {
|
|
5885
5967
|
let current = resolve17(startDir);
|
|
5886
5968
|
for (let depth = 0;depth < 5; depth++) {
|
|
@@ -5888,7 +5970,7 @@ function getPackageMetadata() {
|
|
|
5888
5970
|
if (existsSync17(candidate)) {
|
|
5889
5971
|
try {
|
|
5890
5972
|
const content = JSON.parse(readFileSync12(candidate, "utf8"));
|
|
5891
|
-
if (content && typeof content.version === "string") {
|
|
5973
|
+
if (content && typeof content.version === "string" && (content.name === "@pikaa-ai/pikaa" || content.name === "pikaa" || content.bin?.pikaa || content.bin?.groupy)) {
|
|
5892
5974
|
const cleanName = content.name?.startsWith("@") ? content.name.split("/")[1] || content.name : content.name || "pikaa";
|
|
5893
5975
|
cachedMetadata = {
|
|
5894
5976
|
name: cleanName,
|
|
@@ -5905,9 +5987,23 @@ function getPackageMetadata() {
|
|
|
5905
5987
|
current = parent;
|
|
5906
5988
|
}
|
|
5907
5989
|
}
|
|
5990
|
+
try {
|
|
5991
|
+
const cwdCandidate = join8(process.cwd(), "package.json");
|
|
5992
|
+
if (existsSync17(cwdCandidate)) {
|
|
5993
|
+
const content = JSON.parse(readFileSync12(cwdCandidate, "utf8"));
|
|
5994
|
+
if (content && typeof content.version === "string" && (content.name === "@pikaa-ai/pikaa" || content.name === "pikaa" || content.bin?.pikaa || content.bin?.groupy)) {
|
|
5995
|
+
cachedMetadata = {
|
|
5996
|
+
name: "pikaa",
|
|
5997
|
+
version: content.version,
|
|
5998
|
+
description: content.description
|
|
5999
|
+
};
|
|
6000
|
+
return cachedMetadata;
|
|
6001
|
+
}
|
|
6002
|
+
}
|
|
6003
|
+
} catch {}
|
|
5908
6004
|
cachedMetadata = {
|
|
5909
6005
|
name: "pikaa",
|
|
5910
|
-
version: "0.3.
|
|
6006
|
+
version: "0.3.2"
|
|
5911
6007
|
};
|
|
5912
6008
|
return cachedMetadata;
|
|
5913
6009
|
}
|
|
@@ -5918,55 +6014,145 @@ function getCliVersion(options = {}) {
|
|
|
5918
6014
|
}
|
|
5919
6015
|
|
|
5920
6016
|
// src/cli/ui/animation/banner-animation.ts
|
|
5921
|
-
|
|
5922
|
-
|
|
5923
|
-
|
|
5924
|
-
|
|
5925
|
-
|
|
5926
|
-
|
|
5927
|
-
|
|
5928
|
-
|
|
5929
|
-
|
|
5930
|
-
function
|
|
5931
|
-
const
|
|
5932
|
-
|
|
5933
|
-
|
|
5934
|
-
|
|
5935
|
-
|
|
5936
|
-
|
|
6017
|
+
import { homedir as homedir8 } from "os";
|
|
6018
|
+
import { execSync } from "child_process";
|
|
6019
|
+
var ROSE = "\x1B[38;2;205;105;74m";
|
|
6020
|
+
var ROSE_DIM = "\x1B[38;2;120;60;45m";
|
|
6021
|
+
var WHITE = "\x1B[38;2;255;255;255m";
|
|
6022
|
+
var GRAY = "\x1B[38;2;148;148;148m";
|
|
6023
|
+
var BOLD = "\x1B[1m";
|
|
6024
|
+
var ITALIC = "\x1B[3m";
|
|
6025
|
+
var RESET = "\x1B[0m";
|
|
6026
|
+
function shortenPath(cwd) {
|
|
6027
|
+
const home = homedir8();
|
|
6028
|
+
if (cwd.startsWith(home)) {
|
|
6029
|
+
return `~${cwd.slice(home.length).replace(/\\/g, "/")}`;
|
|
6030
|
+
}
|
|
6031
|
+
return cwd.replace(/\\/g, "/");
|
|
6032
|
+
}
|
|
6033
|
+
function stripAnsi(str) {
|
|
6034
|
+
return str.replace(/\x1b\[[0-9;]*m/g, "");
|
|
6035
|
+
}
|
|
6036
|
+
function center(str, width) {
|
|
6037
|
+
const vis = stripAnsi(str);
|
|
6038
|
+
if (vis.length >= width)
|
|
6039
|
+
return truncate(str, width);
|
|
6040
|
+
const padLeft = Math.floor((width - vis.length) / 2);
|
|
6041
|
+
const padRight = width - vis.length - padLeft;
|
|
6042
|
+
return " ".repeat(padLeft) + str + " ".repeat(padRight);
|
|
6043
|
+
}
|
|
6044
|
+
function padRight(str, width) {
|
|
6045
|
+
const vis = stripAnsi(str);
|
|
6046
|
+
if (vis.length > width)
|
|
6047
|
+
return truncate(str, width);
|
|
6048
|
+
return str + " ".repeat(Math.max(0, width - vis.length));
|
|
6049
|
+
}
|
|
6050
|
+
function truncate(str, maxLen) {
|
|
6051
|
+
const vis = stripAnsi(str);
|
|
6052
|
+
if (vis.length <= maxLen)
|
|
6053
|
+
return str;
|
|
6054
|
+
return vis.slice(0, Math.max(0, maxLen - 1)) + "\u2026";
|
|
6055
|
+
}
|
|
6056
|
+
function getGitBranch(cwd) {
|
|
6057
|
+
try {
|
|
6058
|
+
return execSync("git rev-parse --abbrev-ref HEAD", {
|
|
6059
|
+
cwd,
|
|
6060
|
+
encoding: "utf8",
|
|
6061
|
+
stdio: ["ignore", "pipe", "ignore"]
|
|
6062
|
+
}).trim();
|
|
6063
|
+
} catch {
|
|
6064
|
+
return null;
|
|
6065
|
+
}
|
|
5937
6066
|
}
|
|
5938
6067
|
|
|
5939
6068
|
class BannerAnimator {
|
|
5940
6069
|
static async play(info, options = {}) {
|
|
5941
|
-
const isTTY = Boolean(process.stdout.isTTY);
|
|
5942
|
-
const shouldAnimate = options.animate ?? (isTTY && true);
|
|
5943
|
-
if (!shouldAnimate) {
|
|
5944
|
-
this.renderStatic(info);
|
|
5945
|
-
return;
|
|
5946
|
-
}
|
|
5947
6070
|
this.renderStatic(info);
|
|
5948
6071
|
}
|
|
5949
|
-
static renderStatic(info,
|
|
6072
|
+
static renderStatic(info, _options) {
|
|
5950
6073
|
const version = info.version || getCliVersion({ prefix: true });
|
|
5951
|
-
const
|
|
5952
|
-
|
|
5953
|
-
|
|
5954
|
-
|
|
5955
|
-
|
|
5956
|
-
const
|
|
5957
|
-
const
|
|
5958
|
-
const
|
|
6074
|
+
const storedUser = new CredentialsStore().getUser();
|
|
6075
|
+
let rawUser = info.user || "";
|
|
6076
|
+
if (!rawUser || rawUser.toLowerCase() === "authenticated" || rawUser.toLowerCase() === "default") {
|
|
6077
|
+
rawUser = storedUser?.username || (storedUser?.email ? storedUser.email.split("@")[0] : undefined) || process.env.GROUPY_USER || process.env.USER || process.env.USERNAME || "Developer";
|
|
6078
|
+
}
|
|
6079
|
+
const user = rawUser.charAt(0).toUpperCase() + rawUser.slice(1);
|
|
6080
|
+
const shortCwd = shortenPath(info.cwd);
|
|
6081
|
+
const modelName = info.model.includes("/") ? info.model.split("/").pop() || info.model : info.model;
|
|
6082
|
+
const rawPlan = info.plan || storedUser?.plan || process.env.GROUPY_PLAN || process.env.GROUPY_TIER || process.env.PIKAA_PLAN || process.env.PIKAA_TIER || "Pro";
|
|
6083
|
+
const planFormatted = rawPlan.charAt(0).toUpperCase() + rawPlan.slice(1).toLowerCase();
|
|
6084
|
+
const modelLine = `${modelName} \xB7 Groupy ${planFormatted}`;
|
|
6085
|
+
const branchName = info.branch || getGitBranch(info.cwd) || "main";
|
|
6086
|
+
const branchLine = `\uE0A0 ${branchName}`;
|
|
6087
|
+
const cols = typeof process.stdout?.columns === "number" ? process.stdout.columns : 80;
|
|
6088
|
+
const totalInnerWidth = Math.min(80, Math.max(68, cols - 6));
|
|
6089
|
+
if (totalInnerWidth >= 70) {
|
|
6090
|
+
this.renderTwoColumn(totalInnerWidth, version, user, modelLine, branchLine, shortCwd);
|
|
6091
|
+
} else {
|
|
6092
|
+
this.renderSingleColumn(totalInnerWidth, version, user, modelLine, branchLine, shortCwd);
|
|
6093
|
+
}
|
|
6094
|
+
}
|
|
6095
|
+
static renderTwoColumn(totalInnerWidth, version, user, modelLine, branchLine, cwd) {
|
|
6096
|
+
const leftWidth = 30;
|
|
6097
|
+
const rightContentWidth = totalInnerWidth - leftWidth - 4;
|
|
6098
|
+
const sprite = [
|
|
6099
|
+
`${ROSE} \u2597\u2584\u2584\u2584\u2584\u2596 ${RESET}`,
|
|
6100
|
+
`${ROSE}\u2590\u2588 \u2584\u2584 \u2588\u258C\u2584\u2584\u2584\u2584\u2584\u2584\u2584${RESET}`,
|
|
6101
|
+
`${ROSE}\u2590\u2588 \u2580\u2580 \u2588\u258C \u2588 \u2588 \u2588${RESET}`,
|
|
6102
|
+
`${ROSE} \u259D\u2580\u2580\u2580\u2580\u2598 \u2580 \u2580 \u2580${RESET}`
|
|
6103
|
+
];
|
|
6104
|
+
const leftLines = [
|
|
6105
|
+
center(`${BOLD}${WHITE}Welcome back ${user}!${RESET}`, leftWidth),
|
|
6106
|
+
center(sprite[0], leftWidth),
|
|
6107
|
+
center(sprite[1], leftWidth),
|
|
6108
|
+
center(sprite[2], leftWidth),
|
|
6109
|
+
center(sprite[3], leftWidth),
|
|
6110
|
+
center(`${GRAY}${truncate(modelLine, leftWidth)}${RESET}`, leftWidth),
|
|
6111
|
+
center(`${GRAY}${truncate(branchLine, leftWidth)}${RESET}`, leftWidth),
|
|
6112
|
+
center(`${GRAY}${truncate(cwd, leftWidth)}${RESET}`, leftWidth)
|
|
6113
|
+
];
|
|
6114
|
+
const rightLines = [
|
|
6115
|
+
`${BOLD}${ROSE}Tips for getting started${RESET}`,
|
|
6116
|
+
`${WHITE}${truncate("Ask Groupy to create a new app or clone a repo", rightContentWidth)}${RESET}`,
|
|
6117
|
+
`${ROSE}${"\u2500".repeat(rightContentWidth)}${RESET}`,
|
|
6118
|
+
`${BOLD}${ROSE}What's new in ${version}${RESET}`,
|
|
6119
|
+
`${WHITE}${truncate("Persistent default AI model (/model)", rightContentWidth)}${RESET}`,
|
|
6120
|
+
`${WHITE}${truncate("Isolated Git worktree task runner (/worktrees)", rightContentWidth)}${RESET}`,
|
|
6121
|
+
`${ITALIC}${GRAY}Type /release-notes for full changelog${RESET}`,
|
|
6122
|
+
``
|
|
6123
|
+
];
|
|
6124
|
+
const maxRows = Math.max(leftLines.length, rightLines.length);
|
|
6125
|
+
const topDashes = Math.max(2, totalInnerWidth - (15 + version.length));
|
|
6126
|
+
console.log();
|
|
6127
|
+
console.log(` ${ROSE}\u250C\u2500 ${ROSE}${BOLD}Groupy Code${RESET} ${GRAY}${version}${RESET} ${ROSE}${"\u2500".repeat(topDashes)}\u2510${RESET}`);
|
|
6128
|
+
for (let i = 0;i < maxRows; i++) {
|
|
6129
|
+
const left = leftLines[i] || " ".repeat(leftWidth);
|
|
6130
|
+
const right = rightLines[i] || "";
|
|
6131
|
+
const rightFormatted = padRight(right, rightContentWidth);
|
|
6132
|
+
console.log(` ${ROSE}\u2502${RESET}${left} ${ROSE_DIM}\u2502${RESET} ${rightFormatted} ${ROSE}\u2502${RESET}`);
|
|
6133
|
+
}
|
|
6134
|
+
console.log(` ${ROSE}\u2514${"\u2500".repeat(totalInnerWidth)}\u2518${RESET}`);
|
|
6135
|
+
console.log();
|
|
6136
|
+
}
|
|
6137
|
+
static renderSingleColumn(totalInnerWidth, version, user, modelLine, branchLine, cwd) {
|
|
6138
|
+
const topDashes = Math.max(2, totalInnerWidth - (15 + version.length));
|
|
5959
6139
|
console.log();
|
|
5960
|
-
console.log(` ${
|
|
5961
|
-
|
|
5962
|
-
|
|
5963
|
-
|
|
5964
|
-
|
|
5965
|
-
|
|
5966
|
-
|
|
5967
|
-
|
|
5968
|
-
|
|
5969
|
-
|
|
6140
|
+
console.log(` ${ROSE}\u250C\u2500 ${ROSE}${BOLD}Groupy Code${RESET} ${GRAY}${version}${RESET} ${ROSE}${"\u2500".repeat(topDashes)}\u2510${RESET}`);
|
|
6141
|
+
const lines = [
|
|
6142
|
+
center(`${BOLD}${WHITE}Welcome back ${user}!${RESET}`, totalInnerWidth),
|
|
6143
|
+
center(`${ROSE} \u2597\u2584\u2584\u2584\u2584\u2596 ${RESET}`, totalInnerWidth),
|
|
6144
|
+
center(`${ROSE}\u2590\u2588 \u2584\u2584 \u2588\u258C\u2584\u2584\u2584\u2584\u2584\u2584\u2584${RESET}`, totalInnerWidth),
|
|
6145
|
+
center(`${ROSE}\u2590\u2588 \u2580\u2580 \u2588\u258C \u2588 \u2588 \u2588${RESET}`, totalInnerWidth),
|
|
6146
|
+
center(`${ROSE} \u259D\u2580\u2580\u2580\u2580\u2598 \u2580 \u2580 \u2580${RESET}`, totalInnerWidth),
|
|
6147
|
+
center(`${GRAY}${modelLine}${RESET}`, totalInnerWidth),
|
|
6148
|
+
center(`${GRAY}${branchLine} \xB7 ${cwd}${RESET}`, totalInnerWidth),
|
|
6149
|
+
`${ROSE}${"\u2500".repeat(totalInnerWidth)}${RESET}`,
|
|
6150
|
+
` ${BOLD}${ROSE}Tips:${RESET} ${WHITE}${truncate("Ask Groupy to create a new app or inspect code", totalInnerWidth - 8)}${RESET}`
|
|
6151
|
+
];
|
|
6152
|
+
for (const line of lines) {
|
|
6153
|
+
console.log(` ${ROSE}\u2502${RESET}${padRight(line, totalInnerWidth)}${ROSE}\u2502${RESET}`);
|
|
6154
|
+
}
|
|
6155
|
+
console.log(` ${ROSE}\u2514${"\u2500".repeat(totalInnerWidth)}\u2518${RESET}`);
|
|
5970
6156
|
console.log();
|
|
5971
6157
|
}
|
|
5972
6158
|
}
|
|
@@ -5981,20 +6167,11 @@ function formatTaskProgressPlan(plan2, explanation) {
|
|
|
5981
6167
|
function formatTurnSummary(metrics) {
|
|
5982
6168
|
CliFormatter.formatTurnSummary(metrics);
|
|
5983
6169
|
}
|
|
5984
|
-
function formatTaskStepStart(step, toolName, args) {
|
|
5985
|
-
const argsSummary = Object.entries(args).map(([k, v]) => {
|
|
5986
|
-
const valStr = typeof v === "string" ? `"${v.length > 35 ? v.slice(0, 32) + "..." : v}"` : JSON.stringify(v);
|
|
5987
|
-
return `${style.dim(k)}=${style.cyan(valStr)}`;
|
|
5988
|
-
}).join(" ");
|
|
5989
|
-
const dot = "\x1B[38;2;224;175;104m\u23FA\x1B[0m";
|
|
5990
|
-
console.log(` ${dot} ${style.bold(toolName)} ${argsSummary ? `${style.dim("(")}${argsSummary}${style.dim(")")}` : ""}`);
|
|
5991
|
-
}
|
|
5992
6170
|
function formatTaskStepFinish(step, toolName, args, output, isError = false) {
|
|
5993
|
-
const dot = isError ? "\x1B[38;2;247;118;142m\
|
|
6171
|
+
const dot = isError ? "\x1B[38;2;247;118;142m\u25CF\x1B[0m" : "\x1B[38;2;78;169;111m\u25CF\x1B[0m";
|
|
5994
6172
|
const toolNameDisplay = style.bold(toolName);
|
|
5995
6173
|
if (toolName === "apply_patch" && typeof args.targetContent === "string" && typeof args.replacementContent === "string") {
|
|
5996
6174
|
const targetFile = args.path ? String(args.path) : undefined;
|
|
5997
|
-
console.log(` ${dot} ${style.bold("Update")} ${style.dim(`(${targetFile || ""})`)}`);
|
|
5998
6175
|
CliFormatter.formatPatchDiff(targetFile, args.targetContent, args.replacementContent);
|
|
5999
6176
|
return;
|
|
6000
6177
|
}
|
|
@@ -6015,7 +6192,7 @@ function formatTaskStepFinish(step, toolName, args, output, isError = false) {
|
|
|
6015
6192
|
}
|
|
6016
6193
|
const argsSummary = Object.entries(args).map(([k, v]) => {
|
|
6017
6194
|
const valStr = typeof v === "string" ? `"${v.length > 35 ? v.slice(0, 32) + "..." : v}"` : JSON.stringify(v);
|
|
6018
|
-
return `${style.dim(k)}
|
|
6195
|
+
return `${style.dim(k)}=\x1B[38;2;170;175;190m${valStr}\x1B[0m`;
|
|
6019
6196
|
}).join(" ");
|
|
6020
6197
|
console.log(` ${dot} ${toolNameDisplay} ${argsSummary ? `${style.dim("(")}${argsSummary}${style.dim(")")}` : ""}`);
|
|
6021
6198
|
if (summary) {
|
|
@@ -6038,8 +6215,8 @@ class CliFormatter {
|
|
|
6038
6215
|
const innerWidth = 54;
|
|
6039
6216
|
const padLine = (content) => {
|
|
6040
6217
|
const visibleLen2 = style.stripAnsi(content).length;
|
|
6041
|
-
const
|
|
6042
|
-
return ` ${style.yellow("\u2502")} ${content}${" ".repeat(
|
|
6218
|
+
const padRight2 = Math.max(0, innerWidth - visibleLen2);
|
|
6219
|
+
return ` ${style.yellow("\u2502")} ${content}${" ".repeat(padRight2)}${style.yellow("\u2502")}`;
|
|
6043
6220
|
};
|
|
6044
6221
|
const topBorder = ` ${style.yellow("\u256D")}${style.yellow("\u2500".repeat(innerWidth + 2))}${style.yellow("\u256E")}`;
|
|
6045
6222
|
const bottomBorder = ` ${style.yellow("\u2570")}${style.yellow("\u2500".repeat(innerWidth + 2))}${style.yellow("\u256F")}`;
|
|
@@ -6090,9 +6267,9 @@ class CliFormatter {
|
|
|
6090
6267
|
static formatToolCall(toolName, args) {
|
|
6091
6268
|
const argsSummary = Object.entries(args).map(([k, v]) => {
|
|
6092
6269
|
const valStr = typeof v === "string" ? `"${v.length > 40 ? v.slice(0, 37) + "..." : v}"` : JSON.stringify(v);
|
|
6093
|
-
return `${style.dim(k)}
|
|
6270
|
+
return `${style.dim(k)}=\x1B[38;2;170;175;190m${valStr}\x1B[0m`;
|
|
6094
6271
|
}).join(" ");
|
|
6095
|
-
const dot = "\x1B[38;2;78;169;111m\
|
|
6272
|
+
const dot = "\x1B[38;2;78;169;111m\u25CF\x1B[0m";
|
|
6096
6273
|
console.log(` ${dot} ${style.bold(toolName)} ${argsSummary ? `${style.dim("(")}${argsSummary}${style.dim(")")}` : ""}`);
|
|
6097
6274
|
}
|
|
6098
6275
|
static formatPatchDiff(filePath, oldSrc, newSrc) {
|
|
@@ -6100,9 +6277,9 @@ class CliFormatter {
|
|
|
6100
6277
|
if (lines.length === 0)
|
|
6101
6278
|
return;
|
|
6102
6279
|
if (filePath) {
|
|
6103
|
-
const dot = "\x1B[38;2;78;169;111m\
|
|
6280
|
+
const dot = "\x1B[38;2;78;169;111m\u25CF\x1B[0m";
|
|
6104
6281
|
const arrow = "\x1B[38;2;86;95;137m\u23BF\x1B[0m";
|
|
6105
|
-
console.log(` ${dot} ${style.bold("Update")} \x1B[38;2;
|
|
6282
|
+
console.log(` ${dot} ${style.bold("Update")} \x1B[38;2;140;140;150m(\x1B[38;2;220;220;230m${filePath}\x1B[38;2;140;140;150m)\x1B[0m`);
|
|
6106
6283
|
console.log(` ${arrow} ${style.dim("Applied patch diff hunks")}`);
|
|
6107
6284
|
}
|
|
6108
6285
|
console.log(renderDiff(lines, { filePath }));
|
|
@@ -6190,18 +6367,18 @@ ${preview}${more}`);
|
|
|
6190
6367
|
const ACTIVE = "\x1B[38;5;174m\u25FC\x1B[0m";
|
|
6191
6368
|
const PENDING = "\x1B[38;5;246m\u25FB\x1B[0m";
|
|
6192
6369
|
const DIM = "\x1B[38;5;246m";
|
|
6193
|
-
const
|
|
6370
|
+
const RESET2 = "\x1B[0m";
|
|
6194
6371
|
for (let i = 0;i < plan2.length; i++) {
|
|
6195
6372
|
const item = plan2[i];
|
|
6196
6373
|
if (!item)
|
|
6197
6374
|
continue;
|
|
6198
6375
|
const prefix = i === 0 ? " \u23BF " : " ";
|
|
6199
6376
|
if (item.status === "completed") {
|
|
6200
|
-
console.log(` ${DIM}${prefix}${
|
|
6377
|
+
console.log(` ${DIM}${prefix}${RESET2}${DONE} \x1B[9m\x1B[38;5;246m${item.step}\x1B[0m`);
|
|
6201
6378
|
} else if (item.status === "in_progress") {
|
|
6202
|
-
console.log(` ${DIM}${prefix}${
|
|
6379
|
+
console.log(` ${DIM}${prefix}${RESET2}${ACTIVE} \x1B[1m\x1B[38;5;174m${item.step}\x1B[0m`);
|
|
6203
6380
|
} else {
|
|
6204
|
-
console.log(` ${DIM}${prefix}${
|
|
6381
|
+
console.log(` ${DIM}${prefix}${RESET2}${PENDING} \x1B[38;5;246m${item.step}\x1B[0m`);
|
|
6205
6382
|
}
|
|
6206
6383
|
}
|
|
6207
6384
|
console.log();
|
|
@@ -6287,13 +6464,12 @@ ${preview}${more}`);
|
|
|
6287
6464
|
// src/cli/ui/line-editor.ts
|
|
6288
6465
|
import readline from "readline";
|
|
6289
6466
|
var keypressEventsInitialized = false;
|
|
6290
|
-
var globalRawMode = false;
|
|
6291
6467
|
function ensureKeypressInitialized() {
|
|
6292
6468
|
if (!keypressEventsInitialized && process.stdin.isTTY) {
|
|
6293
6469
|
readline.emitKeypressEvents(process.stdin);
|
|
6294
6470
|
keypressEventsInitialized = true;
|
|
6295
6471
|
process.on("exit", () => {
|
|
6296
|
-
if (
|
|
6472
|
+
if (process.stdin.isTTY) {
|
|
6297
6473
|
try {
|
|
6298
6474
|
process.stdin.setRawMode(false);
|
|
6299
6475
|
} catch {}
|
|
@@ -6330,10 +6506,9 @@ class InteractiveLineEditor {
|
|
|
6330
6506
|
let scrollTop = 0;
|
|
6331
6507
|
let renderedMenuLines = 0;
|
|
6332
6508
|
let popupDismissed = false;
|
|
6333
|
-
if (
|
|
6509
|
+
if (process.stdin.isTTY) {
|
|
6334
6510
|
try {
|
|
6335
6511
|
process.stdin.setRawMode(true);
|
|
6336
|
-
globalRawMode = true;
|
|
6337
6512
|
} catch {}
|
|
6338
6513
|
}
|
|
6339
6514
|
process.stdin.resume();
|
|
@@ -6387,11 +6562,7 @@ class InteractiveLineEditor {
|
|
|
6387
6562
|
};
|
|
6388
6563
|
const clearMenu = () => {
|
|
6389
6564
|
if (renderedMenuLines > 0) {
|
|
6390
|
-
|
|
6391
|
-
process.stdout.write(`
|
|
6392
|
-
\x1B[2K`);
|
|
6393
|
-
}
|
|
6394
|
-
process.stdout.write(`\x1B[${renderedMenuLines}A\r`);
|
|
6565
|
+
process.stdout.write("\x1B[J");
|
|
6395
6566
|
renderedMenuLines = 0;
|
|
6396
6567
|
}
|
|
6397
6568
|
};
|
|
@@ -6411,22 +6582,22 @@ class InteractiveLineEditor {
|
|
|
6411
6582
|
const RULE_COLOR = "\x1B[38;2;80;80;88m";
|
|
6412
6583
|
const ACTIVE_COLOR = "\x1B[38;2;225;225;225m";
|
|
6413
6584
|
const INACTIVE_COLOR = "\x1B[38;2;139;139;144m";
|
|
6414
|
-
const
|
|
6415
|
-
menuLines.push(` ${RULE_COLOR}${rule}${
|
|
6585
|
+
const RESET2 = "\x1B[0m";
|
|
6586
|
+
menuLines.push(` ${RULE_COLOR}${rule}${RESET2}`);
|
|
6416
6587
|
for (let i = 0;i < visibleMatches.length; i++) {
|
|
6417
6588
|
const cmd = visibleMatches[i];
|
|
6418
6589
|
const actualIdx = scrollTop + i;
|
|
6419
6590
|
const isSelected = actualIdx === selectedIndex;
|
|
6420
|
-
const marker = isSelected ? `${ACTIVE_COLOR}\u276F${
|
|
6591
|
+
const marker = isSelected ? `${ACTIVE_COLOR}\u276F${RESET2}` : " ";
|
|
6421
6592
|
const rawName = cmd.name.padEnd(16).slice(0, 16);
|
|
6422
6593
|
const rawDesc = cmd.description.length > 48 ? cmd.description.slice(0, 45) + "..." : cmd.description;
|
|
6423
6594
|
if (isSelected) {
|
|
6424
|
-
menuLines.push(` ${marker} \x1B[1m${ACTIVE_COLOR}${rawName}${
|
|
6595
|
+
menuLines.push(` ${marker} \x1B[1m${ACTIVE_COLOR}${rawName}${RESET2} \x1B[1m${ACTIVE_COLOR}${rawDesc}${RESET2}`);
|
|
6425
6596
|
} else {
|
|
6426
|
-
menuLines.push(` ${marker} ${INACTIVE_COLOR}${rawName}${
|
|
6597
|
+
menuLines.push(` ${marker} ${INACTIVE_COLOR}${rawName}${RESET2} ${INACTIVE_COLOR}${rawDesc}${RESET2}`);
|
|
6427
6598
|
}
|
|
6428
6599
|
}
|
|
6429
|
-
menuLines.push(` ${RULE_COLOR}${rule}${
|
|
6600
|
+
menuLines.push(` ${RULE_COLOR}${rule}${RESET2}`);
|
|
6430
6601
|
for (const line of menuLines) {
|
|
6431
6602
|
process.stdout.write(`
|
|
6432
6603
|
\x1B[2K${line}`);
|
|
@@ -6482,6 +6653,11 @@ class InteractiveLineEditor {
|
|
|
6482
6653
|
const cleanupAndResolve = (result) => {
|
|
6483
6654
|
clearMenu();
|
|
6484
6655
|
process.stdin.removeListener("keypress", onKeypress);
|
|
6656
|
+
if (process.stdin.isTTY) {
|
|
6657
|
+
try {
|
|
6658
|
+
process.stdin.setRawMode(false);
|
|
6659
|
+
} catch {}
|
|
6660
|
+
}
|
|
6485
6661
|
if (result.trim().length > 0 && !result.startsWith("/")) {
|
|
6486
6662
|
process.stdout.write(`\r\x1B[2K${CliFormatter.formatClaudeUserPrompt(result)}
|
|
6487
6663
|
|
|
@@ -6506,10 +6682,9 @@ class InteractiveLineEditor {
|
|
|
6506
6682
|
return;
|
|
6507
6683
|
}
|
|
6508
6684
|
clearMenu();
|
|
6509
|
-
if (
|
|
6685
|
+
if (process.stdin.isTTY) {
|
|
6510
6686
|
try {
|
|
6511
6687
|
process.stdin.setRawMode(false);
|
|
6512
|
-
globalRawMode = false;
|
|
6513
6688
|
} catch {}
|
|
6514
6689
|
}
|
|
6515
6690
|
process.stdin.removeListener("keypress", onKeypress);
|
|
@@ -6631,9 +6806,11 @@ class InteractiveLineEditor {
|
|
|
6631
6806
|
}
|
|
6632
6807
|
return;
|
|
6633
6808
|
}
|
|
6634
|
-
|
|
6635
|
-
|
|
6636
|
-
|
|
6809
|
+
const char = _str || key.sequence || (key.name && key.name.length === 1 ? key.name : "");
|
|
6810
|
+
if (char && !key.ctrl && !key.meta && char !== "\r" && char !== `
|
|
6811
|
+
`) {
|
|
6812
|
+
buffer = buffer.slice(0, cursor) + char + buffer.slice(cursor);
|
|
6813
|
+
cursor += char.length;
|
|
6637
6814
|
selectedIndex = 0;
|
|
6638
6815
|
scrollTop = 0;
|
|
6639
6816
|
popupDismissed = false;
|
|
@@ -6646,163 +6823,481 @@ class InteractiveLineEditor {
|
|
|
6646
6823
|
}
|
|
6647
6824
|
}
|
|
6648
6825
|
|
|
6649
|
-
// src/cli/ui/
|
|
6650
|
-
|
|
6651
|
-
|
|
6652
|
-
|
|
6653
|
-
|
|
6654
|
-
|
|
6655
|
-
|
|
6656
|
-
"hash",
|
|
6657
|
-
"hbars",
|
|
6658
|
-
"vbars",
|
|
6659
|
-
"shapes",
|
|
6660
|
-
"slug"
|
|
6661
|
-
];
|
|
6662
|
-
var DEFAULT_FRAME_TICK_MS = 80;
|
|
6663
|
-
// src/cli/ui/animation/frames-loader.ts
|
|
6664
|
-
import { existsSync as existsSync18, readFileSync as readFileSync13 } from "fs";
|
|
6665
|
-
import { join as join9, resolve as resolve18 } from "path";
|
|
6666
|
-
var __dirname = "/home/runner/work/agent-cli/agent-cli/src/cli/ui/animation";
|
|
6667
|
-
|
|
6668
|
-
class FramesLoader {
|
|
6669
|
-
static cache = new Map;
|
|
6670
|
-
static assetsDir = resolve18(__dirname, "../../../../assets/frames");
|
|
6671
|
-
static setAssetsDir(customDir) {
|
|
6672
|
-
this.assetsDir = customDir;
|
|
6673
|
-
this.cache.clear();
|
|
6674
|
-
}
|
|
6675
|
-
static getAssetsDir() {
|
|
6676
|
-
return this.assetsDir;
|
|
6677
|
-
}
|
|
6678
|
-
static getFrames(variant) {
|
|
6679
|
-
if (this.cache.has(variant)) {
|
|
6680
|
-
return this.cache.get(variant);
|
|
6681
|
-
}
|
|
6682
|
-
const variantDir = join9(this.assetsDir, variant);
|
|
6683
|
-
if (!existsSync18(variantDir)) {
|
|
6684
|
-
return [];
|
|
6685
|
-
}
|
|
6686
|
-
const frames = [];
|
|
6687
|
-
for (let i = 1;i <= 36; i++) {
|
|
6688
|
-
const framePath = join9(variantDir, `frame_${i}.txt`);
|
|
6689
|
-
if (existsSync18(framePath)) {
|
|
6690
|
-
try {
|
|
6691
|
-
const content = readFileSync13(framePath, "utf-8");
|
|
6692
|
-
frames.push(content);
|
|
6693
|
-
} catch {}
|
|
6694
|
-
}
|
|
6695
|
-
}
|
|
6696
|
-
this.cache.set(variant, frames);
|
|
6697
|
-
return frames;
|
|
6698
|
-
}
|
|
6699
|
-
static preloadAll() {
|
|
6700
|
-
for (const variant of ALL_ANIMATION_VARIANTS) {
|
|
6701
|
-
this.getFrames(variant);
|
|
6702
|
-
}
|
|
6703
|
-
}
|
|
6704
|
-
}
|
|
6705
|
-
// src/cli/ui/animation/ascii-animation.ts
|
|
6706
|
-
class AsciiAnimation {
|
|
6707
|
-
variant;
|
|
6708
|
-
frameTickMs;
|
|
6709
|
-
startTime;
|
|
6710
|
-
currentFrameIndex = 0;
|
|
6711
|
-
colorFn;
|
|
6712
|
-
constructor(options = {}) {
|
|
6713
|
-
this.variant = options.variant || "default";
|
|
6714
|
-
this.frameTickMs = options.frameTickMs ?? DEFAULT_FRAME_TICK_MS;
|
|
6715
|
-
this.startTime = Date.now();
|
|
6716
|
-
this.colorFn = options.colorFn;
|
|
6717
|
-
if (options.assetsDir) {
|
|
6718
|
-
FramesLoader.setAssetsDir(options.assetsDir);
|
|
6719
|
-
}
|
|
6720
|
-
}
|
|
6721
|
-
getFrames() {
|
|
6722
|
-
return FramesLoader.getFrames(this.variant);
|
|
6723
|
-
}
|
|
6724
|
-
currentFrame(now = Date.now()) {
|
|
6725
|
-
const frames = this.getFrames();
|
|
6726
|
-
if (frames.length === 0)
|
|
6727
|
-
return "";
|
|
6728
|
-
if (this.frameTickMs === 0) {
|
|
6729
|
-
return frames[0] || "";
|
|
6826
|
+
// src/cli/ui/prompt.ts
|
|
6827
|
+
import readline2 from "readline";
|
|
6828
|
+
async function promptChoice(config) {
|
|
6829
|
+
const { message, choices, defaultIndex = 0 } = config;
|
|
6830
|
+
if (!process.stdin.isTTY) {
|
|
6831
|
+
if (!process.stdin.readable) {
|
|
6832
|
+
return choices[defaultIndex]?.value ?? choices[0].value;
|
|
6730
6833
|
}
|
|
6731
|
-
|
|
6732
|
-
|
|
6733
|
-
|
|
6734
|
-
|
|
6735
|
-
|
|
6736
|
-
|
|
6737
|
-
|
|
6738
|
-
|
|
6739
|
-
|
|
6740
|
-
|
|
6741
|
-
|
|
6742
|
-
|
|
6743
|
-
|
|
6744
|
-
|
|
6745
|
-
|
|
6746
|
-
|
|
6747
|
-
|
|
6748
|
-
|
|
6749
|
-
|
|
6750
|
-
|
|
6751
|
-
}
|
|
6752
|
-
pickRandomVariant() {
|
|
6753
|
-
const available = ALL_ANIMATION_VARIANTS.filter((v) => v !== this.variant);
|
|
6754
|
-
const randomIndex = Math.floor(Math.random() * available.length);
|
|
6755
|
-
const nextVariant = available[randomIndex] || "default";
|
|
6756
|
-
this.setVariant(nextVariant);
|
|
6757
|
-
return nextVariant;
|
|
6834
|
+
return new Promise((resolve18) => {
|
|
6835
|
+
const rl = readline2.createInterface({ input: process.stdin, output: process.stdout });
|
|
6836
|
+
const hint = choices.map((c3) => c3.isDefault ? `[${c3.key.toUpperCase()}]` : `[${c3.key}]`).join("/");
|
|
6837
|
+
let resolved = false;
|
|
6838
|
+
const doResolve = (val) => {
|
|
6839
|
+
if (!resolved) {
|
|
6840
|
+
resolved = true;
|
|
6841
|
+
rl.close();
|
|
6842
|
+
resolve18(val);
|
|
6843
|
+
}
|
|
6844
|
+
};
|
|
6845
|
+
rl.question(`${message} ${hint}: `, (answer) => {
|
|
6846
|
+
const trimmed = answer.trim().toLowerCase();
|
|
6847
|
+
const matched = choices.find((c3) => c3.key.toLowerCase() === trimmed);
|
|
6848
|
+
doResolve(matched ? matched.value : choices[defaultIndex].value);
|
|
6849
|
+
});
|
|
6850
|
+
rl.on("close", () => {
|
|
6851
|
+
doResolve(choices[defaultIndex].value);
|
|
6852
|
+
});
|
|
6853
|
+
});
|
|
6758
6854
|
}
|
|
6759
|
-
|
|
6760
|
-
|
|
6761
|
-
if (
|
|
6762
|
-
|
|
6763
|
-
|
|
6764
|
-
const
|
|
6765
|
-
const resetCursor = "\x1B[H";
|
|
6766
|
-
if (process.stdout.isTTY) {
|
|
6767
|
-
process.stdout.write(hideCursor);
|
|
6768
|
-
if (options.clearScreen) {
|
|
6769
|
-
process.stdout.write("\x1B[2J\x1B[H");
|
|
6770
|
-
}
|
|
6771
|
-
}
|
|
6772
|
-
const start = Date.now();
|
|
6855
|
+
return new Promise((resolve18) => {
|
|
6856
|
+
let selectedIndex = defaultIndex;
|
|
6857
|
+
if (selectedIndex < 0 || selectedIndex >= choices.length)
|
|
6858
|
+
selectedIndex = 0;
|
|
6859
|
+
readline2.emitKeypressEvents(process.stdin);
|
|
6860
|
+
const wasRaw = process.stdin.isRaw;
|
|
6773
6861
|
try {
|
|
6774
|
-
|
|
6775
|
-
|
|
6776
|
-
|
|
6777
|
-
|
|
6778
|
-
|
|
6779
|
-
|
|
6780
|
-
|
|
6781
|
-
|
|
6862
|
+
process.stdin.setRawMode(true);
|
|
6863
|
+
} catch {}
|
|
6864
|
+
process.stdin.resume();
|
|
6865
|
+
const render = () => {
|
|
6866
|
+
const parts = choices.map((choice, idx) => {
|
|
6867
|
+
const isSelected = idx === selectedIndex;
|
|
6868
|
+
const keyTag = `[${choice.key}]`;
|
|
6869
|
+
if (isSelected) {
|
|
6870
|
+
return `${c.bgBrand}${c.white}${c.bold} \u276F ${keyTag} ${choice.label} ${c.reset}`;
|
|
6782
6871
|
}
|
|
6783
|
-
|
|
6872
|
+
return `${style.dim(` ${keyTag} ${choice.label}`)}`;
|
|
6873
|
+
});
|
|
6874
|
+
process.stdout.write(`\r\x1B[2K ${style.bold(message)}
|
|
6875
|
+
\r\x1B[2K${parts.join(" ")}`);
|
|
6876
|
+
};
|
|
6877
|
+
const cleanup = (confirmedChoice) => {
|
|
6878
|
+
process.stdin.removeListener("keypress", onKeypress);
|
|
6879
|
+
try {
|
|
6880
|
+
process.stdin.setRawMode(wasRaw ?? false);
|
|
6881
|
+
} catch {}
|
|
6882
|
+
process.stdout.write(`\r\x1B[1A\r\x1B[2K ${style.bold(message)} ${style.cyan(`[${confirmedChoice.key}] ${confirmedChoice.label}`)}
|
|
6883
|
+
\r\x1B[2K`);
|
|
6884
|
+
resolve18(confirmedChoice.value);
|
|
6885
|
+
};
|
|
6886
|
+
const onKeypress = (_str, key) => {
|
|
6887
|
+
if (!key)
|
|
6888
|
+
return;
|
|
6889
|
+
if (key.ctrl && key.name === "c") {
|
|
6890
|
+
cleanup(choices.find((c3) => c3.key.toLowerCase() === "n") || choices[defaultIndex]);
|
|
6891
|
+
return;
|
|
6892
|
+
}
|
|
6893
|
+
if (key.name === "escape") {
|
|
6894
|
+
cleanup(choices.find((c3) => c3.key.toLowerCase() === "n") || choices[defaultIndex]);
|
|
6895
|
+
return;
|
|
6896
|
+
}
|
|
6897
|
+
if (key.name === "return" || key.name === "enter") {
|
|
6898
|
+
cleanup(choices[selectedIndex]);
|
|
6899
|
+
return;
|
|
6900
|
+
}
|
|
6901
|
+
if (key.name === "left") {
|
|
6902
|
+
selectedIndex = (selectedIndex - 1 + choices.length) % choices.length;
|
|
6903
|
+
process.stdout.write("\x1B[1A");
|
|
6904
|
+
render();
|
|
6905
|
+
return;
|
|
6906
|
+
}
|
|
6907
|
+
if (key.name === "right" || key.name === "tab") {
|
|
6908
|
+
selectedIndex = (selectedIndex + 1) % choices.length;
|
|
6909
|
+
process.stdout.write("\x1B[1A");
|
|
6910
|
+
render();
|
|
6911
|
+
return;
|
|
6784
6912
|
}
|
|
6785
|
-
|
|
6786
|
-
if (
|
|
6787
|
-
|
|
6913
|
+
const char = _str ? _str.toLowerCase() : key.name ? key.name.toLowerCase() : "";
|
|
6914
|
+
if (char) {
|
|
6915
|
+
const directMatch = choices.find((c3) => c3.key.toLowerCase() === char);
|
|
6916
|
+
if (directMatch) {
|
|
6917
|
+
cleanup(directMatch);
|
|
6918
|
+
return;
|
|
6919
|
+
}
|
|
6788
6920
|
}
|
|
6921
|
+
};
|
|
6922
|
+
process.stdin.on("keypress", onKeypress);
|
|
6923
|
+
render();
|
|
6924
|
+
});
|
|
6925
|
+
}
|
|
6926
|
+
async function promptToolApproval(params) {
|
|
6927
|
+
const options = [
|
|
6928
|
+
{ key: "a", label: "Yes, and don't ask again for anything (always-approve mode)", value: "always" },
|
|
6929
|
+
{ key: "y", label: "Yes, proceed", value: "yes", isDefault: true },
|
|
6930
|
+
{ key: "n", label: "No, reject (type to add feedback)", value: "no" }
|
|
6931
|
+
];
|
|
6932
|
+
const title = params.description || `Tool Execution: ${params.toolName}`;
|
|
6933
|
+
const command = params.command || params.toolName;
|
|
6934
|
+
const BORDER = "\x1B[38;5;8m\u2502\x1B[0m";
|
|
6935
|
+
const FG = "\x1B[38;2;225;225;225m";
|
|
6936
|
+
const MUTED = "\x1B[38;2;139;139;144m";
|
|
6937
|
+
const DIM = "\x1B[38;2;108;108;108m";
|
|
6938
|
+
const RESET2 = "\x1B[0m";
|
|
6939
|
+
console.log();
|
|
6940
|
+
console.log(` ${BORDER} ${FG}${title}${RESET2}`);
|
|
6941
|
+
console.log(` ${BORDER} ${MUTED}${command}${RESET2}`);
|
|
6942
|
+
console.log(` ${BORDER}`);
|
|
6943
|
+
const renderCard = (selected) => {
|
|
6944
|
+
for (let i = 0;i < options.length; i++) {
|
|
6945
|
+
const opt = options[i];
|
|
6946
|
+
const active = i === selected;
|
|
6947
|
+
const radio = active ? `${FG}(\u25CF)${RESET2}` : `${DIM}(\u25CB)${RESET2}`;
|
|
6948
|
+
const num = `${FG}${i + 1}${RESET2}`;
|
|
6949
|
+
const label = active ? `\x1B[1m${FG}${opt.label}${RESET2}` : `${MUTED}${opt.label}${RESET2}`;
|
|
6950
|
+
console.log(` ${BORDER} ${num} ${radio} ${label}`);
|
|
6789
6951
|
}
|
|
6952
|
+
console.log(` ${BORDER}`);
|
|
6953
|
+
console.log(` ${FG}${selected + 1}/${options.length}${RESET2}${DIM}:select \u2502 ${FG}Ctrl+o${RESET2}${DIM}:yolo \u2502 ${FG}Ctrl+c${RESET2}${DIM}:cancel${RESET2}`);
|
|
6954
|
+
};
|
|
6955
|
+
if (!process.stdin.isTTY || false || !process.stdin.readable) {
|
|
6956
|
+
renderCard(1);
|
|
6957
|
+
return "yes";
|
|
6790
6958
|
}
|
|
6959
|
+
return new Promise((resolve18) => {
|
|
6960
|
+
let selectedIndex = 1;
|
|
6961
|
+
readline2.emitKeypressEvents(process.stdin);
|
|
6962
|
+
const wasRaw = process.stdin.isRaw;
|
|
6963
|
+
try {
|
|
6964
|
+
process.stdin.setRawMode(true);
|
|
6965
|
+
} catch {}
|
|
6966
|
+
process.stdin.resume();
|
|
6967
|
+
const render = () => {
|
|
6968
|
+
renderCard(selectedIndex);
|
|
6969
|
+
};
|
|
6970
|
+
const cleanup = (val) => {
|
|
6971
|
+
process.stdin.removeListener("keypress", onKeypress);
|
|
6972
|
+
try {
|
|
6973
|
+
process.stdin.setRawMode(wasRaw ?? false);
|
|
6974
|
+
} catch {}
|
|
6975
|
+
console.log();
|
|
6976
|
+
resolve18(val);
|
|
6977
|
+
};
|
|
6978
|
+
const onKeypress = (_str, key) => {
|
|
6979
|
+
if (!key)
|
|
6980
|
+
return;
|
|
6981
|
+
if (key.ctrl && key.name === "c") {
|
|
6982
|
+
cleanup("no");
|
|
6983
|
+
return;
|
|
6984
|
+
}
|
|
6985
|
+
if (key.ctrl && key.name === "o") {
|
|
6986
|
+
cleanup("always");
|
|
6987
|
+
return;
|
|
6988
|
+
}
|
|
6989
|
+
if (key.name === "up") {
|
|
6990
|
+
selectedIndex = (selectedIndex - 1 + options.length) % options.length;
|
|
6991
|
+
process.stdout.write(`\x1B[5A`);
|
|
6992
|
+
render();
|
|
6993
|
+
return;
|
|
6994
|
+
}
|
|
6995
|
+
if (key.name === "down") {
|
|
6996
|
+
selectedIndex = (selectedIndex + 1) % options.length;
|
|
6997
|
+
process.stdout.write(`\x1B[5A`);
|
|
6998
|
+
render();
|
|
6999
|
+
return;
|
|
7000
|
+
}
|
|
7001
|
+
if (key.name === "return" || key.name === "enter" || _str === " ") {
|
|
7002
|
+
cleanup(options[selectedIndex].value);
|
|
7003
|
+
return;
|
|
7004
|
+
}
|
|
7005
|
+
if (_str === "1") {
|
|
7006
|
+
cleanup(options[0].value);
|
|
7007
|
+
return;
|
|
7008
|
+
}
|
|
7009
|
+
if (_str === "2") {
|
|
7010
|
+
cleanup(options[1].value);
|
|
7011
|
+
return;
|
|
7012
|
+
}
|
|
7013
|
+
if (_str === "3") {
|
|
7014
|
+
cleanup(options[2].value);
|
|
7015
|
+
return;
|
|
7016
|
+
}
|
|
7017
|
+
if (_str?.toLowerCase() === "y") {
|
|
7018
|
+
cleanup("yes");
|
|
7019
|
+
return;
|
|
7020
|
+
}
|
|
7021
|
+
if (_str?.toLowerCase() === "n") {
|
|
7022
|
+
cleanup("no");
|
|
7023
|
+
return;
|
|
7024
|
+
}
|
|
7025
|
+
if (_str?.toLowerCase() === "a") {
|
|
7026
|
+
cleanup("always");
|
|
7027
|
+
return;
|
|
7028
|
+
}
|
|
7029
|
+
};
|
|
7030
|
+
process.stdin.on("keypress", onKeypress);
|
|
7031
|
+
render();
|
|
7032
|
+
});
|
|
6791
7033
|
}
|
|
6792
|
-
|
|
6793
|
-
|
|
6794
|
-
|
|
6795
|
-
|
|
6796
|
-
|
|
6797
|
-
|
|
6798
|
-
|
|
6799
|
-
|
|
6800
|
-
|
|
6801
|
-
|
|
6802
|
-
|
|
6803
|
-
|
|
6804
|
-
{
|
|
6805
|
-
|
|
7034
|
+
async function promptUserQuestion(params) {
|
|
7035
|
+
const { question, options = [] } = params;
|
|
7036
|
+
const boxWidth = Math.min(process.stdout.columns ?? 80, 75);
|
|
7037
|
+
const border = "\u2500".repeat(Math.max(10, boxWidth - 20));
|
|
7038
|
+
console.log(`
|
|
7039
|
+
${style.cyan("\u250C\u2500\u2500")} ${style.bold("AI Question")} ${style.cyan(border)}`);
|
|
7040
|
+
const qLines = question.split(`
|
|
7041
|
+
`);
|
|
7042
|
+
for (const line of qLines) {
|
|
7043
|
+
console.log(` ${style.cyan("\u2502")} ${style.bold(line)}`);
|
|
7044
|
+
}
|
|
7045
|
+
if (options.length > 0) {
|
|
7046
|
+
console.log(` ${style.cyan("\u2502")}`);
|
|
7047
|
+
options.forEach((opt, idx) => {
|
|
7048
|
+
const numTag = style.cyan(`[${idx + 1}]`);
|
|
7049
|
+
const isRec = opt.includes("(Recommended)") || opt.includes("(recommended)");
|
|
7050
|
+
const optText = isRec ? opt.replace(/\(Recommended\)/i, style.green("(Recommended)")) : opt;
|
|
7051
|
+
console.log(` ${style.cyan("\u2502")} ${numTag} ${optText}`);
|
|
7052
|
+
});
|
|
7053
|
+
}
|
|
7054
|
+
console.log(` ${style.cyan("\u2514" + "\u2500".repeat(Math.max(10, boxWidth - 4)))}
|
|
7055
|
+
`);
|
|
7056
|
+
if (!process.stdin.isTTY || false || !process.stdin.readable) {
|
|
7057
|
+
return options[0] || "yes";
|
|
7058
|
+
}
|
|
7059
|
+
return new Promise((resolve18) => {
|
|
7060
|
+
const rl = readline2.createInterface({ input: process.stdin, output: process.stdout });
|
|
7061
|
+
const promptLabel = options.length > 0 ? `Select [1-${options.length}] or type custom response: ` : `Your response: `;
|
|
7062
|
+
rl.question(` ${style.bold(promptLabel)}`, (answer) => {
|
|
7063
|
+
rl.close();
|
|
7064
|
+
const trimmed = answer.trim();
|
|
7065
|
+
if (!trimmed) {
|
|
7066
|
+
const fallback = options[0] || "";
|
|
7067
|
+
console.log(style.dim(` \u21B3 Default: ${fallback || "(empty)"}
|
|
7068
|
+
`));
|
|
7069
|
+
resolve18(fallback);
|
|
7070
|
+
return;
|
|
7071
|
+
}
|
|
7072
|
+
const num = parseInt(trimmed, 10);
|
|
7073
|
+
if (!isNaN(num) && num >= 1 && num <= options.length) {
|
|
7074
|
+
const picked = options[num - 1];
|
|
7075
|
+
console.log(style.green(` \u2714 Selected: ${picked}
|
|
7076
|
+
`));
|
|
7077
|
+
resolve18(picked);
|
|
7078
|
+
return;
|
|
7079
|
+
}
|
|
7080
|
+
if (options.length === 2) {
|
|
7081
|
+
if (/^(y|yes)$/i.test(trimmed)) {
|
|
7082
|
+
console.log(style.green(` \u2714 Selected: ${options[0]}
|
|
7083
|
+
`));
|
|
7084
|
+
resolve18(options[0]);
|
|
7085
|
+
return;
|
|
7086
|
+
}
|
|
7087
|
+
if (/^(n|no)$/i.test(trimmed)) {
|
|
7088
|
+
console.log(style.green(` \u2714 Selected: ${options[1]}
|
|
7089
|
+
`));
|
|
7090
|
+
resolve18(options[1]);
|
|
7091
|
+
return;
|
|
7092
|
+
}
|
|
7093
|
+
}
|
|
7094
|
+
console.log(style.green(` \u2714 Answer: ${trimmed}
|
|
7095
|
+
`));
|
|
7096
|
+
resolve18(trimmed);
|
|
7097
|
+
});
|
|
7098
|
+
});
|
|
7099
|
+
}
|
|
7100
|
+
async function promptInteractiveList(config) {
|
|
7101
|
+
const {
|
|
7102
|
+
title,
|
|
7103
|
+
items,
|
|
7104
|
+
mode = "select",
|
|
7105
|
+
defaultIndex = 0,
|
|
7106
|
+
maxVisible = 8,
|
|
7107
|
+
emptyMessage = "No items available.",
|
|
7108
|
+
onToggle,
|
|
7109
|
+
onAction,
|
|
7110
|
+
customKeyHints
|
|
7111
|
+
} = config;
|
|
7112
|
+
if (!process.stdin.isTTY || false || !process.stdin.readable) {
|
|
7113
|
+
return {
|
|
7114
|
+
selectedIndex: defaultIndex,
|
|
7115
|
+
selectedItem: items[defaultIndex] || items[0],
|
|
7116
|
+
action: "select"
|
|
7117
|
+
};
|
|
7118
|
+
}
|
|
7119
|
+
if (items.length === 0) {
|
|
7120
|
+
console.log(`
|
|
7121
|
+
${style.dim(emptyMessage)}
|
|
7122
|
+
`);
|
|
7123
|
+
return { selectedIndex: -1, action: "close" };
|
|
7124
|
+
}
|
|
7125
|
+
return new Promise((resolve18) => {
|
|
7126
|
+
let selectedIndex = Math.max(0, Math.min(defaultIndex, items.length - 1));
|
|
7127
|
+
let scrollTop = 0;
|
|
7128
|
+
let renderedLines = 0;
|
|
7129
|
+
readline2.emitKeypressEvents(process.stdin);
|
|
7130
|
+
const wasRaw = process.stdin.isRaw;
|
|
7131
|
+
try {
|
|
7132
|
+
process.stdin.setRawMode(true);
|
|
7133
|
+
} catch {}
|
|
7134
|
+
process.stdin.resume();
|
|
7135
|
+
process.stdout.write("\x1B[?25l");
|
|
7136
|
+
const BOX_WIDTH = Math.min(process.stdout.columns ?? 80, 76);
|
|
7137
|
+
const ensureVisible = () => {
|
|
7138
|
+
const visibleCount = Math.min(items.length, maxVisible);
|
|
7139
|
+
if (selectedIndex < scrollTop) {
|
|
7140
|
+
scrollTop = selectedIndex;
|
|
7141
|
+
} else if (selectedIndex >= scrollTop + visibleCount) {
|
|
7142
|
+
scrollTop = selectedIndex + 1 - visibleCount;
|
|
7143
|
+
}
|
|
7144
|
+
if (scrollTop < 0)
|
|
7145
|
+
scrollTop = 0;
|
|
7146
|
+
const maxScroll = Math.max(0, items.length - visibleCount);
|
|
7147
|
+
if (scrollTop > maxScroll)
|
|
7148
|
+
scrollTop = maxScroll;
|
|
7149
|
+
};
|
|
7150
|
+
const render = () => {
|
|
7151
|
+
ensureVisible();
|
|
7152
|
+
const visibleCount = Math.min(items.length, maxVisible);
|
|
7153
|
+
const visibleItems = items.slice(scrollTop, scrollTop + visibleCount);
|
|
7154
|
+
const lines = [];
|
|
7155
|
+
const headerBorder = "\u2500".repeat(Math.max(10, BOX_WIDTH - title.length - 8));
|
|
7156
|
+
lines.push(` \x1B[38;2;140;140;150m\u250C\u2500\u2500\x1B[0m ${style.bold(title)} \x1B[38;2;140;140;150m${headerBorder}\u2510\x1B[0m`);
|
|
7157
|
+
for (let i = 0;i < visibleItems.length; i++) {
|
|
7158
|
+
const item = visibleItems[i];
|
|
7159
|
+
const actualIdx = scrollTop + i;
|
|
7160
|
+
const isCurrent = actualIdx === selectedIndex;
|
|
7161
|
+
const marker = isCurrent ? "\x1B[38;2;217;119;87m\u276F\x1B[0m" : " ";
|
|
7162
|
+
let checkSymbol = "";
|
|
7163
|
+
if (mode === "toggle") {
|
|
7164
|
+
checkSymbol = item.checked ? "\x1B[38;2;78;169;111m[\u2714 ENABLED]\x1B[0m " : "\x1B[38;2;120;120;125m[\u25CB DISABLED]\x1B[0m";
|
|
7165
|
+
} else if (item.checked !== undefined) {
|
|
7166
|
+
checkSymbol = item.checked ? "\x1B[38;2;78;169;111m(\u25CF)\x1B[0m " : "\x1B[38;2;120;120;125m(\u25CB)\x1B[0m ";
|
|
7167
|
+
}
|
|
7168
|
+
const badgeStr = item.badge ? ` ${style.dim(`(${item.badge})`)}` : "";
|
|
7169
|
+
const labelStr = isCurrent ? style.bold(item.label) : item.label;
|
|
7170
|
+
lines.push(` \x1B[38;2;140;140;150m\u2502\x1B[0m ${marker} ${checkSymbol} ${labelStr}${badgeStr}`);
|
|
7171
|
+
if (item.description) {
|
|
7172
|
+
const descIndent = " ".repeat(mode === "toggle" ? 17 : 7);
|
|
7173
|
+
const maxDescLen = BOX_WIDTH - descIndent.length - 6;
|
|
7174
|
+
const trimmedDesc = item.description.length > maxDescLen ? item.description.slice(0, maxDescLen - 3) + "..." : item.description;
|
|
7175
|
+
lines.push(` \x1B[38;2;140;140;150m\u2502\x1B[0m ${descIndent}${style.dim(trimmedDesc)}`);
|
|
7176
|
+
}
|
|
7177
|
+
}
|
|
7178
|
+
const moreAbove = scrollTop;
|
|
7179
|
+
const moreBelow = Math.max(0, items.length - (scrollTop + visibleCount));
|
|
7180
|
+
let scrollInfo = "";
|
|
7181
|
+
if (moreAbove > 0 && moreBelow > 0) {
|
|
7182
|
+
scrollInfo = `[\u2191 ${moreAbove} more \xB7 \u2193 ${moreBelow} more]`;
|
|
7183
|
+
} else if (moreBelow > 0) {
|
|
7184
|
+
scrollInfo = `[\u2193 ${moreBelow} more below]`;
|
|
7185
|
+
} else if (moreAbove > 0) {
|
|
7186
|
+
scrollInfo = `[\u2191 ${moreAbove} more above]`;
|
|
7187
|
+
}
|
|
7188
|
+
const defaultHints = mode === "toggle" ? "\u2191/\u2193: navigate \xB7 Space: toggle \xB7 a: all \xB7 d: none \xB7 Enter/Esc: done" : "\u2191/\u2193: navigate \xB7 Enter: select \xB7 Esc: cancel";
|
|
7189
|
+
const hintText = customKeyHints || (scrollInfo ? `${scrollInfo} ${defaultHints}` : defaultHints);
|
|
7190
|
+
lines.push(` \x1B[38;2;140;140;150m\u2502\x1B[0m`);
|
|
7191
|
+
lines.push(` \x1B[38;2;140;140;150m\u2502\x1B[0m ${style.dim(hintText)}`);
|
|
7192
|
+
lines.push(` \x1B[38;2;140;140;150m\u2514\u2500\u2500${"\u2500".repeat(Math.max(10, BOX_WIDTH - 6))}\u2518\x1B[0m`);
|
|
7193
|
+
let buffer = "";
|
|
7194
|
+
if (renderedLines > 0) {
|
|
7195
|
+
buffer += `\x1B[${renderedLines}A\r`;
|
|
7196
|
+
}
|
|
7197
|
+
buffer += lines.map((l) => `\x1B[2K${l}`).join(`
|
|
7198
|
+
`) + `
|
|
7199
|
+
`;
|
|
7200
|
+
if (renderedLines > lines.length) {
|
|
7201
|
+
buffer += "\x1B[J";
|
|
7202
|
+
}
|
|
7203
|
+
process.stdout.write(buffer);
|
|
7204
|
+
renderedLines = lines.length;
|
|
7205
|
+
};
|
|
7206
|
+
const cleanup = (res) => {
|
|
7207
|
+
if (renderedLines > 0) {
|
|
7208
|
+
process.stdout.write(`\x1B[${renderedLines}A\r\x1B[J\x1B[?25h`);
|
|
7209
|
+
renderedLines = 0;
|
|
7210
|
+
} else {
|
|
7211
|
+
process.stdout.write("\x1B[?25h");
|
|
7212
|
+
}
|
|
7213
|
+
process.stdin.removeListener("keypress", onKeypress);
|
|
7214
|
+
try {
|
|
7215
|
+
process.stdin.setRawMode(wasRaw ?? false);
|
|
7216
|
+
} catch {}
|
|
7217
|
+
resolve18(res);
|
|
7218
|
+
};
|
|
7219
|
+
const onKeypress = async (_str, key) => {
|
|
7220
|
+
if (!key)
|
|
7221
|
+
return;
|
|
7222
|
+
if (key.ctrl && key.name === "c" || key.name === "escape" || _str === "q" || _str === "Q") {
|
|
7223
|
+
cleanup({
|
|
7224
|
+
selectedIndex,
|
|
7225
|
+
selectedItem: items[selectedIndex],
|
|
7226
|
+
action: "close"
|
|
7227
|
+
});
|
|
7228
|
+
return;
|
|
7229
|
+
}
|
|
7230
|
+
if (key.name === "up" || _str === "k") {
|
|
7231
|
+
selectedIndex = (selectedIndex - 1 + items.length) % items.length;
|
|
7232
|
+
render();
|
|
7233
|
+
return;
|
|
7234
|
+
}
|
|
7235
|
+
if (key.name === "down" || _str === "j") {
|
|
7236
|
+
selectedIndex = (selectedIndex + 1) % items.length;
|
|
7237
|
+
render();
|
|
7238
|
+
return;
|
|
7239
|
+
}
|
|
7240
|
+
if (_str === " " || _str === "t" || _str === "T") {
|
|
7241
|
+
const item = items[selectedIndex];
|
|
7242
|
+
if (item) {
|
|
7243
|
+
item.checked = !item.checked;
|
|
7244
|
+
if (onToggle) {
|
|
7245
|
+
await onToggle(item, selectedIndex);
|
|
7246
|
+
}
|
|
7247
|
+
}
|
|
7248
|
+
render();
|
|
7249
|
+
return;
|
|
7250
|
+
}
|
|
7251
|
+
if (key.name === "return" || key.name === "enter") {
|
|
7252
|
+
if (mode === "toggle") {
|
|
7253
|
+
cleanup({
|
|
7254
|
+
selectedIndex,
|
|
7255
|
+
selectedItem: items[selectedIndex],
|
|
7256
|
+
action: "close"
|
|
7257
|
+
});
|
|
7258
|
+
} else {
|
|
7259
|
+
cleanup({
|
|
7260
|
+
selectedIndex,
|
|
7261
|
+
selectedItem: items[selectedIndex],
|
|
7262
|
+
action: "select"
|
|
7263
|
+
});
|
|
7264
|
+
}
|
|
7265
|
+
return;
|
|
7266
|
+
}
|
|
7267
|
+
if (_str && onAction) {
|
|
7268
|
+
const item = items[selectedIndex];
|
|
7269
|
+
const shouldExit = await onAction(_str.toLowerCase(), item, selectedIndex);
|
|
7270
|
+
if (shouldExit) {
|
|
7271
|
+
cleanup({
|
|
7272
|
+
selectedIndex,
|
|
7273
|
+
selectedItem: item,
|
|
7274
|
+
action: "custom",
|
|
7275
|
+
keyName: _str.toLowerCase()
|
|
7276
|
+
});
|
|
7277
|
+
return;
|
|
7278
|
+
}
|
|
7279
|
+
render();
|
|
7280
|
+
}
|
|
7281
|
+
};
|
|
7282
|
+
process.stdin.on("keypress", onKeypress);
|
|
7283
|
+
render();
|
|
7284
|
+
});
|
|
7285
|
+
}
|
|
7286
|
+
|
|
7287
|
+
// src/security/scanner.ts
|
|
7288
|
+
import { existsSync as existsSync18, readdirSync as readdirSync5, readFileSync as readFileSync13, statSync as statSync3 } from "fs";
|
|
7289
|
+
import { join as join9, relative as relative2, resolve as resolve18 } from "path";
|
|
7290
|
+
var SECURITY_RULES = [
|
|
7291
|
+
{
|
|
7292
|
+
id: "SEC-001",
|
|
7293
|
+
category: "Secrets Leakage",
|
|
7294
|
+
severity: "CRITICAL",
|
|
7295
|
+
pattern: /sk-(?:proj-)?[A-Za-z0-9-_]{20,}/,
|
|
7296
|
+
description: "Hardcoded OpenAI API key detected in source code.",
|
|
7297
|
+
recommendation: "Store API keys in environment variables (e.g. process.env.OPENAI_API_KEY) or a secure vault."
|
|
7298
|
+
},
|
|
7299
|
+
{
|
|
7300
|
+
id: "SEC-002",
|
|
6806
7301
|
category: "Secrets Leakage",
|
|
6807
7302
|
severity: "CRITICAL",
|
|
6808
7303
|
pattern: /AKIA[0-9A-Z]{16}/,
|
|
@@ -6923,24 +7418,24 @@ var IGNORED_FILES = new Set([
|
|
|
6923
7418
|
]);
|
|
6924
7419
|
async function runSecurityScan(targetDir, options = {}) {
|
|
6925
7420
|
const startTime = performance.now();
|
|
6926
|
-
const root =
|
|
7421
|
+
const root = resolve18(targetDir);
|
|
6927
7422
|
const isDirectTestDir = targetDir.includes("test") || Boolean(options.includeTests);
|
|
6928
7423
|
const maxFiles = options.maxFiles || 2000;
|
|
6929
7424
|
const findings = [];
|
|
6930
7425
|
let scannedCount = 0;
|
|
6931
7426
|
function walk(current) {
|
|
6932
|
-
if (scannedCount >= maxFiles || !
|
|
7427
|
+
if (scannedCount >= maxFiles || !existsSync18(current))
|
|
6933
7428
|
return;
|
|
6934
7429
|
let entries;
|
|
6935
7430
|
try {
|
|
6936
|
-
entries =
|
|
7431
|
+
entries = readdirSync5(current);
|
|
6937
7432
|
} catch {
|
|
6938
7433
|
return;
|
|
6939
7434
|
}
|
|
6940
7435
|
for (const entry of entries) {
|
|
6941
7436
|
if (scannedCount >= maxFiles)
|
|
6942
7437
|
break;
|
|
6943
|
-
const fullPath =
|
|
7438
|
+
const fullPath = join9(current, entry);
|
|
6944
7439
|
let stat;
|
|
6945
7440
|
try {
|
|
6946
7441
|
stat = statSync3(fullPath);
|
|
@@ -6971,7 +7466,7 @@ async function runSecurityScan(targetDir, options = {}) {
|
|
|
6971
7466
|
function scanFile(filePath, baseRoot, ext, out) {
|
|
6972
7467
|
let content;
|
|
6973
7468
|
try {
|
|
6974
|
-
content =
|
|
7469
|
+
content = readFileSync13(filePath, "utf8");
|
|
6975
7470
|
} catch {
|
|
6976
7471
|
return;
|
|
6977
7472
|
}
|
|
@@ -7018,41 +7513,40 @@ async function runSecurityScan(targetDir, options = {}) {
|
|
|
7018
7513
|
}
|
|
7019
7514
|
|
|
7020
7515
|
// src/mcp/servers/chrome-devtools/index.ts
|
|
7021
|
-
import { resolve as
|
|
7516
|
+
import { resolve as resolve19 } from "path";
|
|
7022
7517
|
|
|
7023
7518
|
// src/mcp/servers/chrome-devtools/server.ts
|
|
7024
7519
|
if (false) {}
|
|
7025
7520
|
|
|
7026
7521
|
// src/mcp/servers/chrome-devtools/index.ts
|
|
7027
7522
|
var __dirname = "/home/runner/work/agent-cli/agent-cli/src/mcp/servers/chrome-devtools";
|
|
7028
|
-
var CHROME_DEVTOOLS_MCP_SERVER_PATH =
|
|
7523
|
+
var CHROME_DEVTOOLS_MCP_SERVER_PATH = resolve19(__dirname, "server.ts");
|
|
7029
7524
|
|
|
7030
7525
|
// src/mcp/servers/web-search/index.ts
|
|
7031
|
-
import { resolve as
|
|
7526
|
+
import { resolve as resolve20 } from "path";
|
|
7032
7527
|
|
|
7033
7528
|
// src/mcp/servers/web-search/server.ts
|
|
7034
7529
|
if (false) {}
|
|
7035
7530
|
|
|
7036
7531
|
// src/mcp/servers/web-search/index.ts
|
|
7037
7532
|
var __dirname = "/home/runner/work/agent-cli/agent-cli/src/mcp/servers/web-search";
|
|
7038
|
-
var WEB_SEARCH_MCP_SERVER_PATH =
|
|
7533
|
+
var WEB_SEARCH_MCP_SERVER_PATH = resolve20(__dirname, "server.ts");
|
|
7039
7534
|
|
|
7040
7535
|
// src/mcp/servers/sqlite/index.ts
|
|
7041
|
-
import { resolve as
|
|
7536
|
+
import { resolve as resolve21 } from "path";
|
|
7042
7537
|
|
|
7043
7538
|
// src/mcp/servers/sqlite/server.ts
|
|
7044
7539
|
if (false) {}
|
|
7045
7540
|
|
|
7046
7541
|
// src/mcp/servers/sqlite/index.ts
|
|
7047
7542
|
var __dirname = "/home/runner/work/agent-cli/agent-cli/src/mcp/servers/sqlite";
|
|
7048
|
-
var SQLITE_MCP_SERVER_PATH =
|
|
7543
|
+
var SQLITE_MCP_SERVER_PATH = resolve21(__dirname, "server.ts");
|
|
7049
7544
|
|
|
7050
7545
|
// src/cli/commands.ts
|
|
7051
7546
|
var AVAILABLE_SLASH_COMMANDS = [
|
|
7052
7547
|
{ name: "/help", description: "Show command list and help menu" },
|
|
7053
7548
|
{ name: "/stats", description: "Display session runtime, turn stats & sub-agent status" },
|
|
7054
7549
|
{ name: "/model", description: "Select or switch active AI model" },
|
|
7055
|
-
{ name: "/models", description: "List available AI models from gateway" },
|
|
7056
7550
|
{ name: "/reasoning", description: "Toggle internal reasoning chain visibility" },
|
|
7057
7551
|
{ name: "/login", description: "Authenticate with backend provider" },
|
|
7058
7552
|
{ name: "/whoami", description: "Check backend authentication status" },
|
|
@@ -7060,11 +7554,11 @@ var AVAILABLE_SLASH_COMMANDS = [
|
|
|
7060
7554
|
{ name: "/memories", description: "View learned preferences & memories" },
|
|
7061
7555
|
{ name: "/worktrees", description: "List active isolated Git Worktrees" },
|
|
7062
7556
|
{ name: "/sessions", description: "List saved past sessions from SQLite store" },
|
|
7063
|
-
{ name: "/
|
|
7557
|
+
{ name: "/role", description: "Select and inspect specialized agent roles & personas" },
|
|
7064
7558
|
{ name: "/security", description: "Scan codebase for vulnerabilities & secrets (Strix)" },
|
|
7065
7559
|
{ name: "/agents", description: "List active sub-agents & execution status" },
|
|
7066
7560
|
{ name: "/mcp", description: "List connected Model Context Protocol servers" },
|
|
7067
|
-
{ name: "/
|
|
7561
|
+
{ name: "/release-notes", description: "View changelog and what's new in this version" },
|
|
7068
7562
|
{ name: "/compact", description: "Trigger manual token history compaction" },
|
|
7069
7563
|
{ name: "/clear", description: "Clear terminal screen" },
|
|
7070
7564
|
{ name: "/logout", description: "Clear stored authentication credentials" },
|
|
@@ -7077,7 +7571,7 @@ async function handleSlashCommand(input, ctx) {
|
|
|
7077
7571
|
case "/":
|
|
7078
7572
|
case "/?":
|
|
7079
7573
|
case "/help":
|
|
7080
|
-
printHelp();
|
|
7574
|
+
await printHelp(ctx);
|
|
7081
7575
|
return true;
|
|
7082
7576
|
case "/stats":
|
|
7083
7577
|
case "/time":
|
|
@@ -7091,17 +7585,7 @@ async function handleSlashCommand(input, ctx) {
|
|
|
7091
7585
|
case "/reasoning":
|
|
7092
7586
|
case "/think":
|
|
7093
7587
|
case "/thinking":
|
|
7094
|
-
|
|
7095
|
-
ctx.repl.showReasoning = !ctx.repl.showReasoning;
|
|
7096
|
-
const stateStr = ctx.repl.showReasoning ? style.green("Visible") : style.yellow("Hidden (default)");
|
|
7097
|
-
console.log(`
|
|
7098
|
-
Reasoning display: [${stateStr}]
|
|
7099
|
-
`);
|
|
7100
|
-
} else {
|
|
7101
|
-
console.log(style.dim(`
|
|
7102
|
-
Reasoning display is hidden by default.
|
|
7103
|
-
`));
|
|
7104
|
-
}
|
|
7588
|
+
await handleReasoningCommand(ctx, args[0]);
|
|
7105
7589
|
return true;
|
|
7106
7590
|
case "/login":
|
|
7107
7591
|
await handleInteractiveLogin(args[0]);
|
|
@@ -7113,8 +7597,9 @@ async function handleSlashCommand(input, ctx) {
|
|
|
7113
7597
|
new CredentialsStore().clear();
|
|
7114
7598
|
console.log(style.green("Successfully logged out. Credentials cleared."));
|
|
7115
7599
|
return true;
|
|
7600
|
+
case "/role":
|
|
7116
7601
|
case "/roles":
|
|
7117
|
-
|
|
7602
|
+
await handleRolesCommand(ctx, args[0]);
|
|
7118
7603
|
return true;
|
|
7119
7604
|
case "/agents":
|
|
7120
7605
|
printAgents(ctx);
|
|
@@ -7124,7 +7609,7 @@ async function handleSlashCommand(input, ctx) {
|
|
|
7124
7609
|
return true;
|
|
7125
7610
|
case "/skills":
|
|
7126
7611
|
case "/skill":
|
|
7127
|
-
handleSkillsCommand(ctx, args);
|
|
7612
|
+
await handleSkillsCommand(ctx, args);
|
|
7128
7613
|
return true;
|
|
7129
7614
|
case "/memories":
|
|
7130
7615
|
case "/memory":
|
|
@@ -7135,7 +7620,8 @@ async function handleSlashCommand(input, ctx) {
|
|
|
7135
7620
|
await printWorktrees(ctx);
|
|
7136
7621
|
return true;
|
|
7137
7622
|
case "/sessions":
|
|
7138
|
-
|
|
7623
|
+
case "/session":
|
|
7624
|
+
await printSessions(ctx);
|
|
7139
7625
|
return true;
|
|
7140
7626
|
case "/security":
|
|
7141
7627
|
case "/audit":
|
|
@@ -7143,9 +7629,13 @@ async function handleSlashCommand(input, ctx) {
|
|
|
7143
7629
|
case "/pentest":
|
|
7144
7630
|
await handleSecurityCommand(ctx, args);
|
|
7145
7631
|
return true;
|
|
7146
|
-
case "/
|
|
7147
|
-
case "/
|
|
7148
|
-
|
|
7632
|
+
case "/release-notes":
|
|
7633
|
+
case "/release-note":
|
|
7634
|
+
case "/releasenotes":
|
|
7635
|
+
case "/releasenote":
|
|
7636
|
+
case "/changelog":
|
|
7637
|
+
case "/whatsnew":
|
|
7638
|
+
printReleaseNotes();
|
|
7149
7639
|
return true;
|
|
7150
7640
|
case "/compact":
|
|
7151
7641
|
console.log(style.brand("\u25C6 Compacting conversation history..."));
|
|
@@ -7174,75 +7664,133 @@ async function handleSlashCommand(input, ctx) {
|
|
|
7174
7664
|
return true;
|
|
7175
7665
|
}
|
|
7176
7666
|
}
|
|
7177
|
-
function printHelp() {
|
|
7178
|
-
|
|
7179
|
-
|
|
7180
|
-
|
|
7181
|
-
const
|
|
7182
|
-
|
|
7667
|
+
async function printHelp(ctx) {
|
|
7668
|
+
if (!process.stdin.isTTY || false || !process.stdin.readable) {
|
|
7669
|
+
console.log();
|
|
7670
|
+
console.log(style.bold(" Available Slash Commands:"));
|
|
7671
|
+
for (const cmd of AVAILABLE_SLASH_COMMANDS) {
|
|
7672
|
+
const pad = cmd.name.padEnd(12, " ");
|
|
7673
|
+
console.log(` ${style.cyan(pad)} ${style.dim(cmd.description)}`);
|
|
7674
|
+
}
|
|
7675
|
+
console.log();
|
|
7676
|
+
return;
|
|
7183
7677
|
}
|
|
7184
|
-
|
|
7678
|
+
const items = AVAILABLE_SLASH_COMMANDS.map((c4) => ({
|
|
7679
|
+
id: c4.name,
|
|
7680
|
+
label: c4.name,
|
|
7681
|
+
description: c4.description
|
|
7682
|
+
}));
|
|
7683
|
+
const res = await promptInteractiveList({
|
|
7684
|
+
title: "\u26A1 Slash Commands Palette",
|
|
7685
|
+
items,
|
|
7686
|
+
mode: "select",
|
|
7687
|
+
maxVisible: 10,
|
|
7688
|
+
customKeyHints: "\u2191/\u2193: navigate \xB7 Enter: run command \xB7 Esc: close"
|
|
7689
|
+
});
|
|
7690
|
+
if (res.action === "select" && res.selectedItem && ctx) {
|
|
7691
|
+
console.log(style.dim(`
|
|
7692
|
+
Executing ${res.selectedItem.id} ...
|
|
7693
|
+
`));
|
|
7694
|
+
await handleSlashCommand(res.selectedItem.id, ctx);
|
|
7695
|
+
}
|
|
7696
|
+
}
|
|
7697
|
+
async function handleReasoningCommand(ctx, arg) {
|
|
7698
|
+
if (!ctx.repl) {
|
|
7699
|
+
console.log(style.dim(`
|
|
7700
|
+
Reasoning display is hidden by default.
|
|
7701
|
+
`));
|
|
7702
|
+
return;
|
|
7703
|
+
}
|
|
7704
|
+
if (arg) {
|
|
7705
|
+
const lower = arg.toLowerCase();
|
|
7706
|
+
if (lower === "on" || lower === "show" || lower === "true") {
|
|
7707
|
+
ctx.repl.showReasoning = true;
|
|
7708
|
+
} else if (lower === "off" || lower === "hide" || lower === "false") {
|
|
7709
|
+
ctx.repl.showReasoning = false;
|
|
7710
|
+
} else {
|
|
7711
|
+
ctx.repl.showReasoning = !ctx.repl.showReasoning;
|
|
7712
|
+
}
|
|
7713
|
+
const stateStr2 = ctx.repl.showReasoning ? style.green("Visible") : style.yellow("Hidden (default)");
|
|
7714
|
+
console.log(`
|
|
7715
|
+
Reasoning display: [${stateStr2}]
|
|
7716
|
+
`);
|
|
7717
|
+
return;
|
|
7718
|
+
}
|
|
7719
|
+
const current = ctx.repl.showReasoning;
|
|
7720
|
+
const choice = await promptChoice({
|
|
7721
|
+
message: `AI Reasoning Stream (Currently: ${current ? "Visible" : "Hidden"}):`,
|
|
7722
|
+
choices: [
|
|
7723
|
+
{ key: "h", label: "Hidden (in spinner)", value: false, isDefault: !current },
|
|
7724
|
+
{ key: "v", label: "Visible (live stream)", value: true, isDefault: current },
|
|
7725
|
+
{ key: "t", label: "Toggle state", value: !current }
|
|
7726
|
+
],
|
|
7727
|
+
defaultIndex: current ? 1 : 0
|
|
7728
|
+
});
|
|
7729
|
+
ctx.repl.showReasoning = choice;
|
|
7730
|
+
const stateStr = ctx.repl.showReasoning ? style.green("Visible") : style.yellow("Hidden (default)");
|
|
7731
|
+
console.log(`
|
|
7732
|
+
Reasoning display updated to: [${stateStr}]
|
|
7733
|
+
`);
|
|
7185
7734
|
}
|
|
7186
7735
|
async function handleModelSelection(ctx, modelArg) {
|
|
7736
|
+
const credStore = new CredentialsStore;
|
|
7187
7737
|
if (modelArg && modelArg.trim().length > 0) {
|
|
7188
7738
|
const chosen = modelArg.trim();
|
|
7189
7739
|
ctx.session.model = chosen;
|
|
7740
|
+
credStore.setDefaultModel(chosen);
|
|
7190
7741
|
console.log(style.green(`
|
|
7191
|
-
\u2713
|
|
7742
|
+
\u2713 Default model switched and saved to: ${style.bold(chosen)}
|
|
7192
7743
|
`));
|
|
7193
7744
|
return;
|
|
7194
7745
|
}
|
|
7195
|
-
const creds =
|
|
7746
|
+
const creds = credStore.load();
|
|
7196
7747
|
const baseUrl = creds?.baseUrl || process.env.GROUPY_BASE_URL || "https://api.groupy-hub.store/v1";
|
|
7197
7748
|
const apiKey = creds?.accessToken || process.env.GROUPY_API_KEY;
|
|
7198
|
-
console.log(style.dim(`
|
|
7199
|
-
Fetching models from ${baseUrl}/models ...`));
|
|
7200
7749
|
let models = [];
|
|
7201
7750
|
try {
|
|
7202
7751
|
const headers = {};
|
|
7203
7752
|
if (apiKey)
|
|
7204
7753
|
headers["Authorization"] = `Bearer ${apiKey}`;
|
|
7205
|
-
const
|
|
7206
|
-
if (
|
|
7207
|
-
const data = await
|
|
7754
|
+
const res2 = await fetch(`${baseUrl}/models`, { headers });
|
|
7755
|
+
if (res2.ok) {
|
|
7756
|
+
const data = await res2.json();
|
|
7208
7757
|
models = data.data || [];
|
|
7209
7758
|
}
|
|
7210
7759
|
} catch {}
|
|
7211
|
-
console.log();
|
|
7212
|
-
console.log(style.bold(" Available Models:"));
|
|
7213
7760
|
if (models.length === 0) {
|
|
7214
|
-
|
|
7215
|
-
|
|
7216
|
-
|
|
7217
|
-
|
|
7218
|
-
|
|
7219
|
-
|
|
7220
|
-
|
|
7221
|
-
|
|
7222
|
-
console.log(` [${style.cyan(String(i + 1))}] ${style.bold(m.id)}${owner}${tag}`);
|
|
7223
|
-
}
|
|
7224
|
-
}
|
|
7225
|
-
console.log();
|
|
7226
|
-
const promptText = models.length > 0 ? ` Select model [1-${models.length}] or type model name: ` : ` Enter new model name: `;
|
|
7227
|
-
const promptEditor = new InteractiveLineEditor({ promptSymbol: promptText });
|
|
7228
|
-
const rawAnswer = await promptEditor.readLine();
|
|
7229
|
-
const answer = rawAnswer.trim();
|
|
7230
|
-
if (!answer) {
|
|
7231
|
-
console.log(style.dim(` Model unchanged.
|
|
7232
|
-
`));
|
|
7233
|
-
return;
|
|
7761
|
+
models = [
|
|
7762
|
+
{ id: "gemini-2.5-flash", owned_by: "google" },
|
|
7763
|
+
{ id: "claude-3-5-sonnet", owned_by: "anthropic" },
|
|
7764
|
+
{ id: "claude-3-7-sonnet", owned_by: "anthropic" },
|
|
7765
|
+
{ id: "gpt-4o", owned_by: "openai" },
|
|
7766
|
+
{ id: "deepseek-r1", owned_by: "deepseek" },
|
|
7767
|
+
{ id: "qwen-2.5-coder", owned_by: "alibaba" }
|
|
7768
|
+
];
|
|
7234
7769
|
}
|
|
7235
|
-
const
|
|
7236
|
-
|
|
7237
|
-
|
|
7770
|
+
const items = models.map((m) => ({
|
|
7771
|
+
id: m.id,
|
|
7772
|
+
label: m.id,
|
|
7773
|
+
badge: m.owned_by ? `provider: ${m.owned_by}` : undefined,
|
|
7774
|
+
checked: m.id.toLowerCase() === ctx.session.model.toLowerCase()
|
|
7775
|
+
}));
|
|
7776
|
+
const activeIdx = Math.max(0, models.findIndex((m) => m.id.toLowerCase() === ctx.session.model.toLowerCase()));
|
|
7777
|
+
const res = await promptInteractiveList({
|
|
7778
|
+
title: `\uD83E\uDD16 Select Default AI Model (Current: ${ctx.session.model})`,
|
|
7779
|
+
items,
|
|
7780
|
+
mode: "select",
|
|
7781
|
+
defaultIndex: activeIdx,
|
|
7782
|
+
customKeyHints: "\u2191/\u2193: navigate \xB7 Enter: set as default model \xB7 Esc: keep current"
|
|
7783
|
+
});
|
|
7784
|
+
if (res.action === "select" && res.selectedItem) {
|
|
7785
|
+
const chosen = res.selectedItem.id;
|
|
7238
7786
|
ctx.session.model = chosen;
|
|
7787
|
+
credStore.setDefaultModel(chosen);
|
|
7239
7788
|
console.log(style.green(`
|
|
7240
|
-
\u2713
|
|
7789
|
+
\u2713 Default model switched and saved to: ${style.bold(chosen)}
|
|
7241
7790
|
`));
|
|
7242
7791
|
} else {
|
|
7243
|
-
|
|
7244
|
-
|
|
7245
|
-
\u2713 Active model switched to: ${style.bold(answer)}
|
|
7792
|
+
console.log(style.dim(`
|
|
7793
|
+
Model unchanged.
|
|
7246
7794
|
`));
|
|
7247
7795
|
}
|
|
7248
7796
|
}
|
|
@@ -7313,25 +7861,100 @@ async function printWorktrees(ctx) {
|
|
|
7313
7861
|
return;
|
|
7314
7862
|
}
|
|
7315
7863
|
const worktrees = await manager.listWorktrees(ctx.session.cwd);
|
|
7316
|
-
console.log();
|
|
7317
7864
|
if (worktrees.length === 0) {
|
|
7318
|
-
console.log(style.dim(
|
|
7319
|
-
|
|
7865
|
+
console.log(style.dim(`
|
|
7866
|
+
No Git Worktrees active or directory is not a Git repo.
|
|
7867
|
+
`));
|
|
7868
|
+
return;
|
|
7869
|
+
}
|
|
7870
|
+
if (!process.stdin.isTTY || false || !process.stdin.readable) {
|
|
7871
|
+
console.log();
|
|
7320
7872
|
console.log(style.bold(" Active Git Worktrees:"));
|
|
7321
7873
|
for (const w of worktrees) {
|
|
7322
7874
|
const typeTag = w.isMain ? style.cyan("[MAIN]") : style.yellow("[ISOLATED WORKTREE]");
|
|
7323
7875
|
console.log(` \u2022 ${typeTag} ${style.bold(w.branch)}: ${style.dim(w.path)}`);
|
|
7324
7876
|
}
|
|
7877
|
+
console.log();
|
|
7878
|
+
return;
|
|
7325
7879
|
}
|
|
7326
|
-
|
|
7880
|
+
const items = worktrees.map((w) => ({
|
|
7881
|
+
id: w.branch,
|
|
7882
|
+
label: `${w.isMain ? "[MAIN]" : "[WORKTREE]"} ${w.branch}`,
|
|
7883
|
+
description: w.path,
|
|
7884
|
+
badge: w.isMain ? "main repo" : "isolated"
|
|
7885
|
+
}));
|
|
7886
|
+
await promptInteractiveList({
|
|
7887
|
+
title: `\uD83C\uDF33 Active Git Worktrees (${worktrees.length} branches)`,
|
|
7888
|
+
items,
|
|
7889
|
+
mode: "select",
|
|
7890
|
+
customKeyHints: "\u2191/\u2193: navigate \xB7 Esc: exit"
|
|
7891
|
+
});
|
|
7327
7892
|
}
|
|
7328
|
-
function
|
|
7893
|
+
async function handleRolesCommand(ctx, roleArg) {
|
|
7329
7894
|
const spawner = ctx.spawner;
|
|
7330
|
-
|
|
7331
|
-
|
|
7895
|
+
const roleRegistry = spawner?.roleRegistry || new AgentRoleRegistry;
|
|
7896
|
+
const roles = roleRegistry.listRoles();
|
|
7897
|
+
if (roleArg) {
|
|
7898
|
+
const role = roleRegistry.getRole(roleArg.toLowerCase());
|
|
7899
|
+
if (role) {
|
|
7900
|
+
displayRoleDetails(role);
|
|
7901
|
+
return;
|
|
7902
|
+
} else {
|
|
7903
|
+
console.log(style.yellow(`
|
|
7904
|
+
Unknown role: "${roleArg}". Available roles: ${roles.map((r) => r.name).join(", ")}
|
|
7905
|
+
`));
|
|
7906
|
+
return;
|
|
7907
|
+
}
|
|
7908
|
+
}
|
|
7909
|
+
if (!process.stdin.isTTY || false || !process.stdin.readable) {
|
|
7910
|
+
printRoles(ctx);
|
|
7332
7911
|
return;
|
|
7333
7912
|
}
|
|
7334
|
-
const
|
|
7913
|
+
const items = roles.map((r) => {
|
|
7914
|
+
const tools4 = r.allowedToolNames ? r.allowedToolNames.join(", ") : "all tools";
|
|
7915
|
+
return {
|
|
7916
|
+
id: r.name,
|
|
7917
|
+
label: r.name,
|
|
7918
|
+
description: `${r.description} \xB7 [${tools4}]`,
|
|
7919
|
+
badge: r.name === "default" ? "primary" : undefined
|
|
7920
|
+
};
|
|
7921
|
+
});
|
|
7922
|
+
const res = await promptInteractiveList({
|
|
7923
|
+
title: `\uD83C\uDFAD Agent Roles & Specialized Personas (${roles.length} roles)`,
|
|
7924
|
+
items,
|
|
7925
|
+
mode: "select",
|
|
7926
|
+
customKeyHints: "\u2191/\u2193: navigate \xB7 Enter: view details \xB7 Esc: close"
|
|
7927
|
+
});
|
|
7928
|
+
if (res.action === "select" && res.selectedItem) {
|
|
7929
|
+
const role = roleRegistry.getRole(res.selectedItem.id);
|
|
7930
|
+
if (role) {
|
|
7931
|
+
displayRoleDetails(role);
|
|
7932
|
+
}
|
|
7933
|
+
}
|
|
7934
|
+
}
|
|
7935
|
+
function displayRoleDetails(role) {
|
|
7936
|
+
const boxWidth = Math.min(process.stdout.columns ?? 80, 75);
|
|
7937
|
+
const border = "\u2500".repeat(Math.max(10, boxWidth - role.name.length - 16));
|
|
7938
|
+
const tools4 = role.allowedToolNames ? role.allowedToolNames.join(", ") : "all tools";
|
|
7939
|
+
const nicks = role.nicknameCandidates ? role.nicknameCandidates.join(", ") : "none";
|
|
7940
|
+
console.log();
|
|
7941
|
+
console.log(` ${style.cyan("\u250C\u2500\u2500")} ${style.bold(`Role: ${role.name}`)} ${style.cyan(border)}`);
|
|
7942
|
+
console.log(` ${style.cyan("\u2502")} ${style.bold("Description:")} ${role.description}`);
|
|
7943
|
+
console.log(` ${style.cyan("\u2502")} ${style.bold("Allowed Tools:")} ${style.dim(`[${tools4}]`)}`);
|
|
7944
|
+
console.log(` ${style.cyan("\u2502")} ${style.bold("Nicknames:")} ${style.dim(`[${nicks}]`)}`);
|
|
7945
|
+
console.log(` ${style.cyan("\u2502")}`);
|
|
7946
|
+
console.log(` ${style.cyan("\u2502")} ${style.bold("System Prompt:")}`);
|
|
7947
|
+
for (const line of role.systemPrompt.split(`
|
|
7948
|
+
`)) {
|
|
7949
|
+
console.log(` ${style.cyan("\u2502")} ${style.dim(line)}`);
|
|
7950
|
+
}
|
|
7951
|
+
console.log(` ${style.cyan("\u2514" + "\u2500".repeat(Math.max(10, boxWidth - 4)))}
|
|
7952
|
+
`);
|
|
7953
|
+
}
|
|
7954
|
+
function printRoles(ctx) {
|
|
7955
|
+
const spawner = ctx.spawner;
|
|
7956
|
+
const roleRegistry = spawner?.roleRegistry || new AgentRoleRegistry;
|
|
7957
|
+
const roles = roleRegistry.listRoles();
|
|
7335
7958
|
console.log();
|
|
7336
7959
|
console.log(style.bold(" Configured Agent Roles:"));
|
|
7337
7960
|
for (const r of roles) {
|
|
@@ -7368,7 +7991,7 @@ function printAgents(ctx) {
|
|
|
7368
7991
|
}
|
|
7369
7992
|
console.log();
|
|
7370
7993
|
}
|
|
7371
|
-
function handleSkillsCommand(ctx, args) {
|
|
7994
|
+
async function handleSkillsCommand(ctx, args) {
|
|
7372
7995
|
const loader = ctx.skillsLoader;
|
|
7373
7996
|
if (!loader) {
|
|
7374
7997
|
console.log(style.yellow("Skills loader not active."));
|
|
@@ -7416,10 +8039,14 @@ function handleSkillsCommand(ctx, args) {
|
|
|
7416
8039
|
return;
|
|
7417
8040
|
}
|
|
7418
8041
|
const skills = loader.listSkills(ctx.session.cwd, { includeDisabled: true });
|
|
7419
|
-
console.log();
|
|
7420
8042
|
if (skills.length === 0) {
|
|
7421
|
-
console.log(style.dim(
|
|
7422
|
-
|
|
8043
|
+
console.log(style.dim(`
|
|
8044
|
+
No domain skills discovered in .agents/skills/ or ~/.groupy/skills/
|
|
8045
|
+
`));
|
|
8046
|
+
return;
|
|
8047
|
+
}
|
|
8048
|
+
if (!process.stdin.isTTY || false || !process.stdin.readable) {
|
|
8049
|
+
console.log();
|
|
7423
8050
|
console.log(style.bold(" Available Domain Skills (Built-in, Workspace, & Global):"));
|
|
7424
8051
|
for (const s of skills) {
|
|
7425
8052
|
const isEnabled = !loader.isSkillDisabled(s.name);
|
|
@@ -7429,9 +8056,43 @@ function handleSkillsCommand(ctx, args) {
|
|
|
7429
8056
|
console.log(` ${style.dim(s.description)}`);
|
|
7430
8057
|
}
|
|
7431
8058
|
console.log();
|
|
7432
|
-
|
|
8059
|
+
return;
|
|
7433
8060
|
}
|
|
7434
|
-
|
|
8061
|
+
const items = skills.map((s) => ({
|
|
8062
|
+
id: s.name,
|
|
8063
|
+
label: s.name,
|
|
8064
|
+
description: s.description,
|
|
8065
|
+
badge: s.scope,
|
|
8066
|
+
checked: !loader.isSkillDisabled(s.name)
|
|
8067
|
+
}));
|
|
8068
|
+
await promptInteractiveList({
|
|
8069
|
+
title: `\uD83E\uDDE9 Domain Skills Manager (${skills.length} available)`,
|
|
8070
|
+
items,
|
|
8071
|
+
mode: "toggle",
|
|
8072
|
+
maxVisible: 8,
|
|
8073
|
+
onToggle: (item) => {
|
|
8074
|
+
loader.toggleSkill(item.id);
|
|
8075
|
+
},
|
|
8076
|
+
onAction: (key) => {
|
|
8077
|
+
if (key === "a") {
|
|
8078
|
+
for (const s of skills)
|
|
8079
|
+
loader.enableSkill(s.name);
|
|
8080
|
+
for (const it of items)
|
|
8081
|
+
it.checked = true;
|
|
8082
|
+
} else if (key === "d") {
|
|
8083
|
+
for (const s of skills)
|
|
8084
|
+
loader.disableSkill(s.name);
|
|
8085
|
+
for (const it of items)
|
|
8086
|
+
it.checked = false;
|
|
8087
|
+
}
|
|
8088
|
+
return false;
|
|
8089
|
+
},
|
|
8090
|
+
customKeyHints: "\u2191/\u2193: navigate \xB7 Space: toggle on/off \xB7 a: all on \xB7 d: all off \xB7 Enter/Esc: done"
|
|
8091
|
+
});
|
|
8092
|
+
const activeCount = skills.filter((s) => !loader.isSkillDisabled(s.name)).length;
|
|
8093
|
+
console.log(`
|
|
8094
|
+
${style.green("\u2713")} Skills configuration updated: ${style.bold(String(activeCount))} active, ${style.dim(`${skills.length - activeCount} disabled`)}
|
|
8095
|
+
`);
|
|
7435
8096
|
}
|
|
7436
8097
|
function printMemories(ctx) {
|
|
7437
8098
|
const store2 = ctx.memoryStore;
|
|
@@ -7451,24 +8112,63 @@ function printMemories(ctx) {
|
|
|
7451
8112
|
}
|
|
7452
8113
|
console.log();
|
|
7453
8114
|
}
|
|
7454
|
-
function printSessions(ctx) {
|
|
8115
|
+
async function printSessions(ctx) {
|
|
7455
8116
|
const storage = ctx.storageManager;
|
|
7456
8117
|
if (!storage) {
|
|
7457
8118
|
console.log(style.yellow("Session persistence manager not active."));
|
|
7458
8119
|
return;
|
|
7459
8120
|
}
|
|
7460
8121
|
const threads = storage.listSessions();
|
|
7461
|
-
console.log();
|
|
7462
8122
|
if (threads.length === 0) {
|
|
7463
|
-
console.log(style.dim(
|
|
7464
|
-
|
|
8123
|
+
console.log(style.dim(`
|
|
8124
|
+
No saved sessions in SQLite database.
|
|
8125
|
+
`));
|
|
8126
|
+
return;
|
|
8127
|
+
}
|
|
8128
|
+
if (!process.stdin.isTTY || false || !process.stdin.readable) {
|
|
8129
|
+
console.log();
|
|
7465
8130
|
console.log(style.bold(" Saved Sessions in SQLite Store:"));
|
|
7466
8131
|
for (const t of threads) {
|
|
7467
8132
|
const dateStr = new Date(t.updatedAt).toLocaleString();
|
|
7468
8133
|
console.log(` \u2022 ${style.cyan(t.id)} [${style.dim(t.model)}] - ${style.dim(dateStr)} (${t.itemsCount} items)`);
|
|
7469
8134
|
}
|
|
8135
|
+
console.log();
|
|
8136
|
+
return;
|
|
8137
|
+
}
|
|
8138
|
+
const items = threads.map((t) => {
|
|
8139
|
+
const dateStr = new Date(t.updatedAt).toLocaleString();
|
|
8140
|
+
return {
|
|
8141
|
+
id: t.id,
|
|
8142
|
+
label: t.id,
|
|
8143
|
+
description: `${t.model} \xB7 ${t.itemsCount} items \xB7 ${dateStr}`
|
|
8144
|
+
};
|
|
8145
|
+
});
|
|
8146
|
+
const res = await promptInteractiveList({
|
|
8147
|
+
title: `\uD83D\uDDC4\uFE0F Saved SQLite Sessions (${threads.length} total)`,
|
|
8148
|
+
items,
|
|
8149
|
+
mode: "select",
|
|
8150
|
+
onAction: (key, item, idx) => {
|
|
8151
|
+
if (key === "d") {
|
|
8152
|
+
storage.deleteSession(item.id);
|
|
8153
|
+
items.splice(idx, 1);
|
|
8154
|
+
console.log(style.yellow(`
|
|
8155
|
+
\u2715 Deleted session ${item.id}`));
|
|
8156
|
+
}
|
|
8157
|
+
return false;
|
|
8158
|
+
},
|
|
8159
|
+
customKeyHints: "\u2191/\u2193: navigate \xB7 Enter: resume session \xB7 d: delete \xB7 Esc: exit"
|
|
8160
|
+
});
|
|
8161
|
+
if (res.action === "select" && res.selectedItem) {
|
|
8162
|
+
const session = storage.loadSession(res.selectedItem.id);
|
|
8163
|
+
if (session) {
|
|
8164
|
+
ctx.session.setHistory(session.items);
|
|
8165
|
+
if (session.thread.model)
|
|
8166
|
+
ctx.session.model = session.thread.model;
|
|
8167
|
+
console.log(style.green(`
|
|
8168
|
+
\u2713 Resumed past session: ${style.bold(res.selectedItem.id)} (${session.items.length} items)
|
|
8169
|
+
`));
|
|
8170
|
+
}
|
|
7470
8171
|
}
|
|
7471
|
-
console.log();
|
|
7472
8172
|
}
|
|
7473
8173
|
function printSessionStats(ctx) {
|
|
7474
8174
|
const uptimeMs = ctx.repl ? Date.now() - ctx.repl.sessionStartTime : 0;
|
|
@@ -7503,38 +8203,6 @@ function printSessionStats(ctx) {
|
|
|
7503
8203
|
console.log(style.bold(" \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500"));
|
|
7504
8204
|
console.log();
|
|
7505
8205
|
}
|
|
7506
|
-
async function handleAnimate(variantName) {
|
|
7507
|
-
const chosen = variantName?.toLowerCase();
|
|
7508
|
-
if (chosen && ALL_ANIMATION_VARIANTS.includes(chosen)) {
|
|
7509
|
-
console.log(`
|
|
7510
|
-
${style.brand("\u25C6")} Playing 36-frame animation variant: ${style.bold(chosen)}...
|
|
7511
|
-
`);
|
|
7512
|
-
const anim2 = new AsciiAnimation({
|
|
7513
|
-
variant: chosen,
|
|
7514
|
-
frameTickMs: 60,
|
|
7515
|
-
colorFn: (frame) => style.brand(frame)
|
|
7516
|
-
});
|
|
7517
|
-
await anim2.play(2500, { clearScreen: false });
|
|
7518
|
-
console.log();
|
|
7519
|
-
return;
|
|
7520
|
-
}
|
|
7521
|
-
console.log();
|
|
7522
|
-
console.log(style.bold(" 36-Frame ASCII Art Animation Catalog:"));
|
|
7523
|
-
for (const v of ALL_ANIMATION_VARIANTS) {
|
|
7524
|
-
console.log(` \u2022 ${style.cyan(v)} - ${style.dim(`/animate ${v}`)}`);
|
|
7525
|
-
}
|
|
7526
|
-
console.log(`
|
|
7527
|
-
${style.dim("Playing random variant for 2 seconds...")}
|
|
7528
|
-
`);
|
|
7529
|
-
const anim = new AsciiAnimation({
|
|
7530
|
-
variant: "default",
|
|
7531
|
-
frameTickMs: 60,
|
|
7532
|
-
colorFn: (frame) => style.brand(frame)
|
|
7533
|
-
});
|
|
7534
|
-
anim.pickRandomVariant();
|
|
7535
|
-
await anim.play(2000);
|
|
7536
|
-
console.log();
|
|
7537
|
-
}
|
|
7538
8206
|
async function handleSecurityCommand(ctx, args) {
|
|
7539
8207
|
const sub = (args[0] || "scan").toLowerCase();
|
|
7540
8208
|
const target = args[1] || ctx.session.cwd;
|
|
@@ -7757,184 +8425,97 @@ async function handleMcpCommand(ctx, args) {
|
|
|
7757
8425
|
`));
|
|
7758
8426
|
return;
|
|
7759
8427
|
}
|
|
7760
|
-
|
|
7761
|
-
|
|
7762
|
-
|
|
7763
|
-
// src/cli/ui/prompt.ts
|
|
7764
|
-
import readline2 from "readline";
|
|
7765
|
-
async function promptToolApproval(params) {
|
|
7766
|
-
const options = [
|
|
7767
|
-
{ key: "a", label: "Yes, and don't ask again for anything (always-approve mode)", value: "always" },
|
|
7768
|
-
{ key: "y", label: "Yes, proceed", value: "yes", isDefault: true },
|
|
7769
|
-
{ key: "n", label: "No, reject (type to add feedback)", value: "no" }
|
|
7770
|
-
];
|
|
7771
|
-
const title = params.description || `Tool Execution: ${params.toolName}`;
|
|
7772
|
-
const command = params.command || params.toolName;
|
|
7773
|
-
const BORDER = "\x1B[38;5;8m\u2502\x1B[0m";
|
|
7774
|
-
const FG = "\x1B[38;2;225;225;225m";
|
|
7775
|
-
const MUTED = "\x1B[38;2;139;139;144m";
|
|
7776
|
-
const DIM = "\x1B[38;2;108;108;108m";
|
|
7777
|
-
const RESET = "\x1B[0m";
|
|
7778
|
-
console.log();
|
|
7779
|
-
console.log(` ${BORDER} ${FG}${title}${RESET}`);
|
|
7780
|
-
console.log(` ${BORDER} ${MUTED}${command}${RESET}`);
|
|
7781
|
-
console.log(` ${BORDER}`);
|
|
7782
|
-
const renderCard = (selected) => {
|
|
7783
|
-
for (let i = 0;i < options.length; i++) {
|
|
7784
|
-
const opt = options[i];
|
|
7785
|
-
const active = i === selected;
|
|
7786
|
-
const radio = active ? `${FG}(\u25CF)${RESET}` : `${DIM}(\u25CB)${RESET}`;
|
|
7787
|
-
const num = `${FG}${i + 1}${RESET}`;
|
|
7788
|
-
const label = active ? `\x1B[1m${FG}${opt.label}${RESET}` : `${MUTED}${opt.label}${RESET}`;
|
|
7789
|
-
console.log(` ${BORDER} ${num} ${radio} ${label}`);
|
|
7790
|
-
}
|
|
7791
|
-
console.log(` ${BORDER}`);
|
|
7792
|
-
console.log(` ${FG}${selected + 1}/${options.length}${RESET}${DIM}:select \u2502 ${FG}Ctrl+o${RESET}${DIM}:yolo \u2502 ${FG}Ctrl+c${RESET}${DIM}:cancel${RESET}`);
|
|
7793
|
-
};
|
|
8428
|
+
const servers = manager.listServers();
|
|
8429
|
+
const configFiles = manager.getLoadedConfigFiles();
|
|
7794
8430
|
if (!process.stdin.isTTY || false || !process.stdin.readable) {
|
|
7795
|
-
|
|
7796
|
-
return
|
|
7797
|
-
}
|
|
7798
|
-
return new Promise((resolve23) => {
|
|
7799
|
-
let selectedIndex = 1;
|
|
7800
|
-
readline2.emitKeypressEvents(process.stdin);
|
|
7801
|
-
const wasRaw = process.stdin.isRaw;
|
|
7802
|
-
try {
|
|
7803
|
-
process.stdin.setRawMode(true);
|
|
7804
|
-
} catch {}
|
|
7805
|
-
process.stdin.resume();
|
|
7806
|
-
const render = () => {
|
|
7807
|
-
renderCard(selectedIndex);
|
|
7808
|
-
};
|
|
7809
|
-
const cleanup = (val) => {
|
|
7810
|
-
process.stdin.removeListener("keypress", onKeypress);
|
|
7811
|
-
try {
|
|
7812
|
-
process.stdin.setRawMode(wasRaw ?? false);
|
|
7813
|
-
} catch {}
|
|
7814
|
-
console.log();
|
|
7815
|
-
resolve23(val);
|
|
7816
|
-
};
|
|
7817
|
-
const onKeypress = (_str, key) => {
|
|
7818
|
-
if (!key)
|
|
7819
|
-
return;
|
|
7820
|
-
if (key.ctrl && key.name === "c") {
|
|
7821
|
-
cleanup("no");
|
|
7822
|
-
return;
|
|
7823
|
-
}
|
|
7824
|
-
if (key.ctrl && key.name === "o") {
|
|
7825
|
-
cleanup("always");
|
|
7826
|
-
return;
|
|
7827
|
-
}
|
|
7828
|
-
if (key.name === "up") {
|
|
7829
|
-
selectedIndex = (selectedIndex - 1 + options.length) % options.length;
|
|
7830
|
-
process.stdout.write(`\x1B[5A`);
|
|
7831
|
-
render();
|
|
7832
|
-
return;
|
|
7833
|
-
}
|
|
7834
|
-
if (key.name === "down") {
|
|
7835
|
-
selectedIndex = (selectedIndex + 1) % options.length;
|
|
7836
|
-
process.stdout.write(`\x1B[5A`);
|
|
7837
|
-
render();
|
|
7838
|
-
return;
|
|
7839
|
-
}
|
|
7840
|
-
if (key.name === "return" || key.name === "enter" || _str === " ") {
|
|
7841
|
-
cleanup(options[selectedIndex].value);
|
|
7842
|
-
return;
|
|
7843
|
-
}
|
|
7844
|
-
if (_str === "1") {
|
|
7845
|
-
cleanup(options[0].value);
|
|
7846
|
-
return;
|
|
7847
|
-
}
|
|
7848
|
-
if (_str === "2") {
|
|
7849
|
-
cleanup(options[1].value);
|
|
7850
|
-
return;
|
|
7851
|
-
}
|
|
7852
|
-
if (_str === "3") {
|
|
7853
|
-
cleanup(options[2].value);
|
|
7854
|
-
return;
|
|
7855
|
-
}
|
|
7856
|
-
if (_str?.toLowerCase() === "y") {
|
|
7857
|
-
cleanup("yes");
|
|
7858
|
-
return;
|
|
7859
|
-
}
|
|
7860
|
-
if (_str?.toLowerCase() === "n") {
|
|
7861
|
-
cleanup("no");
|
|
7862
|
-
return;
|
|
7863
|
-
}
|
|
7864
|
-
if (_str?.toLowerCase() === "a") {
|
|
7865
|
-
cleanup("always");
|
|
7866
|
-
return;
|
|
7867
|
-
}
|
|
7868
|
-
};
|
|
7869
|
-
process.stdin.on("keypress", onKeypress);
|
|
7870
|
-
render();
|
|
7871
|
-
});
|
|
7872
|
-
}
|
|
7873
|
-
async function promptUserQuestion(params) {
|
|
7874
|
-
const { question, options = [] } = params;
|
|
7875
|
-
const boxWidth = Math.min(process.stdout.columns ?? 80, 75);
|
|
7876
|
-
const border = "\u2500".repeat(Math.max(10, boxWidth - 20));
|
|
7877
|
-
console.log(`
|
|
7878
|
-
${style.cyan("\u250C\u2500\u2500")} ${style.bold("AI Question")} ${style.cyan(border)}`);
|
|
7879
|
-
const qLines = question.split(`
|
|
7880
|
-
`);
|
|
7881
|
-
for (const line of qLines) {
|
|
7882
|
-
console.log(` ${style.cyan("\u2502")} ${style.bold(line)}`);
|
|
7883
|
-
}
|
|
7884
|
-
if (options.length > 0) {
|
|
7885
|
-
console.log(` ${style.cyan("\u2502")}`);
|
|
7886
|
-
options.forEach((opt, idx) => {
|
|
7887
|
-
const numTag = style.cyan(`[${idx + 1}]`);
|
|
7888
|
-
const isRec = opt.includes("(Recommended)") || opt.includes("(recommended)");
|
|
7889
|
-
const optText = isRec ? opt.replace(/\(Recommended\)/i, style.green("(Recommended)")) : opt;
|
|
7890
|
-
console.log(` ${style.cyan("\u2502")} ${numTag} ${optText}`);
|
|
7891
|
-
});
|
|
8431
|
+
CliFormatter.printMcpServers(servers, configFiles);
|
|
8432
|
+
return;
|
|
7892
8433
|
}
|
|
7893
|
-
|
|
7894
|
-
|
|
7895
|
-
|
|
7896
|
-
return options[0] || "yes";
|
|
8434
|
+
if (servers.length === 0) {
|
|
8435
|
+
CliFormatter.printMcpServers(servers, configFiles);
|
|
8436
|
+
return;
|
|
7897
8437
|
}
|
|
7898
|
-
|
|
7899
|
-
|
|
7900
|
-
|
|
7901
|
-
|
|
7902
|
-
|
|
7903
|
-
|
|
7904
|
-
|
|
7905
|
-
|
|
7906
|
-
|
|
7907
|
-
|
|
7908
|
-
|
|
7909
|
-
|
|
7910
|
-
|
|
7911
|
-
|
|
7912
|
-
|
|
7913
|
-
const
|
|
7914
|
-
|
|
7915
|
-
`));
|
|
7916
|
-
|
|
7917
|
-
|
|
7918
|
-
}
|
|
7919
|
-
if (options.length === 2) {
|
|
7920
|
-
if (/^(y|yes)$/i.test(trimmed)) {
|
|
7921
|
-
console.log(style.green(` \u2714 Selected: ${options[0]}
|
|
7922
|
-
`));
|
|
7923
|
-
resolve23(options[0]);
|
|
7924
|
-
return;
|
|
7925
|
-
}
|
|
7926
|
-
if (/^(n|no)$/i.test(trimmed)) {
|
|
7927
|
-
console.log(style.green(` \u2714 Selected: ${options[1]}
|
|
7928
|
-
`));
|
|
7929
|
-
resolve23(options[1]);
|
|
7930
|
-
return;
|
|
8438
|
+
const items = servers.map((s) => ({
|
|
8439
|
+
id: s.name,
|
|
8440
|
+
label: s.name,
|
|
8441
|
+
badge: s.connected ? "Connected" : "Disconnected",
|
|
8442
|
+
description: `${s.toolsCount} tools \xB7 ${s.resourcesCount} resources`,
|
|
8443
|
+
checked: s.connected
|
|
8444
|
+
}));
|
|
8445
|
+
const res = await promptInteractiveList({
|
|
8446
|
+
title: `\uD83D\uDD0C Connected MCP Servers (${servers.length} total)`,
|
|
8447
|
+
items,
|
|
8448
|
+
mode: "select",
|
|
8449
|
+
onAction: async (key, item) => {
|
|
8450
|
+
if (key === "t") {
|
|
8451
|
+
console.log(style.dim(`
|
|
8452
|
+
Pinging '${item.id}'...`));
|
|
8453
|
+
const testRes = await manager.pingServer(item.id);
|
|
8454
|
+
if (testRes.success) {
|
|
8455
|
+
console.log(style.green(` \u2713 PONG from '${item.id}' in ${testRes.durationMs}ms`));
|
|
8456
|
+
} else {
|
|
8457
|
+
console.log(style.red(` \u2715 Ping failed: ${testRes.error}`));
|
|
7931
8458
|
}
|
|
7932
8459
|
}
|
|
7933
|
-
|
|
7934
|
-
|
|
7935
|
-
|
|
7936
|
-
});
|
|
8460
|
+
return false;
|
|
8461
|
+
},
|
|
8462
|
+
customKeyHints: "\u2191/\u2193: navigate \xB7 Enter: inspect tools \xB7 t: ping test \xB7 Esc: exit"
|
|
7937
8463
|
});
|
|
8464
|
+
if (res.action === "select" && res.selectedItem) {
|
|
8465
|
+
const client = manager.getClient(res.selectedItem.id);
|
|
8466
|
+
if (client) {
|
|
8467
|
+
CliFormatter.printMcpTools(res.selectedItem.id, client.getTools());
|
|
8468
|
+
}
|
|
8469
|
+
}
|
|
8470
|
+
}
|
|
8471
|
+
function printReleaseNotes() {
|
|
8472
|
+
const version = getCliVersion({ prefix: true });
|
|
8473
|
+
const ROSE2 = "\x1B[38;2;205;105;74m";
|
|
8474
|
+
const WHITE2 = "\x1B[38;2;255;255;255m";
|
|
8475
|
+
const GRAY2 = "\x1B[38;2;148;148;148m";
|
|
8476
|
+
const BOLD2 = "\x1B[1m";
|
|
8477
|
+
const RESET2 = "\x1B[0m";
|
|
8478
|
+
function stripAnsi2(str) {
|
|
8479
|
+
return str.replace(/\x1b\[[0-9;]*m/g, "");
|
|
8480
|
+
}
|
|
8481
|
+
function padLine(str, width) {
|
|
8482
|
+
const vis = stripAnsi2(str);
|
|
8483
|
+
return str + " ".repeat(Math.max(0, width - vis.length));
|
|
8484
|
+
}
|
|
8485
|
+
const totalInnerWidth = 74;
|
|
8486
|
+
const contentLines = [
|
|
8487
|
+
"",
|
|
8488
|
+
" " + BOLD2 + WHITE2 + "\uD83D\uDE80 What's New in " + version + " (Latest)" + RESET2,
|
|
8489
|
+
" " + ROSE2 + "\u2022" + RESET2 + " " + WHITE2 + BOLD2 + "Persistent Default AI Model" + RESET2 + ": Switch via " + ROSE2 + "/model" + RESET2 + " and save",
|
|
8490
|
+
" preference across sessions in ~/.groupy/credentials.json.",
|
|
8491
|
+
" " + ROSE2 + "\u2022" + RESET2 + " " + WHITE2 + BOLD2 + "Real-time Git Branch Detection" + RESET2 + ": Header displays active branch",
|
|
8492
|
+
" (\uE0A0 main) alongside user subscription tier (Groupy Pro / Max).",
|
|
8493
|
+
" " + ROSE2 + "\u2022" + RESET2 + " " + WHITE2 + BOLD2 + "Claude Code Terminal UI Parity" + RESET2 + ": Authentic pixel emblem, fieldset",
|
|
8494
|
+
" header box, user prompt badge pills, and streaming responses.",
|
|
8495
|
+
" " + ROSE2 + "\u2022" + RESET2 + " " + WHITE2 + BOLD2 + "Autonomous Sub-Agents & Roles" + RESET2 + ": Multi-agent spawner with roles",
|
|
8496
|
+
" (Pikaa, Heca, Bankli, Moli) and cryptographic action provenance.",
|
|
8497
|
+
" " + ROSE2 + "\u2022" + RESET2 + " " + WHITE2 + BOLD2 + "Model Context Protocol (MCP)" + RESET2 + ": Connect stdio & SSE servers with",
|
|
8498
|
+
" multi-config auto-discovery, tool hot-reloads, and ping tests.",
|
|
8499
|
+
" " + ROSE2 + "\u2022" + RESET2 + " " + WHITE2 + BOLD2 + "Isolated Git Worktrees" + RESET2 + ": Run risky tasks in isolated worktree",
|
|
8500
|
+
" branches without dirtying your main workspace (/worktrees).",
|
|
8501
|
+
" " + ROSE2 + "\u2022" + RESET2 + " " + WHITE2 + BOLD2 + "Strix-Inspired Security Auditor" + RESET2 + ": Automated scanner for exposed",
|
|
8502
|
+
" secrets, eval(), and SQL injection vulnerabilities (/security).",
|
|
8503
|
+
"",
|
|
8504
|
+
" " + BOLD2 + WHITE2 + "\uD83D\uDCE6 Previous Highlights (v0.3.0 - v0.3.1)" + RESET2,
|
|
8505
|
+
" " + ROSE2 + "\u2022" + RESET2 + " " + WHITE2 + "Unified CI/CD Pipeline" + RESET2 + ": Single automated release packager on merge.",
|
|
8506
|
+
" " + ROSE2 + "\u2022" + RESET2 + " " + WHITE2 + "Interactive Question Flow" + RESET2 + ": Selectable multiple-choice dialogs.",
|
|
8507
|
+
" " + ROSE2 + "\u2022" + RESET2 + " " + WHITE2 + "Persistent Memory Store" + RESET2 + ": Learned user preferences in markdown.",
|
|
8508
|
+
"",
|
|
8509
|
+
" " + GRAY2 + "Tip: Type " + ROSE2 + "/help" + GRAY2 + " to view all available commands." + RESET2
|
|
8510
|
+
];
|
|
8511
|
+
const topDashes = Math.max(2, totalInnerWidth - (15 + version.length + 14));
|
|
8512
|
+
console.log("");
|
|
8513
|
+
console.log(" " + ROSE2 + "\u250C\u2500 " + ROSE2 + BOLD2 + "Groupy Code Release Notes" + RESET2 + " " + GRAY2 + version + RESET2 + " " + ROSE2 + "\u2500".repeat(topDashes) + "\u2510" + RESET2);
|
|
8514
|
+
for (const line of contentLines) {
|
|
8515
|
+
console.log(" " + ROSE2 + "\u2502" + RESET2 + padLine(line, totalInnerWidth) + ROSE2 + "\u2502" + RESET2);
|
|
8516
|
+
}
|
|
8517
|
+
console.log(" " + ROSE2 + "\u2514" + "\u2500".repeat(totalInnerWidth) + "\u2518" + RESET2);
|
|
8518
|
+
console.log("");
|
|
7938
8519
|
}
|
|
7939
8520
|
|
|
7940
8521
|
// src/cli/ui/markdown.ts
|
|
@@ -8207,9 +8788,9 @@ class MarkdownHighlighter {
|
|
|
8207
8788
|
}
|
|
8208
8789
|
|
|
8209
8790
|
// src/cli/update-checker.ts
|
|
8210
|
-
import { existsSync as
|
|
8211
|
-
import { homedir as
|
|
8212
|
-
import { join as
|
|
8791
|
+
import { existsSync as existsSync19, mkdirSync as mkdirSync10, readFileSync as readFileSync14, writeFileSync as writeFileSync7 } from "fs";
|
|
8792
|
+
import { homedir as homedir9 } from "os";
|
|
8793
|
+
import { join as join10 } from "path";
|
|
8213
8794
|
var CHECK_INTERVAL_MS = 12 * 60 * 60 * 1000;
|
|
8214
8795
|
function parseSemver(v) {
|
|
8215
8796
|
const clean = v.replace(/^v/, "").trim();
|
|
@@ -8230,8 +8811,8 @@ function isNewerVersion(current, remote) {
|
|
|
8230
8811
|
return remPatch > curPatch;
|
|
8231
8812
|
}
|
|
8232
8813
|
function getUpdateCachePath() {
|
|
8233
|
-
const baseDir = process.env.PIKAA_HOME || process.env.GROUPY_HOME ||
|
|
8234
|
-
return
|
|
8814
|
+
const baseDir = process.env.PIKAA_HOME || process.env.GROUPY_HOME || join10(homedir9(), ".pikaa");
|
|
8815
|
+
return join10(baseDir, "update-cache.json");
|
|
8235
8816
|
}
|
|
8236
8817
|
async function fetchLatestNpmVersion(packageName, timeoutMs = 1500) {
|
|
8237
8818
|
const url = `https://registry.npmjs.org/${encodeURIComponent(packageName)}/latest`;
|
|
@@ -8260,13 +8841,13 @@ async function checkForUpdates(options = {}) {
|
|
|
8260
8841
|
}
|
|
8261
8842
|
const meta = getPackageMetadata();
|
|
8262
8843
|
const currentVersion = options.currentVersion || meta.version;
|
|
8263
|
-
const packageName = options.packageName ||
|
|
8844
|
+
const packageName = options.packageName || "@pikaa-ai/pikaa";
|
|
8264
8845
|
const cachePath = options.cachePath || getUpdateCachePath();
|
|
8265
8846
|
const now = Date.now();
|
|
8266
8847
|
let cached = null;
|
|
8267
|
-
if (!options.force &&
|
|
8848
|
+
if (!options.force && existsSync19(cachePath)) {
|
|
8268
8849
|
try {
|
|
8269
|
-
const raw = JSON.parse(
|
|
8850
|
+
const raw = JSON.parse(readFileSync14(cachePath, "utf8"));
|
|
8270
8851
|
if (raw && typeof raw.lastChecked === "number" && typeof raw.latestVersion === "string") {
|
|
8271
8852
|
cached = raw;
|
|
8272
8853
|
if (now - cached.lastChecked < CHECK_INTERVAL_MS) {
|
|
@@ -8294,8 +8875,8 @@ async function checkForUpdates(options = {}) {
|
|
|
8294
8875
|
return null;
|
|
8295
8876
|
}
|
|
8296
8877
|
try {
|
|
8297
|
-
const parentDir =
|
|
8298
|
-
if (!
|
|
8878
|
+
const parentDir = join10(cachePath, "..");
|
|
8879
|
+
if (!existsSync19(parentDir)) {
|
|
8299
8880
|
mkdirSync10(parentDir, { recursive: true });
|
|
8300
8881
|
}
|
|
8301
8882
|
const cacheData = {
|
|
@@ -8364,7 +8945,7 @@ class CliRepl {
|
|
|
8364
8945
|
this.turnToolCalls = [];
|
|
8365
8946
|
this.turnFilesModified.clear();
|
|
8366
8947
|
this.turnCharsOut = 0;
|
|
8367
|
-
this.spinner.start("Thinking...");
|
|
8948
|
+
this.spinner.start("Thinking...", this.turnStartTime);
|
|
8368
8949
|
break;
|
|
8369
8950
|
case "ReasoningDelta":
|
|
8370
8951
|
case "AgentReasoningDelta":
|
|
@@ -8408,20 +8989,17 @@ class CliRepl {
|
|
|
8408
8989
|
`));
|
|
8409
8990
|
this.reasoningStarted = false;
|
|
8410
8991
|
}
|
|
8411
|
-
this.spinner.stop();
|
|
8412
8992
|
this.turnToolCalls.push(msg.toolName);
|
|
8413
8993
|
this.activeToolArgs = msg.arguments || {};
|
|
8414
8994
|
if ((msg.toolName === "apply_patch" || msg.toolName === "write_file") && msg.arguments && typeof msg.arguments.path === "string") {
|
|
8415
8995
|
this.turnFilesModified.add(msg.arguments.path);
|
|
8416
8996
|
}
|
|
8417
|
-
|
|
8418
|
-
formatTaskStepStart(this.turnToolCalls.length, msg.toolName, msg.arguments);
|
|
8419
|
-
this.spinner.start(`Executing [${this.turnToolCalls.length}] ${msg.toolName}...`);
|
|
8997
|
+
this.spinner.start(`Executing [${this.turnToolCalls.length}] ${msg.toolName}...`, this.turnStartTime);
|
|
8420
8998
|
break;
|
|
8421
8999
|
case "ToolCallFinished":
|
|
8422
9000
|
this.spinner.stop();
|
|
8423
9001
|
formatTaskStepFinish(this.turnToolCalls.length, msg.toolName, this.activeToolArgs, msg.output, msg.isError);
|
|
8424
|
-
this.spinner.start("Thinking deeply...");
|
|
9002
|
+
this.spinner.start("Thinking deeply...", this.turnStartTime);
|
|
8425
9003
|
break;
|
|
8426
9004
|
case "InteractiveApprovalRequired":
|
|
8427
9005
|
case "ApprovalRequired":
|
|
@@ -8435,7 +9013,7 @@ class CliRepl {
|
|
|
8435
9013
|
case "PlanUpdated":
|
|
8436
9014
|
this.spinner.stop();
|
|
8437
9015
|
formatTaskProgressPlan(msg.plan, msg.explanation);
|
|
8438
|
-
this.spinner.start("Executing next step...");
|
|
9016
|
+
this.spinner.start("Executing next step...", this.turnStartTime);
|
|
8439
9017
|
break;
|
|
8440
9018
|
case "TurnCompleted":
|
|
8441
9019
|
if (this.reasoningStarted) {
|
|
@@ -8471,9 +9049,9 @@ class CliRepl {
|
|
|
8471
9049
|
filesModified: Array.from(this.turnFilesModified)
|
|
8472
9050
|
});
|
|
8473
9051
|
if (this.turnDoneResolver) {
|
|
8474
|
-
const
|
|
9052
|
+
const resolve22 = this.turnDoneResolver;
|
|
8475
9053
|
this.turnDoneResolver = undefined;
|
|
8476
|
-
|
|
9054
|
+
resolve22();
|
|
8477
9055
|
}
|
|
8478
9056
|
break;
|
|
8479
9057
|
case "Error":
|
|
@@ -8489,9 +9067,9 @@ class CliRepl {
|
|
|
8489
9067
|
console.error(style.red(`Error: ${msg.message}
|
|
8490
9068
|
`));
|
|
8491
9069
|
if (this.turnDoneResolver) {
|
|
8492
|
-
const
|
|
9070
|
+
const resolve22 = this.turnDoneResolver;
|
|
8493
9071
|
this.turnDoneResolver = undefined;
|
|
8494
|
-
|
|
9072
|
+
resolve22();
|
|
8495
9073
|
}
|
|
8496
9074
|
break;
|
|
8497
9075
|
}
|
|
@@ -8503,10 +9081,10 @@ class CliRepl {
|
|
|
8503
9081
|
if (decision === "always") {
|
|
8504
9082
|
this.session.execPolicy.addRule(/.*/, "allow", "User allowed all actions for this session");
|
|
8505
9083
|
this.session.resolveApproval(msg.approvalId, true);
|
|
8506
|
-
this.spinner.start(`Executing approved action (auto-approved for session)
|
|
9084
|
+
this.spinner.start(`Executing approved action (auto-approved for session)...`, this.turnStartTime);
|
|
8507
9085
|
} else if (decision === "yes") {
|
|
8508
9086
|
this.session.resolveApproval(msg.approvalId, true);
|
|
8509
|
-
this.spinner.start(`Executing approved action
|
|
9087
|
+
this.spinner.start(`Executing approved action...`, this.turnStartTime);
|
|
8510
9088
|
} else {
|
|
8511
9089
|
this.session.resolveApproval(msg.approvalId, false);
|
|
8512
9090
|
console.log(style.dim(" Action rejected by user."));
|
|
@@ -8522,19 +9100,22 @@ class CliRepl {
|
|
|
8522
9100
|
options: msg.options
|
|
8523
9101
|
});
|
|
8524
9102
|
this.session.resolveUserQuestion(msg.questionId, answer);
|
|
8525
|
-
this.spinner.start(`Processing response and continuing
|
|
9103
|
+
this.spinner.start(`Processing response and continuing...`, this.turnStartTime);
|
|
8526
9104
|
} catch {
|
|
8527
9105
|
this.session.resolveUserQuestion(msg.questionId, "");
|
|
8528
9106
|
}
|
|
8529
9107
|
}
|
|
8530
9108
|
async start() {
|
|
8531
|
-
const
|
|
8532
|
-
const
|
|
9109
|
+
const credStore = new CredentialsStore;
|
|
9110
|
+
const userInfo = credStore.getUser();
|
|
9111
|
+
const accountUser = userInfo?.username || (userInfo?.email ? userInfo.email.split("@")[0] : undefined);
|
|
9112
|
+
const userPlan = userInfo?.plan;
|
|
8533
9113
|
await renderAnimatedGroupyBanner({
|
|
8534
9114
|
user: accountUser,
|
|
8535
9115
|
role: this.role,
|
|
8536
9116
|
model: this.session.model,
|
|
8537
|
-
cwd: this.session.cwd
|
|
9117
|
+
cwd: this.session.cwd,
|
|
9118
|
+
plan: userPlan
|
|
8538
9119
|
});
|
|
8539
9120
|
checkForUpdates().then((update) => {
|
|
8540
9121
|
if (update?.updateAvailable) {
|
|
@@ -8554,9 +9135,9 @@ class CliRepl {
|
|
|
8554
9135
|
`));
|
|
8555
9136
|
this.isProcessing = false;
|
|
8556
9137
|
if (this.turnDoneResolver) {
|
|
8557
|
-
const
|
|
9138
|
+
const resolve22 = this.turnDoneResolver;
|
|
8558
9139
|
this.turnDoneResolver = undefined;
|
|
8559
|
-
|
|
9140
|
+
resolve22();
|
|
8560
9141
|
}
|
|
8561
9142
|
}
|
|
8562
9143
|
}
|
|
@@ -8588,8 +9169,8 @@ class CliRepl {
|
|
|
8588
9169
|
}
|
|
8589
9170
|
}
|
|
8590
9171
|
try {
|
|
8591
|
-
const turnPromise = new Promise((
|
|
8592
|
-
this.turnDoneResolver =
|
|
9172
|
+
const turnPromise = new Promise((resolve22) => {
|
|
9173
|
+
this.turnDoneResolver = resolve22;
|
|
8593
9174
|
});
|
|
8594
9175
|
await this.session.submit({
|
|
8595
9176
|
type: "TurnInput",
|
|
@@ -8623,7 +9204,7 @@ async function main() {
|
|
|
8623
9204
|
const args = process.argv.slice(2);
|
|
8624
9205
|
const credStore = new CredentialsStore;
|
|
8625
9206
|
const savedCreds = credStore.load();
|
|
8626
|
-
let model = process.env.GROUPY_MODEL || process.env.OPENAI_MODEL || "groupy";
|
|
9207
|
+
let model = process.env.GROUPY_MODEL || process.env.OPENAI_MODEL || savedCreds?.defaultModel || savedCreds?.model || "groupy";
|
|
8627
9208
|
let baseUrl = process.env.GROUPY_BASE_URL || process.env.OPENAI_BASE_URL || savedCreds?.baseUrl;
|
|
8628
9209
|
let apiKey = process.env.GROUPY_API_KEY || process.env.OPENAI_API_KEY || savedCreds?.accessToken;
|
|
8629
9210
|
let explicitBaseUrl;
|
|
@@ -8677,7 +9258,7 @@ async function main() {
|
|
|
8677
9258
|
explicitApiKey = args[++i];
|
|
8678
9259
|
apiKey = explicitApiKey || apiKey;
|
|
8679
9260
|
} else if (arg === "--cwd" || arg === "-C") {
|
|
8680
|
-
cwd =
|
|
9261
|
+
cwd = resolve22(args[++i] || cwd);
|
|
8681
9262
|
} else if (arg === "--role" || arg === "-r") {
|
|
8682
9263
|
role = args[++i] || role;
|
|
8683
9264
|
} else if (arg === "--mcp") {
|
|
@@ -8703,11 +9284,11 @@ async function main() {
|
|
|
8703
9284
|
const mcpManager = new McpManager;
|
|
8704
9285
|
const candidateConfigs = [
|
|
8705
9286
|
mcpConfigFile,
|
|
8706
|
-
|
|
8707
|
-
|
|
9287
|
+
resolve22(cwd, ".mcp.json"),
|
|
9288
|
+
resolve22(cwd, "mcp_config.json")
|
|
8708
9289
|
].filter(Boolean);
|
|
8709
9290
|
for (const cfg of candidateConfigs) {
|
|
8710
|
-
if (
|
|
9291
|
+
if (existsSync20(cfg)) {
|
|
8711
9292
|
try {
|
|
8712
9293
|
await mcpManager.loadConfigFile(cfg);
|
|
8713
9294
|
mcpManager.registerToolsIntoRouter(tools4);
|