pen-stack 6.2.0__tar.gz → 6.2.1__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.
- {pen_stack-6.2.0 → pen_stack-6.2.1}/CHANGELOG.md +12 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/CITATION.cff +1 -1
- {pen_stack-6.2.0 → pen_stack-6.2.1}/PKG-INFO +3 -3
- {pen_stack-6.2.0 → pen_stack-6.2.1}/README.md +2 -2
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/__init__.py +1 -1
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/server/api.py +10 -3
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/web/server.py +10 -3
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/web/tools.py +4 -1
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack.egg-info/PKG-INFO +3 -3
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pyproject.toml +1 -1
- {pen_stack-6.2.0 → pen_stack-6.2.1}/LICENSE +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/MANIFEST.in +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/bench/run.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/benchmarks/genome_writing_bench/LEADERBOARD.md +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/benchmarks/genome_writing_bench/README.md +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/benchmarks/genome_writing_bench/SHA256SUMS +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/benchmarks/genome_writing_bench/SUBMISSIONS.md +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/benchmarks/genome_writing_bench/tasks.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/benchmarks/genome_writing_challenge/README.md +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/benchmarks/genome_writing_challenge/SUBMISSIONS.md +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/configs/antipeg.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/configs/atlas_families.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/configs/bridge_offtarget_profile.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/configs/capsid_epitope_oracle.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/configs/capsid_sequences.fasta +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/configs/cargo_polish.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/configs/cell_types.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/configs/datasets.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/configs/delivery_constraints.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/configs/delivery_rules.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/configs/delivery_vehicles.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/configs/gates_v3.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/configs/genotoxicity_oracle.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/configs/gsh_validated_heldout.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/configs/intent_weights.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/configs/known_unknowns.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/configs/llm.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/configs/monitor_queries.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/configs/oracles/scope_cards.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/configs/rules/delivery.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/configs/rules/fold.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/configs/rules/multiplex.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/configs/rules/payload.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/configs/rules/reachability.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/configs/safety/hazard_registry.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/configs/safety/policy.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/configs/safety/probes.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/configs/score_axes.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/configs/seroprevalence.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/configs/target_sites.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/configs/universe_crosswalk.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/configs/write_types.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/configs/wtkb_curated.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/data/curated/bridge_offtarget_energetics.json +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/data/curated/bridge_offtarget_profile_measured.parquet +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/data/curated/gene_coords.parquet +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/data/curated/unified_editor_universe.parquet +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/docs/BACKLOG.md +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/docs/DEPLOY.md +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/docs/INFRA.md +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/docs/MCP.md +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/docs/RELEASING.md +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/docs/REPRO.md +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/docs/STABILITY.md +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/docs/agent.md +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/docs/alphagenome_feasibility.md +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/docs/autonomy.md +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/docs/benchmark_circularity.md +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/docs/biosecurity.md +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/docs/build_interface.md +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/docs/cards/atlas.md +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/docs/cards/durability.md +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/docs/cards/safety.md +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/docs/challenge.md +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/docs/closed_loop.md +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/docs/co_scientist.md +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/docs/co_scientist_loop.md +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/docs/delivery.md +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/docs/delivery_immunology.md +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/docs/digital_twin.md +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/docs/dissemination.md +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/docs/environment.md +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/docs/experiment_design.md +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/docs/generative_design.md +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/docs/index.md +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/docs/integrations.md +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/docs/mechanistic_constraints.md +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/docs/oracles.md +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/docs/positioning.md +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/docs/private_data_formats.md +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/docs/quickstart.md +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/docs/responsible_use.md +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/docs/rules.md +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/docs/scope.md +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/docs/scorecard.md +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/docs/tutorials/compare-families.md +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/docs/tutorials/score-deliverability.md +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/docs/tutorials/where-can-i-write.md +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/docs/tutorials/which-writer-reaches-locus.md +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/docs/uncertainty.md +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/docs/verify.md +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/docs/world_model.md +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/docs/writer_verification.md +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/docs/wtkb.md +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/_resources.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/active/__init__.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/active/acquire.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/active/design.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/active/validate.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/adapt/__init__.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/adapt/finetune.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/adapt/ingest.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/adapt/pipeline.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/adapt/recalibrate.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/adapt/report.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/agent/__init__.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/agent/cite.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/agent/co_scientist.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/agent/epistemic.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/agent/guardrails.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/agent/mcp_server.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/agent/orchestrator.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/agent/orchestrator_live.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/agent/pen_agent.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/agent/scope.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/agent/tools.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/api/__init__.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/api/manifest.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/atlas/__init__.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/atlas/build_wtkb.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/atlas/crosslink.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/atlas/expand.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/atlas/schema.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/atlas/scorecard.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/atlas/universe.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/atlas/variant_propose.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/atlas/writer_verify.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/bridge/__init__.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/bridge/activity.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/bridge/cli.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/bridge/fold_qc.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/bridge/guide_qc.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/bridge/ingest.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/bridge/offtarget.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/bridge/offtarget_energetics.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/bridge/ortholog_screen.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/bridge/pipeline.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/build/__init__.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/build/ingest.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/build/protocol.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/build/simlab.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/cli.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/data/__init__.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/data/encode.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/data/genome.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/data/ingest_chromatin.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/data/ingest_integration.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/data/ingest_safety_annot.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/data/ingest_trip.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/design/__init__.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/design/generate.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/design/pareto.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/design/space.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/env/__init__.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/env/genome_writing_env.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/env/policies.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/graph/__init__.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/graph/build.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/graph/cell_types.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/graph/ingest.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/graph/query.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/graph/schema.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/loop/__init__.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/loop/continual.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/loop/cycle.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/loop/drift.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/mech/__init__.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/mech/classify_atlas.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/mech/whitelist.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/monitor/__init__.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/monitor/europepmc.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/monitor/run.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/monitor/triage.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/oracles/__init__.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/oracles/cache.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/oracles/energetics.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/oracles/genome.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/oracles/protein_design.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/oracles/rna.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/oracles/schema.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/oracles/structure.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/oracles/vcell.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/planner/__init__.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/planner/antipeg_oracle.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/planner/capsid_epitope_oracle.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/planner/cargo.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/planner/cargo_polish.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/planner/delivery.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/planner/delivery_constraints.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/planner/delivery_immunology.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/planner/delivery_vehicles.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/planner/genotoxicity_oracle.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/planner/immune_profile.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/planner/innate_sensing.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/planner/multiplex.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/planner/optimize.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/planner/pipeline.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/planner/report.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/planner/router.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/planner/seroprevalence_oracle.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/planner/target_site.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/rag/__init__.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/rag/index.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/rag/llm.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/rag/qa.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/rules/__init__.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/rules/evaluators.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/rules/loader.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/rules/schema.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/rules/solver.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/safety/__init__.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/safety/audit.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/safety/gate.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/safety/policy.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/safety/redteam.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/safety/registry.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/safety/screen.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/score/__init__.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/score/recalibrate.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/score/therapeutic.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/server/__init__.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/twin/__init__.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/twin/calibrate.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/twin/mechanistic.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/twin/outcome.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/ui/__init__.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/ui/app.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/validate/__init__.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/validate/adapt_demo.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/validate/agent_eval.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/validate/bench_adversarial_tasks.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/validate/bench_coscientist_tasks.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/validate/bench_graph_tasks.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/validate/bench_rule_tasks.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/validate/bench_trust_tasks.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/validate/bench_writetype_tasks.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/validate/blind_gsh_discovery.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/validate/cargo_directionality.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/validate/closed_loop.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/validate/durability_baselines.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/validate/experiment_design.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/validate/forward_hypotheses.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/validate/generative_design.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/validate/guide_qc_demo.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/validate/immune_calibration.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/validate/intent_specification.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/validate/offtarget_energetics_eval.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/validate/out_of_scope_refusal.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/validate/outcome_calibration.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/validate/outcome_prediction.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/validate/paper3_benchmark.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/validate/paper4_real_validation.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/validate/paper4_validation.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/validate/protocol_safety.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/validate/safety_screening.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/validate/selective_prediction.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/validate/seq_vs_measured.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/validate/target_site_controls.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/validate/uncertainty_eval.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/validate/ungrounded_baseline.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/validate/within_locus_ranking.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/validate/writer_recovery.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/verify/__init__.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/verify/schema.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/verify/service.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/web/__init__.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/web/llm.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/wgenome/__init__.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/wgenome/chromatin_seq.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/wgenome/durability.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/wgenome/export_tracks.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/wgenome/features.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/wgenome/gsh_baseline.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/wgenome/mesh_features.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/wgenome/ood.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/wgenome/providers.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/wgenome/safety.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/wgenome/structure3d.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/wgenome/uncertainty.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack/wgenome/writability.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack.egg-info/SOURCES.txt +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack.egg-info/dependency_links.txt +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack.egg-info/entry_points.txt +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack.egg-info/requires.txt +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/pen_stack.egg-info/top_level.txt +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/SHA256_LOCK_phase0.json +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/SHA256_LOCK_phase1_5.json +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/SHA256_LOCK_phase2.json +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/SHA256_LOCK_phase3.json +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/SHA256_LOCK_ws_a.json +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/SHA256_LOCK_ws_acq.json +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/SHA256_LOCK_ws_aldesign.json +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/SHA256_LOCK_ws_alvalidate.json +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/SHA256_LOCK_ws_atlas.json +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/SHA256_LOCK_ws_b.json +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/SHA256_LOCK_ws_ba.json +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/SHA256_LOCK_ws_ba_v33.json +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/SHA256_LOCK_ws_ba_v45.json +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/SHA256_LOCK_ws_bench.json +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/SHA256_LOCK_ws_c.json +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/SHA256_LOCK_ws_cal.json +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/SHA256_LOCK_ws_calib.json +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/SHA256_LOCK_ws_challenge.json +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/SHA256_LOCK_ws_chat.json +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/SHA256_LOCK_ws_cite.json +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/SHA256_LOCK_ws_continual.json +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/SHA256_LOCK_ws_cosci2.json +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/SHA256_LOCK_ws_crit.json +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/SHA256_LOCK_ws_ct.json +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/SHA256_LOCK_ws_d.json +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/SHA256_LOCK_ws_drift.json +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/SHA256_LOCK_ws_e.json +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/SHA256_LOCK_ws_env.json +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/SHA256_LOCK_ws_ep.json +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/SHA256_LOCK_ws_epitope.json +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/SHA256_LOCK_ws_f.json +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/SHA256_LOCK_ws_frontend.json +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/SHA256_LOCK_ws_g.json +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/SHA256_LOCK_ws_gen.json +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/SHA256_LOCK_ws_genotox.json +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/SHA256_LOCK_ws_graph.json +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/SHA256_LOCK_ws_h.json +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/SHA256_LOCK_ws_immune.json +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/SHA256_LOCK_ws_ingest.json +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/SHA256_LOCK_ws_innate.json +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/SHA256_LOCK_ws_loop.json +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/SHA256_LOCK_ws_manifest.json +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/SHA256_LOCK_ws_mc.json +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/SHA256_LOCK_ws_mcp.json +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/SHA256_LOCK_ws_mech.json +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/SHA256_LOCK_ws_mon.json +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/SHA256_LOCK_ws_o.json +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/SHA256_LOCK_ws_openapi.json +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/SHA256_LOCK_ws_orch.json +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/SHA256_LOCK_ws_outcome.json +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/SHA256_LOCK_ws_pareto.json +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/SHA256_LOCK_ws_peg.json +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/SHA256_LOCK_ws_plan.json +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/SHA256_LOCK_ws_policy.json +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/SHA256_LOCK_ws_profile.json +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/SHA256_LOCK_ws_proto.json +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/SHA256_LOCK_ws_r.json +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/SHA256_LOCK_ws_redteam.json +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/SHA256_LOCK_ws_route.json +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/SHA256_LOCK_ws_screen.json +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/SHA256_LOCK_ws_seroprev.json +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/SHA256_LOCK_ws_simlab.json +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/SHA256_LOCK_ws_twincal.json +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/SHA256_LOCK_ws_uq.json +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/SHA256_LOCK_ws_v.json +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/SHA256_LOCK_ws_vcell.json +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/SHA256_LOCK_ws_wv.json +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/paper1.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/paper2.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/paper3.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/paper4.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/phase0.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/ws_a.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/ws_acq.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/ws_aldesign.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/ws_alvalidate.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/ws_atlas.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/ws_b.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/ws_ba.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/ws_ba_v33.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/ws_ba_v45.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/ws_bench.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/ws_c.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/ws_cal.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/ws_calib.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/ws_challenge.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/ws_chat.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/ws_cite.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/ws_continual.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/ws_cosci2.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/ws_crit.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/ws_ct.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/ws_d.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/ws_drift.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/ws_e.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/ws_env.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/ws_ep.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/ws_epitope.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/ws_f.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/ws_frontend.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/ws_g.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/ws_gen.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/ws_genotox.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/ws_graph.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/ws_h.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/ws_immune.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/ws_ingest.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/ws_innate.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/ws_loop.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/ws_manifest.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/ws_mc.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/ws_mcp.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/ws_mech.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/ws_mon.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/ws_o.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/ws_openapi.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/ws_orch.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/ws_outcome.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/ws_pareto.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/ws_peg.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/ws_plan.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/ws_policy.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/ws_profile.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/ws_proto.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/ws_r.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/ws_redteam.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/ws_route.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/ws_screen.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/ws_seroprev.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/ws_simlab.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/ws_twincal.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/ws_uq.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/ws_v.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/ws_vcell.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/prereg/ws_wv.yaml +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/scripts/p1_build_atlas.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/scripts/p1_build_durability.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/scripts/p1_export_tracks.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/scripts/p1_safety_concordance.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/scripts/p1_train_safety.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/scripts/p1_validation_report.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/scripts/p2_build_atlas.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/scripts/p3_benchmark_report.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/scripts/p4_genome_scan.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/scripts/p52_build_genotox_oracle.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/scripts/p53_build_epitope_oracle.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/scripts/ws_b_report.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/scripts/ws_c_report.py +0 -0
- {pen_stack-6.2.0 → pen_stack-6.2.1}/setup.cfg +0 -0
|
@@ -3,6 +3,18 @@
|
|
|
3
3
|
All notable changes to PEN-STACK are documented here. This file follows
|
|
4
4
|
[Keep a Changelog](https://keepachangelog.com/) and the program's phase structure.
|
|
5
5
|
|
|
6
|
+
## [6.2.1] - 2026-06-12 - v6.2.1: JSON-safe atlas/crosslink endpoints (patch)
|
|
7
|
+
|
|
8
|
+
**Bug fix.** The `/atlas`, `/writable`, and `/crosslink/loci` endpoints returned raw DataFrame records, which
|
|
9
|
+
leak non-finite floats (`NaN`/`inf`) present in `atlas.parquet`; the JSON encoder rejects these
|
|
10
|
+
(`ValueError: Out of range float values are not JSON compliant` → HTTP 500). Surfaced on the v6.2 Web Platform's
|
|
11
|
+
Writer Atlas and Site Finder pages.
|
|
12
|
+
|
|
13
|
+
### Fixed
|
|
14
|
+
- `pen_stack/server/api.py`: a `_records()` helper serializes DataFrame rows JSON-safely (via pandas `to_json`,
|
|
15
|
+
so `NaN`/`inf` → `null` and numpy scalars → native), applied to `/atlas`, `/writable`, `/crosslink/loci`.
|
|
16
|
+
Regression test `tests/unit/test_ws_api.py::test_records_helper_is_json_safe_with_non_finite_floats`.
|
|
17
|
+
|
|
6
18
|
## [6.2.0] - 2026-06-11 - v6.2: The Web Platform (the human surface)
|
|
7
19
|
|
|
8
20
|
**Post-1.0 adoption surface for bench scientists.** A complete, friendly web application — a grounded co-scientist
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pen-stack
|
|
3
|
-
Version: 6.2.
|
|
3
|
+
Version: 6.2.1
|
|
4
4
|
Summary: Open infrastructure for genome writing: the Writable Genome atlas, the Writer Atlas, and the Write Planner.
|
|
5
5
|
Author-email: Anees Ahmed Mahaboob Ali <ahmedaneesm@gmail.com>
|
|
6
6
|
License: MIT
|
|
@@ -90,9 +90,9 @@ every design against rule-grounded mechanism, reports calibrated confidence, cit
|
|
|
90
90
|
[](https://codecov.io/gh/ahmedanees-m/pen-stack)
|
|
91
91
|
[](LICENSE)
|
|
92
92
|
[](https://www.python.org/)
|
|
93
|
-
[](CHANGELOG.md)
|
|
94
94
|
[](docs/STABILITY.md)
|
|
95
|
-
[](tests/)
|
|
96
96
|
[](https://github.com/astral-sh/ruff)
|
|
97
97
|
[](docker/)
|
|
98
98
|
[](prereg/)
|
|
@@ -15,9 +15,9 @@ every design against rule-grounded mechanism, reports calibrated confidence, cit
|
|
|
15
15
|
[](https://codecov.io/gh/ahmedanees-m/pen-stack)
|
|
16
16
|
[](LICENSE)
|
|
17
17
|
[](https://www.python.org/)
|
|
18
|
-
[](CHANGELOG.md)
|
|
19
19
|
[](docs/STABILITY.md)
|
|
20
|
-
[](tests/)
|
|
21
21
|
[](https://github.com/astral-sh/ruff)
|
|
22
22
|
[](docker/)
|
|
23
23
|
[](prereg/)
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
"""PEN-STACK v3.0 - open infrastructure for genome writing."""
|
|
2
|
-
__version__ = "6.2.
|
|
2
|
+
__version__ = "6.2.1"
|
|
@@ -8,6 +8,7 @@ Run: ``uvicorn pen_stack.server.api:app --host 0.0.0.0 --port 8000`` (needs the
|
|
|
8
8
|
"""
|
|
9
9
|
from __future__ import annotations
|
|
10
10
|
|
|
11
|
+
import json
|
|
11
12
|
from pathlib import Path
|
|
12
13
|
|
|
13
14
|
import pandas as pd
|
|
@@ -34,6 +35,12 @@ def _atlas_df() -> pd.DataFrame:
|
|
|
34
35
|
return pd.read_parquet(_ATLAS)
|
|
35
36
|
|
|
36
37
|
|
|
38
|
+
def _records(df: pd.DataFrame) -> list[dict]:
|
|
39
|
+
"""JSON-safe records from a DataFrame: NaN/inf -> null and numpy scalars -> native (pandas `to_json`
|
|
40
|
+
handles both). Raw `to_dict('records')` leaks non-finite floats, which the JSON encoder rejects (500)."""
|
|
41
|
+
return json.loads(df.to_json(orient="records"))
|
|
42
|
+
|
|
43
|
+
|
|
37
44
|
@app.get("/health")
|
|
38
45
|
def health():
|
|
39
46
|
return {"status": "ok", "version": __version__, "atlas_present": _ATLAS.exists()}
|
|
@@ -60,7 +67,7 @@ def atlas(family: str | None = None, limit: int = Query(50, le=500)):
|
|
|
60
67
|
cols = [c for c in ["representative_system", "family", "confidence", "mechanism_bucket",
|
|
61
68
|
"deliv_class", "readiness", "cargo_capacity_bp", "reachability_tier",
|
|
62
69
|
"human_cell_activity"] if c in df.columns]
|
|
63
|
-
return {"n": int(len(df)), "rows": df[cols].head(limit)
|
|
70
|
+
return {"n": int(len(df)), "rows": _records(df[cols].head(limit)), "disclaimer": _DISCLAIMER}
|
|
64
71
|
|
|
65
72
|
|
|
66
73
|
@app.get("/crosslink/writers")
|
|
@@ -86,7 +93,7 @@ def crosslink_loci(family: str, ct: str = "k562", top: int = Query(20, le=200)):
|
|
|
86
93
|
loci = cl.loci_for_writer(family, ct, top=top)
|
|
87
94
|
except FileNotFoundError as e:
|
|
88
95
|
raise HTTPException(503, str(e)) from e
|
|
89
|
-
return {"family": family, "ct": ct, "loci": loci
|
|
96
|
+
return {"family": family, "ct": ct, "loci": _records(loci), "disclaimer": _DISCLAIMER}
|
|
90
97
|
|
|
91
98
|
|
|
92
99
|
@app.get("/writable")
|
|
@@ -99,7 +106,7 @@ def writable(gene: str, ct: str = "k562", top: int = Query(20, le=200)):
|
|
|
99
106
|
if g.empty:
|
|
100
107
|
return {"gene": gene, "ct": ct, "loci": [], "disclaimer": _DISCLAIMER}
|
|
101
108
|
cols = ["chrom", "bin", "safety", "p_durable", "writability"]
|
|
102
|
-
return {"gene": gene, "ct": ct, "loci": g[cols].head(top)
|
|
109
|
+
return {"gene": gene, "ct": ct, "loci": _records(g[cols].head(top)), "disclaimer": _DISCLAIMER}
|
|
103
110
|
|
|
104
111
|
|
|
105
112
|
@app.get("/bridge/design")
|
|
@@ -14,7 +14,7 @@ import json
|
|
|
14
14
|
from pathlib import Path
|
|
15
15
|
|
|
16
16
|
try:
|
|
17
|
-
from fastapi import FastAPI
|
|
17
|
+
from fastapi import FastAPI, HTTPException
|
|
18
18
|
from fastapi.middleware.cors import CORSMiddleware
|
|
19
19
|
from fastapi.responses import StreamingResponse
|
|
20
20
|
except ImportError as e: # pragma: no cover - server extra optional
|
|
@@ -23,6 +23,13 @@ except ImportError as e: # pragma: no cover - server extra optional
|
|
|
23
23
|
from pen_stack import __version__
|
|
24
24
|
from pen_stack.server.api import app as _engine_app # the v6.1 typed engine surface (reused verbatim)
|
|
25
25
|
|
|
26
|
+
|
|
27
|
+
def _require_message(req: dict) -> str:
|
|
28
|
+
msg = (req or {}).get("message")
|
|
29
|
+
if not isinstance(msg, str) or not msg.strip():
|
|
30
|
+
raise HTTPException(422, "field 'message' is required and must be a non-empty string")
|
|
31
|
+
return msg
|
|
32
|
+
|
|
26
33
|
app = FastAPI(
|
|
27
34
|
title="PEN-STACK — Web Platform",
|
|
28
35
|
version=__version__,
|
|
@@ -55,7 +62,7 @@ def chat_route(req: dict) -> dict:
|
|
|
55
62
|
{reply, tool_results, grounded, backend}."""
|
|
56
63
|
from pen_stack.web.llm import grounded_reply
|
|
57
64
|
|
|
58
|
-
return grounded_reply(req
|
|
65
|
+
return grounded_reply(_require_message(req), history=req.get("history", []),
|
|
59
66
|
allow_llm=bool(req.get("allow_llm", True)))
|
|
60
67
|
|
|
61
68
|
|
|
@@ -65,7 +72,7 @@ def chat_stream_route(req: dict) -> StreamingResponse:
|
|
|
65
72
|
applied), then emitted word-by-word so the UI can render progressively; a final event carries the dossier."""
|
|
66
73
|
from pen_stack.web.llm import grounded_reply
|
|
67
74
|
|
|
68
|
-
result = grounded_reply(req
|
|
75
|
+
result = grounded_reply(_require_message(req), history=req.get("history", []),
|
|
69
76
|
allow_llm=bool(req.get("allow_llm", True)))
|
|
70
77
|
|
|
71
78
|
def _events():
|
|
@@ -48,7 +48,10 @@ def parse_goal(message: str) -> dict:
|
|
|
48
48
|
return {"write_type": "insertion", "gene": gene, "chrom": "chr19",
|
|
49
49
|
"edit_intent": _first(message, _INTENTS, "safe_harbour_insertion"),
|
|
50
50
|
"delivery_vehicle": _first(message, _VEHICLES, "AAV_single"), "cargo_bp": cargo,
|
|
51
|
-
"cell_type": _first(message, _CELLS, "k562")
|
|
51
|
+
"cell_type": _first(message, _CELLS, "k562"),
|
|
52
|
+
# the user's plain-language goal IS the cargo-function description the Guardian must screen — so a
|
|
53
|
+
# message like "express a ricin toxin" is biosecurity-screened, not silently passed as benign.
|
|
54
|
+
"cargo_function": message.strip()}
|
|
52
55
|
|
|
53
56
|
|
|
54
57
|
def run_tools(message: str, history: list | None = None) -> dict[str, Any]:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pen-stack
|
|
3
|
-
Version: 6.2.
|
|
3
|
+
Version: 6.2.1
|
|
4
4
|
Summary: Open infrastructure for genome writing: the Writable Genome atlas, the Writer Atlas, and the Write Planner.
|
|
5
5
|
Author-email: Anees Ahmed Mahaboob Ali <ahmedaneesm@gmail.com>
|
|
6
6
|
License: MIT
|
|
@@ -90,9 +90,9 @@ every design against rule-grounded mechanism, reports calibrated confidence, cit
|
|
|
90
90
|
[](https://codecov.io/gh/ahmedanees-m/pen-stack)
|
|
91
91
|
[](LICENSE)
|
|
92
92
|
[](https://www.python.org/)
|
|
93
|
-
[](CHANGELOG.md)
|
|
94
94
|
[](docs/STABILITY.md)
|
|
95
|
-
[](tests/)
|
|
96
96
|
[](https://github.com/astral-sh/ruff)
|
|
97
97
|
[](docker/)
|
|
98
98
|
[](prereg/)
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "pen-stack"
|
|
7
|
-
version = "6.2.
|
|
7
|
+
version = "6.2.1"
|
|
8
8
|
description = "Open infrastructure for genome writing: the Writable Genome atlas, the Writer Atlas, and the Write Planner."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.11"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|