research-os 1.1.0__tar.gz
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.
- research_os-1.1.0/.github/ISSUE_TEMPLATE/bug_report.md +28 -0
- research_os-1.1.0/.github/ISSUE_TEMPLATE/feature_request.md +22 -0
- research_os-1.1.0/.github/workflows/publish.yml +60 -0
- research_os-1.1.0/.github/workflows/test.yml +123 -0
- research_os-1.1.0/.gitignore +82 -0
- research_os-1.1.0/.pre-commit-config.yaml +12 -0
- research_os-1.1.0/CHANGELOG.md +502 -0
- research_os-1.1.0/CITATION.cff +9 -0
- research_os-1.1.0/CODEOWNERS +1 -0
- research_os-1.1.0/CONTRIBUTING.md +129 -0
- research_os-1.1.0/LICENSE +21 -0
- research_os-1.1.0/PKG-INFO +310 -0
- research_os-1.1.0/README.md +219 -0
- research_os-1.1.0/assets/logo.svg +70 -0
- research_os-1.1.0/assets/logo.txt +6 -0
- research_os-1.1.0/docs/AI_GUIDE.md +325 -0
- research_os-1.1.0/docs/FAQ.md +268 -0
- research_os-1.1.0/docs/PROTOCOLS.md +349 -0
- research_os-1.1.0/docs/PROTOCOL_DOCTRINE.md +169 -0
- research_os-1.1.0/docs/README.md +29 -0
- research_os-1.1.0/docs/RESEARCHER_GUIDE.md +625 -0
- research_os-1.1.0/docs/SETUP.md +343 -0
- research_os-1.1.0/docs/SHARING.md +73 -0
- research_os-1.1.0/docs/START.md +388 -0
- research_os-1.1.0/docs/TOOLS.md +298 -0
- research_os-1.1.0/docs/USE_CASES.md +228 -0
- research_os-1.1.0/pyproject.toml +109 -0
- research_os-1.1.0/requirements.txt +10 -0
- research_os-1.1.0/scripts/preflight.py +462 -0
- research_os-1.1.0/src/research_os/__init__.py +8 -0
- research_os-1.1.0/src/research_os/cli.py +640 -0
- research_os-1.1.0/src/research_os/collab.py +187 -0
- research_os-1.1.0/src/research_os/config.py +38 -0
- research_os-1.1.0/src/research_os/errors.py +93 -0
- research_os-1.1.0/src/research_os/inputs/__init__.py +0 -0
- research_os-1.1.0/src/research_os/inputs/papers.py +272 -0
- research_os-1.1.0/src/research_os/inputs/paste.py +220 -0
- research_os-1.1.0/src/research_os/logo.py +108 -0
- research_os-1.1.0/src/research_os/project_ops.py +1970 -0
- research_os-1.1.0/src/research_os/protocols/_router_index.yaml +1611 -0
- research_os-1.1.0/src/research_os/protocols/audit/audit_and_validation.yaml +127 -0
- research_os-1.1.0/src/research_os/protocols/audit/pre_submission_checklist.yaml +337 -0
- research_os-1.1.0/src/research_os/protocols/audit/provenance_completeness.yaml +241 -0
- research_os-1.1.0/src/research_os/protocols/domain/domain_analysis.yaml +84 -0
- research_os-1.1.0/src/research_os/protocols/domain/research_design.yaml +60 -0
- research_os-1.1.0/src/research_os/protocols/guidance/analysis_plan.yaml +325 -0
- research_os-1.1.0/src/research_os/protocols/guidance/autopilot.yaml +112 -0
- research_os-1.1.0/src/research_os/protocols/guidance/casual_exploration.yaml +95 -0
- research_os-1.1.0/src/research_os/protocols/guidance/chat_handoff.yaml +96 -0
- research_os-1.1.0/src/research_os/protocols/guidance/code_review.yaml +174 -0
- research_os-1.1.0/src/research_os/protocols/guidance/collaboration_handoff.yaml +128 -0
- research_os-1.1.0/src/research_os/protocols/guidance/constructive_disagreement.yaml +238 -0
- research_os-1.1.0/src/research_os/protocols/guidance/dead_end_routing.yaml +46 -0
- research_os-1.1.0/src/research_os/protocols/guidance/glossary_update.yaml +38 -0
- research_os-1.1.0/src/research_os/protocols/guidance/hypothesis_tracking.yaml +38 -0
- research_os-1.1.0/src/research_os/protocols/guidance/iterative_planning.yaml +80 -0
- research_os-1.1.0/src/research_os/protocols/guidance/mid_pipeline_entry.yaml +237 -0
- research_os-1.1.0/src/research_os/protocols/guidance/peer_review_response.yaml +169 -0
- research_os-1.1.0/src/research_os/protocols/guidance/project_startup.yaml +88 -0
- research_os-1.1.0/src/research_os/protocols/guidance/quick_paper_review.yaml +108 -0
- research_os-1.1.0/src/research_os/protocols/guidance/revise_and_resubmit.yaml +280 -0
- research_os-1.1.0/src/research_os/protocols/guidance/scope_clarification.yaml +181 -0
- research_os-1.1.0/src/research_os/protocols/guidance/session_boot.yaml +159 -0
- research_os-1.1.0/src/research_os/protocols/guidance/session_resume.yaml +77 -0
- research_os-1.1.0/src/research_os/protocols/literature/comparative_paper_review.yaml +260 -0
- research_os-1.1.0/src/research_os/protocols/literature/evidence_synthesis.yaml +44 -0
- research_os-1.1.0/src/research_os/protocols/literature/literature_search.yaml +144 -0
- research_os-1.1.0/src/research_os/protocols/literature/systematic_review.yaml +85 -0
- research_os-1.1.0/src/research_os/protocols/methodology/ablation_study.yaml +91 -0
- research_os-1.1.0/src/research_os/protocols/methodology/bayesian_analysis.yaml +175 -0
- research_os-1.1.0/src/research_os/protocols/methodology/causal_inference_deep.yaml +139 -0
- research_os-1.1.0/src/research_os/protocols/methodology/clinical_trials.yaml +133 -0
- research_os-1.1.0/src/research_os/protocols/methodology/cox_ph_diagnostics.yaml +222 -0
- research_os-1.1.0/src/research_os/protocols/methodology/data_ethics_review.yaml +270 -0
- research_os-1.1.0/src/research_os/protocols/methodology/data_quality_audit.yaml +249 -0
- research_os-1.1.0/src/research_os/protocols/methodology/deep_domain_research.yaml +257 -0
- research_os-1.1.0/src/research_os/protocols/methodology/evaluation_design.yaml +260 -0
- research_os-1.1.0/src/research_os/protocols/methodology/exploratory_data_analysis.yaml +252 -0
- research_os-1.1.0/src/research_os/protocols/methodology/hyperparameter_search_design.yaml +266 -0
- research_os-1.1.0/src/research_os/protocols/methodology/machine_learning.yaml +160 -0
- research_os-1.1.0/src/research_os/protocols/methodology/meta_analysis.yaml +107 -0
- research_os-1.1.0/src/research_os/protocols/methodology/method_comparison.yaml +249 -0
- research_os-1.1.0/src/research_os/protocols/methodology/methodological_consultation.yaml +213 -0
- research_os-1.1.0/src/research_os/protocols/methodology/methodology_selection.yaml +211 -0
- research_os-1.1.0/src/research_os/protocols/methodology/missing_data_strategy.yaml +302 -0
- research_os-1.1.0/src/research_os/protocols/methodology/mixed_methods.yaml +102 -0
- research_os-1.1.0/src/research_os/protocols/methodology/pilot_study.yaml +100 -0
- research_os-1.1.0/src/research_os/protocols/methodology/power_analysis.yaml +261 -0
- research_os-1.1.0/src/research_os/protocols/methodology/preregistration.yaml +130 -0
- research_os-1.1.0/src/research_os/protocols/methodology/qualitative_quality_audit.yaml +257 -0
- research_os-1.1.0/src/research_os/protocols/methodology/qualitative_research.yaml +110 -0
- research_os-1.1.0/src/research_os/protocols/methodology/replication_study.yaml +107 -0
- research_os-1.1.0/src/research_os/protocols/methodology/reproduction_attempt.yaml +289 -0
- research_os-1.1.0/src/research_os/protocols/methodology/simulation_studies.yaml +102 -0
- research_os-1.1.0/src/research_os/protocols/methodology/survey_psychometrics.yaml +109 -0
- research_os-1.1.0/src/research_os/protocols/methodology/timeseries_analysis.yaml +181 -0
- research_os-1.1.0/src/research_os/protocols/methodology/tool_discovery.yaml +59 -0
- research_os-1.1.0/src/research_os/protocols/reproducibility/reproducibility.yaml +93 -0
- research_os-1.1.0/src/research_os/protocols/synthesis/synthesis_abstract.yaml +83 -0
- research_os-1.1.0/src/research_os/protocols/synthesis/synthesis_cover_letter.yaml +231 -0
- research_os-1.1.0/src/research_os/protocols/synthesis/synthesis_dashboard.yaml +249 -0
- research_os-1.1.0/src/research_os/protocols/synthesis/synthesis_from_inputs.yaml +242 -0
- research_os-1.1.0/src/research_os/protocols/synthesis/synthesis_grant.yaml +152 -0
- research_os-1.1.0/src/research_os/protocols/synthesis/synthesis_handout.yaml +247 -0
- research_os-1.1.0/src/research_os/protocols/synthesis/synthesis_lay_summary.yaml +245 -0
- research_os-1.1.0/src/research_os/protocols/synthesis/synthesis_null_findings.yaml +136 -0
- research_os-1.1.0/src/research_os/protocols/synthesis/synthesis_paper.yaml +267 -0
- research_os-1.1.0/src/research_os/protocols/synthesis/synthesis_poster.yaml +148 -0
- research_os-1.1.0/src/research_os/protocols/synthesis/synthesis_progress_update.yaml +225 -0
- research_os-1.1.0/src/research_os/protocols/synthesis/synthesis_report.yaml +94 -0
- research_os-1.1.0/src/research_os/protocols/synthesis/synthesis_slides.yaml +302 -0
- research_os-1.1.0/src/research_os/protocols/synthesis/synthesis_title_workshop.yaml +238 -0
- research_os-1.1.0/src/research_os/protocols/visualization/color_accessibility_audit.yaml +245 -0
- research_os-1.1.0/src/research_os/protocols/visualization/figure_critique.yaml +207 -0
- research_os-1.1.0/src/research_os/protocols/visualization/figure_guidelines.yaml +203 -0
- research_os-1.1.0/src/research_os/protocols/visualization/figure_narrative_arc.yaml +257 -0
- research_os-1.1.0/src/research_os/protocols/visualization/multi_panel_composition.yaml +240 -0
- research_os-1.1.0/src/research_os/protocols/visualization/visualization_workflow.yaml +248 -0
- research_os-1.1.0/src/research_os/protocols/writing/writing_analysis_log.yaml +40 -0
- research_os-1.1.0/src/research_os/protocols/writing/writing_citations.yaml +36 -0
- research_os-1.1.0/src/research_os/protocols/writing/writing_conclusions.yaml +51 -0
- research_os-1.1.0/src/research_os/protocols/writing/writing_core.yaml +213 -0
- research_os-1.1.0/src/research_os/protocols/writing/writing_data_availability.yaml +275 -0
- research_os-1.1.0/src/research_os/protocols/writing/writing_discussion.yaml +262 -0
- research_os-1.1.0/src/research_os/protocols/writing/writing_limitations.yaml +224 -0
- research_os-1.1.0/src/research_os/protocols/writing/writing_methods.yaml +95 -0
- research_os-1.1.0/src/research_os/protocols/writing/writing_readme.yaml +102 -0
- research_os-1.1.0/src/research_os/protocols/writing/writing_results.yaml +267 -0
- research_os-1.1.0/src/research_os/server.py +4673 -0
- research_os-1.1.0/src/research_os/state/__init__.py +0 -0
- research_os-1.1.0/src/research_os/state/state_ledger.py +821 -0
- research_os-1.1.0/src/research_os/tools/__init__.py +0 -0
- research_os-1.1.0/src/research_os/tools/actions/__init__.py +15 -0
- research_os-1.1.0/src/research_os/tools/actions/audit/__init__.py +40 -0
- research_os-1.1.0/src/research_os/tools/actions/audit/audit.py +1234 -0
- research_os-1.1.0/src/research_os/tools/actions/audit/claim_grounding.py +301 -0
- research_os-1.1.0/src/research_os/tools/actions/audit/code_quality.py +405 -0
- research_os-1.1.0/src/research_os/tools/actions/audit/md_audit.py +64 -0
- research_os-1.1.0/src/research_os/tools/actions/audit/null_findings.py +201 -0
- research_os-1.1.0/src/research_os/tools/actions/audit/preregistration.py +450 -0
- research_os-1.1.0/src/research_os/tools/actions/audit/prose_quality.py +495 -0
- research_os-1.1.0/src/research_os/tools/actions/audit/redteam.py +319 -0
- research_os-1.1.0/src/research_os/tools/actions/data/__init__.py +10 -0
- research_os-1.1.0/src/research_os/tools/actions/data/context_intake.py +232 -0
- research_os-1.1.0/src/research_os/tools/actions/data/data.py +261 -0
- research_os-1.1.0/src/research_os/tools/actions/data/intake.py +298 -0
- research_os-1.1.0/src/research_os/tools/actions/data/profiling.py +85 -0
- research_os-1.1.0/src/research_os/tools/actions/exec/__init__.py +23 -0
- research_os-1.1.0/src/research_os/tools/actions/exec/cluster.py +365 -0
- research_os-1.1.0/src/research_os/tools/actions/exec/environment.py +432 -0
- research_os-1.1.0/src/research_os/tools/actions/exec/notebook.py +258 -0
- research_os-1.1.0/src/research_os/tools/actions/exec/scripts.py +118 -0
- research_os-1.1.0/src/research_os/tools/actions/exec/sensitivity.py +437 -0
- research_os-1.1.0/src/research_os/tools/actions/exec/step_pipeline.py +751 -0
- research_os-1.1.0/src/research_os/tools/actions/exec/tasks.py +481 -0
- research_os-1.1.0/src/research_os/tools/actions/memory/__init__.py +7 -0
- research_os-1.1.0/src/research_os/tools/actions/memory/memory.py +118 -0
- research_os-1.1.0/src/research_os/tools/actions/protocol.py +509 -0
- research_os-1.1.0/src/research_os/tools/actions/research/__init__.py +32 -0
- research_os-1.1.0/src/research_os/tools/actions/research/grounding.py +508 -0
- research_os-1.1.0/src/research_os/tools/actions/research/lessons.py +191 -0
- research_os-1.1.0/src/research_os/tools/actions/research/planning.py +712 -0
- research_os-1.1.0/src/research_os/tools/actions/research/research.py +835 -0
- research_os-1.1.0/src/research_os/tools/actions/router.py +1181 -0
- research_os-1.1.0/src/research_os/tools/actions/search/__init__.py +17 -0
- research_os-1.1.0/src/research_os/tools/actions/search/literature.py +423 -0
- research_os-1.1.0/src/research_os/tools/actions/search/search.py +582 -0
- research_os-1.1.0/src/research_os/tools/actions/state/__init__.py +37 -0
- research_os-1.1.0/src/research_os/tools/actions/state/checkpoint.py +114 -0
- research_os-1.1.0/src/research_os/tools/actions/state/config.py +325 -0
- research_os-1.1.0/src/research_os/tools/actions/state/interaction.py +201 -0
- research_os-1.1.0/src/research_os/tools/actions/state/iteration.py +539 -0
- research_os-1.1.0/src/research_os/tools/actions/state/path.py +1122 -0
- research_os-1.1.0/src/research_os/tools/actions/state/provenance.py +399 -0
- research_os-1.1.0/src/research_os/tools/actions/state/repair.py +163 -0
- research_os-1.1.0/src/research_os/tools/actions/state/scratch.py +153 -0
- research_os-1.1.0/src/research_os/tools/actions/synthesis/__init__.py +21 -0
- research_os-1.1.0/src/research_os/tools/actions/synthesis/citations.py +232 -0
- research_os-1.1.0/src/research_os/tools/actions/synthesis/dashboard.py +1457 -0
- research_os-1.1.0/src/research_os/tools/actions/synthesis/latex.py +496 -0
- research_os-1.1.0/src/research_os/tools/actions/synthesis/synthesize.py +1048 -0
- research_os-1.1.0/src/research_os/tools/actions/viz/__init__.py +45 -0
- research_os-1.1.0/src/research_os/tools/actions/viz/dashboard_tests.py +590 -0
- research_os-1.1.0/src/research_os/tools/actions/viz/figures.py +2054 -0
- research_os-1.1.0/src/research_os/tui.py +693 -0
- research_os-1.1.0/src/research_os/utils/__init__.py +25 -0
- research_os-1.1.0/src/research_os/utils/asset_manager.py +149 -0
- research_os-1.1.0/src/research_os/utils/common.py +126 -0
- research_os-1.1.0/src/research_os/verify.py +170 -0
- research_os-1.1.0/src/research_os/wizard.py +675 -0
- research_os-1.1.0/templates/.antigravity/rules/research-os.md +30 -0
- research_os-1.1.0/templates/.claude/commands/start-session.md +19 -0
- research_os-1.1.0/templates/.claude/rules/research-os.md +44 -0
- research_os-1.1.0/templates/.continuerules +31 -0
- research_os-1.1.0/templates/.cursor/rules/research-os.mdc +22 -0
- research_os-1.1.0/templates/.windsurfrules +31 -0
- research_os-1.1.0/templates/AGENTS.md +180 -0
- research_os-1.1.0/templates/CLAUDE.md +37 -0
- research_os-1.1.0/templates/mcp_config.json +11 -0
- research_os-1.1.0/templates/opencode.json +9 -0
- research_os-1.1.0/templates/researcher_config.yaml +73 -0
- research_os-1.1.0/tests/conftest.py +33 -0
- research_os-1.1.0/tests/integration/__init__.py +0 -0
- research_os-1.1.0/tests/integration/test_all_protocols_load.py +57 -0
- research_os-1.1.0/tests/integration/test_full_workflow.py +72 -0
- research_os-1.1.0/tests/integration/test_init.py +232 -0
- research_os-1.1.0/tests/integration/test_pipeline.py +51 -0
- research_os-1.1.0/tests/integration/test_reorganized_imports.py +147 -0
- research_os-1.1.0/tests/tools/__init__.py +0 -0
- research_os-1.1.0/tests/tools/test_citations.py +78 -0
- research_os-1.1.0/tests/tools/test_context_intake.py +60 -0
- research_os-1.1.0/tests/tools/test_hypotheses.py +44 -0
- research_os-1.1.0/tests/tools/test_intake.py +65 -0
- research_os-1.1.0/tests/tools/test_iteration.py +341 -0
- research_os-1.1.0/tests/tools/test_notebook.py +73 -0
- research_os-1.1.0/tests/tools/test_override_audit.py +128 -0
- research_os-1.1.0/tests/tools/test_planning.py +112 -0
- research_os-1.1.0/tests/tools/test_preregistration_and_dashboard_tests.py +67 -0
- research_os-1.1.0/tests/tools/test_redteam_and_null.py +45 -0
- research_os-1.1.0/tests/tools/test_repair.py +47 -0
- research_os-1.1.0/tests/tools/test_research.py +90 -0
- research_os-1.1.0/tests/tools/test_router.py +695 -0
- research_os-1.1.0/tests/tools/test_scratch.py +52 -0
- research_os-1.1.0/tests/tools/test_sensitivity_and_cluster.py +68 -0
- research_os-1.1.0/tests/tools/test_step_env_lock.py +75 -0
- research_os-1.1.0/tests/tools/test_step_pipeline.py +106 -0
- research_os-1.1.0/tests/tools/test_tasks.py +86 -0
- research_os-1.1.0/tests/tools/test_workflow_dag.py +56 -0
- research_os-1.1.0/tests/unit/__init__.py +0 -0
- research_os-1.1.0/tests/unit/test_actions.py +135 -0
- research_os-1.1.0/tests/unit/test_audit.py +60 -0
- research_os-1.1.0/tests/unit/test_branch_paths.py +129 -0
- research_os-1.1.0/tests/unit/test_config.py +98 -0
- research_os-1.1.0/tests/unit/test_core.py +82 -0
- research_os-1.1.0/tests/unit/test_executors.py +77 -0
- research_os-1.1.0/tests/unit/test_find_project_root.py +25 -0
- research_os-1.1.0/tests/unit/test_grounding_and_lessons.py +141 -0
- research_os-1.1.0/tests/unit/test_protocols.py +171 -0
- research_os-1.1.0/tests/unit/test_provenance.py +68 -0
- research_os-1.1.0/tests/unit/test_quality_audits.py +128 -0
- research_os-1.1.0/tests/unit/test_search.py +113 -0
- research_os-1.1.0/tests/unit/test_server.py +118 -0
- research_os-1.1.0/tests/unit/test_state.py +175 -0
- research_os-1.1.0/tests/unit/test_viz_renderers.py +145 -0
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
name: Bug Report
|
|
2
|
+
description: Create a report to help us improve Research OS
|
|
3
|
+
title: "[BUG] "
|
|
4
|
+
labels: ["bug"]
|
|
5
|
+
assignees: []
|
|
6
|
+
body:
|
|
7
|
+
- type: markdown
|
|
8
|
+
attributes:
|
|
9
|
+
value: |
|
|
10
|
+
Thanks for taking the time to fill out this bug report!
|
|
11
|
+
- type: textarea
|
|
12
|
+
id: what-happened
|
|
13
|
+
attributes:
|
|
14
|
+
label: What happened?
|
|
15
|
+
description: Also tell us, what did you expect to happen?
|
|
16
|
+
placeholder: Tell us what you see!
|
|
17
|
+
validations:
|
|
18
|
+
required: true
|
|
19
|
+
- type: textarea
|
|
20
|
+
id: steps
|
|
21
|
+
attributes:
|
|
22
|
+
label: Steps to reproduce
|
|
23
|
+
description: Steps to reproduce the behavior.
|
|
24
|
+
placeholder: |
|
|
25
|
+
1. Run `ros init`
|
|
26
|
+
2. ...
|
|
27
|
+
validations:
|
|
28
|
+
required: true
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
name: Feature Request
|
|
2
|
+
description: Suggest an idea for this project
|
|
3
|
+
title: "[FEATURE] "
|
|
4
|
+
labels: ["enhancement"]
|
|
5
|
+
assignees: []
|
|
6
|
+
body:
|
|
7
|
+
- type: markdown
|
|
8
|
+
attributes:
|
|
9
|
+
value: |
|
|
10
|
+
Thanks for your interest in improving Research OS!
|
|
11
|
+
- type: textarea
|
|
12
|
+
id: feature-description
|
|
13
|
+
attributes:
|
|
14
|
+
label: Describe the feature
|
|
15
|
+
description: A clear and concise description of what you want to happen.
|
|
16
|
+
validations:
|
|
17
|
+
required: true
|
|
18
|
+
- type: textarea
|
|
19
|
+
id: use-cases
|
|
20
|
+
attributes:
|
|
21
|
+
label: Use Cases
|
|
22
|
+
description: In what situations would this feature be useful?
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
name: Publish to PyPI
|
|
2
|
+
|
|
3
|
+
# Trusted Publishing (OIDC) — no API tokens stored.
|
|
4
|
+
# Configured on PyPI with:
|
|
5
|
+
# Owner: VibhavSetlur
|
|
6
|
+
# Repository: Research-OS
|
|
7
|
+
# Workflow filename: publish.yml
|
|
8
|
+
# Environment: pypi
|
|
9
|
+
|
|
10
|
+
on:
|
|
11
|
+
push:
|
|
12
|
+
tags:
|
|
13
|
+
- "v*"
|
|
14
|
+
workflow_dispatch:
|
|
15
|
+
|
|
16
|
+
jobs:
|
|
17
|
+
build:
|
|
18
|
+
name: Build sdist and wheel
|
|
19
|
+
runs-on: ubuntu-latest
|
|
20
|
+
steps:
|
|
21
|
+
- name: Checkout
|
|
22
|
+
uses: actions/checkout@v4
|
|
23
|
+
|
|
24
|
+
- name: Set up Python
|
|
25
|
+
uses: actions/setup-python@v5
|
|
26
|
+
with:
|
|
27
|
+
python-version: "3.11"
|
|
28
|
+
|
|
29
|
+
- name: Install build backend
|
|
30
|
+
run: python -m pip install --upgrade pip build
|
|
31
|
+
|
|
32
|
+
- name: Build sdist and wheel
|
|
33
|
+
run: python -m build --sdist --wheel
|
|
34
|
+
|
|
35
|
+
- name: Upload distribution artifacts
|
|
36
|
+
uses: actions/upload-artifact@v4
|
|
37
|
+
with:
|
|
38
|
+
name: dist
|
|
39
|
+
path: dist/
|
|
40
|
+
|
|
41
|
+
publish:
|
|
42
|
+
name: Publish to PyPI
|
|
43
|
+
needs: build
|
|
44
|
+
# Only publish on tag pushes; workflow_dispatch builds but does not publish.
|
|
45
|
+
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v')
|
|
46
|
+
runs-on: ubuntu-latest
|
|
47
|
+
environment:
|
|
48
|
+
name: pypi
|
|
49
|
+
url: https://pypi.org/p/research-os
|
|
50
|
+
permissions:
|
|
51
|
+
id-token: write # required for Trusted Publishing (OIDC)
|
|
52
|
+
steps:
|
|
53
|
+
- name: Download distribution artifacts
|
|
54
|
+
uses: actions/download-artifact@v4
|
|
55
|
+
with:
|
|
56
|
+
name: dist
|
|
57
|
+
path: dist/
|
|
58
|
+
|
|
59
|
+
- name: Publish to PyPI via Trusted Publishing
|
|
60
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
name: tests
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [main]
|
|
8
|
+
workflow_dispatch:
|
|
9
|
+
|
|
10
|
+
# Cancel an in-progress run for the same ref when a new commit lands.
|
|
11
|
+
concurrency:
|
|
12
|
+
group: tests-${{ github.ref }}
|
|
13
|
+
cancel-in-progress: true
|
|
14
|
+
|
|
15
|
+
# Pip resilience for transient network blips.
|
|
16
|
+
env:
|
|
17
|
+
PIP_DISABLE_PIP_VERSION_CHECK: "1"
|
|
18
|
+
PIP_NO_INPUT: "1"
|
|
19
|
+
PIP_RETRIES: "5"
|
|
20
|
+
PIP_TIMEOUT: "60"
|
|
21
|
+
|
|
22
|
+
jobs:
|
|
23
|
+
# ── Fast feedback: lint + preflight + unit tests on one Python ─────────
|
|
24
|
+
fast:
|
|
25
|
+
name: Lint + preflight + unit (3.11)
|
|
26
|
+
runs-on: ubuntu-latest
|
|
27
|
+
timeout-minutes: 10
|
|
28
|
+
steps:
|
|
29
|
+
- uses: actions/checkout@v4
|
|
30
|
+
|
|
31
|
+
- name: Set up Python 3.11
|
|
32
|
+
uses: actions/setup-python@v5
|
|
33
|
+
with:
|
|
34
|
+
python-version: "3.11"
|
|
35
|
+
cache: pip
|
|
36
|
+
cache-dependency-path: pyproject.toml
|
|
37
|
+
|
|
38
|
+
- name: Install package + ci extras
|
|
39
|
+
run: |
|
|
40
|
+
python -m pip install --upgrade pip
|
|
41
|
+
pip install --prefer-binary -e ".[ci,dev]"
|
|
42
|
+
|
|
43
|
+
- name: Lint (ruff)
|
|
44
|
+
run: ruff check src/ tests/ scripts/
|
|
45
|
+
|
|
46
|
+
- name: Preflight smoke check
|
|
47
|
+
run: python scripts/preflight.py
|
|
48
|
+
|
|
49
|
+
- name: Unit tests
|
|
50
|
+
run: pytest tests/unit -v
|
|
51
|
+
|
|
52
|
+
# ── Full matrix: integration + tools tests on every supported Python ───
|
|
53
|
+
full:
|
|
54
|
+
name: Integration + tools (Python ${{ matrix.python-version }})
|
|
55
|
+
needs: fast
|
|
56
|
+
runs-on: ubuntu-latest
|
|
57
|
+
timeout-minutes: 20
|
|
58
|
+
strategy:
|
|
59
|
+
fail-fast: false
|
|
60
|
+
matrix:
|
|
61
|
+
python-version: ["3.10", "3.11", "3.12"]
|
|
62
|
+
steps:
|
|
63
|
+
- uses: actions/checkout@v4
|
|
64
|
+
|
|
65
|
+
- name: Set up Python ${{ matrix.python-version }}
|
|
66
|
+
uses: actions/setup-python@v5
|
|
67
|
+
with:
|
|
68
|
+
python-version: ${{ matrix.python-version }}
|
|
69
|
+
cache: pip
|
|
70
|
+
cache-dependency-path: pyproject.toml
|
|
71
|
+
|
|
72
|
+
- name: Install package + ci extras
|
|
73
|
+
run: |
|
|
74
|
+
python -m pip install --upgrade pip
|
|
75
|
+
pip install --prefer-binary -e ".[ci,dev]"
|
|
76
|
+
|
|
77
|
+
- name: Integration tests
|
|
78
|
+
run: pytest tests/integration -v
|
|
79
|
+
|
|
80
|
+
- name: Tools tests
|
|
81
|
+
env:
|
|
82
|
+
# The scratch + tasks tests spawn real subprocesses; they need a
|
|
83
|
+
# writable HOME. Default GitHub-hosted runners are fine, but be
|
|
84
|
+
# explicit.
|
|
85
|
+
HOME: ${{ runner.temp }}
|
|
86
|
+
run: pytest tests/tools -v
|
|
87
|
+
|
|
88
|
+
# ── Build sdist + wheel to confirm packaging is healthy (full extras) ──
|
|
89
|
+
build:
|
|
90
|
+
name: Build sdist + wheel
|
|
91
|
+
needs: fast
|
|
92
|
+
runs-on: ubuntu-latest
|
|
93
|
+
timeout-minutes: 10
|
|
94
|
+
steps:
|
|
95
|
+
- uses: actions/checkout@v4
|
|
96
|
+
- name: Set up Python 3.11
|
|
97
|
+
uses: actions/setup-python@v5
|
|
98
|
+
with:
|
|
99
|
+
python-version: "3.11"
|
|
100
|
+
- name: Build
|
|
101
|
+
run: |
|
|
102
|
+
python -m pip install --upgrade pip build
|
|
103
|
+
python -m build
|
|
104
|
+
- name: Confirm wheel imports cleanly + ships protocols
|
|
105
|
+
run: |
|
|
106
|
+
python -m venv /tmp/wheel-check
|
|
107
|
+
/tmp/wheel-check/bin/pip install --prefer-binary dist/*.whl
|
|
108
|
+
/tmp/wheel-check/bin/python -c "import research_os; print('OK', research_os.__version__)"
|
|
109
|
+
/tmp/wheel-check/bin/python -c "
|
|
110
|
+
import zipfile, sys
|
|
111
|
+
import glob
|
|
112
|
+
whl = glob.glob('dist/*.whl')[0]
|
|
113
|
+
with zipfile.ZipFile(whl) as z:
|
|
114
|
+
yamls = [n for n in z.namelist() if n.endswith('.yaml')]
|
|
115
|
+
print(f'YAMLs in wheel: {len(yamls)}')
|
|
116
|
+
assert len(yamls) >= 30, 'protocols missing from wheel'
|
|
117
|
+
"
|
|
118
|
+
- name: Upload artefacts
|
|
119
|
+
uses: actions/upload-artifact@v4
|
|
120
|
+
with:
|
|
121
|
+
name: dist
|
|
122
|
+
path: dist/
|
|
123
|
+
retention-days: 7
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# Research OS — Git Ignore Rules
|
|
2
|
+
TODO.md
|
|
3
|
+
|
|
4
|
+
# Python
|
|
5
|
+
__pycache__/
|
|
6
|
+
*.pyc
|
|
7
|
+
*.pyo
|
|
8
|
+
*.pyd
|
|
9
|
+
*.egg-info/
|
|
10
|
+
dist/
|
|
11
|
+
build/
|
|
12
|
+
.pytest_cache/
|
|
13
|
+
.benchmarks/
|
|
14
|
+
.mypy_cache/
|
|
15
|
+
.ruff_cache/
|
|
16
|
+
|
|
17
|
+
# IDE configs
|
|
18
|
+
/.cursor/
|
|
19
|
+
/.cursorrules
|
|
20
|
+
/.clinerules
|
|
21
|
+
/AGENTS.md
|
|
22
|
+
|
|
23
|
+
# OS state (auto-created during pipeline runs)
|
|
24
|
+
.os_state/
|
|
25
|
+
|
|
26
|
+
# Virtual environments
|
|
27
|
+
.venv/
|
|
28
|
+
venv/
|
|
29
|
+
env/
|
|
30
|
+
environment/venv/
|
|
31
|
+
|
|
32
|
+
# User data (keep directories, ignore contents)
|
|
33
|
+
!inputs/data/raw/.gitkeep
|
|
34
|
+
!inputs/context/.gitkeep
|
|
35
|
+
!inputs/context/README.md
|
|
36
|
+
!inputs/papers/.gitkeep
|
|
37
|
+
!inputs/papers/README.md
|
|
38
|
+
|
|
39
|
+
# Researcher config (contains API keys)
|
|
40
|
+
inputs/researcher_config.yaml
|
|
41
|
+
|
|
42
|
+
# Large files (never commit)
|
|
43
|
+
*.h5
|
|
44
|
+
*.hdf5
|
|
45
|
+
*.feather
|
|
46
|
+
*.parquet
|
|
47
|
+
*.sav
|
|
48
|
+
*.dta
|
|
49
|
+
*.sas7bdat
|
|
50
|
+
*.zip
|
|
51
|
+
*.tar.gz
|
|
52
|
+
*.rar
|
|
53
|
+
|
|
54
|
+
# OS files
|
|
55
|
+
.DS_Store
|
|
56
|
+
Thumbs.db
|
|
57
|
+
desktop.ini
|
|
58
|
+
|
|
59
|
+
# AI assistant caches
|
|
60
|
+
.aider*
|
|
61
|
+
|
|
62
|
+
.antigravitycli/
|
|
63
|
+
|
|
64
|
+
# IDE
|
|
65
|
+
.vscode/
|
|
66
|
+
.idea/
|
|
67
|
+
*.swp
|
|
68
|
+
*.swo
|
|
69
|
+
|
|
70
|
+
# Jupyter
|
|
71
|
+
.ipynb_checkpoints/
|
|
72
|
+
|
|
73
|
+
# Environment files (user-specific)
|
|
74
|
+
.env
|
|
75
|
+
.env.local
|
|
76
|
+
|
|
77
|
+
# Task logs
|
|
78
|
+
*.log
|
|
79
|
+
|
|
80
|
+
# Temporary scratch folder
|
|
81
|
+
scratch/
|
|
82
|
+
/workspace/
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
repos:
|
|
2
|
+
- repo: https://github.com/pre-commit/pre-commit-hooks
|
|
3
|
+
rev: v4.4.0
|
|
4
|
+
hooks:
|
|
5
|
+
- id: trailing-whitespace
|
|
6
|
+
- id: end-of-file-fixer
|
|
7
|
+
- id: check-yaml
|
|
8
|
+
- repo: https://github.com/psf/black
|
|
9
|
+
rev: 23.3.0
|
|
10
|
+
hooks:
|
|
11
|
+
- id: black
|
|
12
|
+
language_version: python3.10
|