pen-stack 6.0.0__tar.gz → 6.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.
- {pen_stack-6.0.0 → pen_stack-6.1.0}/CHANGELOG.md +29 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/CITATION.cff +1 -1
- {pen_stack-6.0.0 → pen_stack-6.1.0}/PKG-INFO +101 -41
- {pen_stack-6.0.0 → pen_stack-6.1.0}/README.md +100 -40
- pen_stack-6.1.0/docs/integrations.md +87 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/__init__.py +1 -1
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/agent/mcp_server.py +65 -0
- pen_stack-6.1.0/pen_stack/api/__init__.py +12 -0
- pen_stack-6.1.0/pen_stack/api/manifest.py +93 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/server/api.py +66 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack.egg-info/PKG-INFO +101 -41
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack.egg-info/SOURCES.txt +8 -0
- pen_stack-6.1.0/prereg/SHA256_LOCK_ws_manifest.json +8 -0
- pen_stack-6.1.0/prereg/SHA256_LOCK_ws_mcp.json +8 -0
- pen_stack-6.1.0/prereg/SHA256_LOCK_ws_openapi.json +8 -0
- pen_stack-6.1.0/prereg/ws_manifest.yaml +20 -0
- pen_stack-6.1.0/prereg/ws_mcp.yaml +14 -0
- pen_stack-6.1.0/prereg/ws_openapi.yaml +13 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pyproject.toml +1 -1
- pen_stack-6.0.0/docs/integrations.md +0 -56
- {pen_stack-6.0.0 → pen_stack-6.1.0}/LICENSE +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/MANIFEST.in +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/bench/run.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/benchmarks/genome_writing_bench/LEADERBOARD.md +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/benchmarks/genome_writing_bench/README.md +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/benchmarks/genome_writing_bench/SHA256SUMS +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/benchmarks/genome_writing_bench/SUBMISSIONS.md +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/benchmarks/genome_writing_bench/tasks.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/benchmarks/genome_writing_challenge/README.md +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/benchmarks/genome_writing_challenge/SUBMISSIONS.md +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/configs/antipeg.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/configs/atlas_families.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/configs/bridge_offtarget_profile.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/configs/capsid_epitope_oracle.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/configs/capsid_sequences.fasta +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/configs/cargo_polish.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/configs/cell_types.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/configs/datasets.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/configs/delivery_constraints.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/configs/delivery_rules.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/configs/delivery_vehicles.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/configs/gates_v3.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/configs/genotoxicity_oracle.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/configs/gsh_validated_heldout.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/configs/intent_weights.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/configs/known_unknowns.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/configs/llm.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/configs/monitor_queries.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/configs/oracles/scope_cards.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/configs/rules/delivery.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/configs/rules/fold.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/configs/rules/multiplex.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/configs/rules/payload.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/configs/rules/reachability.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/configs/safety/hazard_registry.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/configs/safety/policy.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/configs/safety/probes.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/configs/score_axes.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/configs/seroprevalence.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/configs/target_sites.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/configs/universe_crosswalk.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/configs/write_types.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/configs/wtkb_curated.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/data/curated/bridge_offtarget_energetics.json +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/data/curated/bridge_offtarget_profile_measured.parquet +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/data/curated/gene_coords.parquet +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/data/curated/unified_editor_universe.parquet +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/BACKLOG.md +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/DEPLOY.md +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/INFRA.md +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/MCP.md +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/RELEASING.md +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/REPRO.md +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/STABILITY.md +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/agent.md +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/alphagenome_feasibility.md +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/autonomy.md +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/benchmark_circularity.md +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/biosecurity.md +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/build_interface.md +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/cards/atlas.md +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/cards/durability.md +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/cards/safety.md +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/challenge.md +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/closed_loop.md +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/co_scientist.md +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/co_scientist_loop.md +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/delivery.md +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/delivery_immunology.md +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/digital_twin.md +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/dissemination.md +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/environment.md +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/experiment_design.md +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/generative_design.md +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/index.md +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/mechanistic_constraints.md +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/oracles.md +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/positioning.md +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/private_data_formats.md +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/quickstart.md +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/responsible_use.md +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/rules.md +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/scope.md +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/scorecard.md +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/tutorials/compare-families.md +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/tutorials/score-deliverability.md +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/tutorials/where-can-i-write.md +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/tutorials/which-writer-reaches-locus.md +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/uncertainty.md +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/verify.md +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/world_model.md +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/writer_verification.md +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/wtkb.md +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/_resources.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/active/__init__.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/active/acquire.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/active/design.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/active/validate.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/adapt/__init__.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/adapt/finetune.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/adapt/ingest.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/adapt/pipeline.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/adapt/recalibrate.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/adapt/report.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/agent/__init__.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/agent/cite.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/agent/co_scientist.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/agent/epistemic.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/agent/guardrails.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/agent/orchestrator.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/agent/orchestrator_live.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/agent/pen_agent.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/agent/scope.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/agent/tools.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/atlas/__init__.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/atlas/build_wtkb.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/atlas/crosslink.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/atlas/expand.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/atlas/schema.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/atlas/scorecard.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/atlas/universe.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/atlas/variant_propose.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/atlas/writer_verify.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/bridge/__init__.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/bridge/activity.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/bridge/cli.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/bridge/fold_qc.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/bridge/guide_qc.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/bridge/ingest.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/bridge/offtarget.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/bridge/offtarget_energetics.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/bridge/ortholog_screen.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/bridge/pipeline.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/build/__init__.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/build/ingest.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/build/protocol.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/build/simlab.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/cli.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/data/__init__.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/data/encode.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/data/genome.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/data/ingest_chromatin.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/data/ingest_integration.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/data/ingest_safety_annot.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/data/ingest_trip.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/design/__init__.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/design/generate.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/design/pareto.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/design/space.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/env/__init__.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/env/genome_writing_env.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/env/policies.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/graph/__init__.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/graph/build.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/graph/cell_types.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/graph/ingest.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/graph/query.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/graph/schema.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/loop/__init__.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/loop/continual.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/loop/cycle.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/loop/drift.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/mech/__init__.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/mech/classify_atlas.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/mech/whitelist.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/monitor/__init__.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/monitor/europepmc.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/monitor/run.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/monitor/triage.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/oracles/__init__.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/oracles/cache.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/oracles/energetics.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/oracles/genome.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/oracles/protein_design.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/oracles/rna.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/oracles/schema.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/oracles/structure.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/oracles/vcell.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/planner/__init__.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/planner/antipeg_oracle.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/planner/capsid_epitope_oracle.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/planner/cargo.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/planner/cargo_polish.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/planner/delivery.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/planner/delivery_constraints.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/planner/delivery_immunology.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/planner/delivery_vehicles.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/planner/genotoxicity_oracle.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/planner/immune_profile.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/planner/innate_sensing.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/planner/multiplex.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/planner/optimize.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/planner/pipeline.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/planner/report.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/planner/router.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/planner/seroprevalence_oracle.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/planner/target_site.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/rag/__init__.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/rag/index.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/rag/llm.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/rag/qa.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/rules/__init__.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/rules/evaluators.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/rules/loader.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/rules/schema.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/rules/solver.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/safety/__init__.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/safety/audit.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/safety/gate.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/safety/policy.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/safety/redteam.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/safety/registry.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/safety/screen.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/score/__init__.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/score/recalibrate.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/score/therapeutic.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/server/__init__.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/twin/__init__.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/twin/calibrate.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/twin/mechanistic.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/twin/outcome.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/ui/__init__.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/ui/app.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/validate/__init__.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/validate/adapt_demo.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/validate/agent_eval.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/validate/bench_adversarial_tasks.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/validate/bench_coscientist_tasks.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/validate/bench_graph_tasks.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/validate/bench_rule_tasks.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/validate/bench_trust_tasks.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/validate/bench_writetype_tasks.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/validate/blind_gsh_discovery.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/validate/cargo_directionality.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/validate/closed_loop.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/validate/durability_baselines.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/validate/experiment_design.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/validate/forward_hypotheses.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/validate/generative_design.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/validate/guide_qc_demo.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/validate/immune_calibration.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/validate/intent_specification.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/validate/offtarget_energetics_eval.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/validate/out_of_scope_refusal.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/validate/outcome_calibration.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/validate/outcome_prediction.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/validate/paper3_benchmark.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/validate/paper4_real_validation.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/validate/paper4_validation.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/validate/protocol_safety.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/validate/safety_screening.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/validate/selective_prediction.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/validate/seq_vs_measured.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/validate/target_site_controls.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/validate/uncertainty_eval.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/validate/ungrounded_baseline.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/validate/within_locus_ranking.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/validate/writer_recovery.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/verify/__init__.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/verify/schema.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/verify/service.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/wgenome/__init__.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/wgenome/chromatin_seq.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/wgenome/durability.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/wgenome/export_tracks.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/wgenome/features.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/wgenome/gsh_baseline.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/wgenome/mesh_features.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/wgenome/ood.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/wgenome/providers.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/wgenome/safety.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/wgenome/structure3d.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/wgenome/uncertainty.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/wgenome/writability.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack.egg-info/dependency_links.txt +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack.egg-info/entry_points.txt +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack.egg-info/requires.txt +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack.egg-info/top_level.txt +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_phase0.json +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_phase1_5.json +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_phase2.json +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_phase3.json +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_a.json +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_acq.json +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_aldesign.json +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_alvalidate.json +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_atlas.json +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_b.json +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_ba.json +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_ba_v33.json +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_ba_v45.json +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_bench.json +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_c.json +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_cal.json +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_calib.json +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_challenge.json +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_cite.json +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_continual.json +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_cosci2.json +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_crit.json +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_ct.json +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_d.json +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_drift.json +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_e.json +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_env.json +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_ep.json +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_epitope.json +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_f.json +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_g.json +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_gen.json +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_genotox.json +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_graph.json +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_h.json +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_immune.json +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_ingest.json +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_innate.json +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_loop.json +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_mc.json +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_mech.json +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_mon.json +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_o.json +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_orch.json +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_outcome.json +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_pareto.json +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_peg.json +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_plan.json +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_policy.json +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_profile.json +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_proto.json +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_r.json +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_redteam.json +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_route.json +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_screen.json +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_seroprev.json +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_simlab.json +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_twincal.json +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_uq.json +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_v.json +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_vcell.json +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_wv.json +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/paper1.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/paper2.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/paper3.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/paper4.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/phase0.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_a.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_acq.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_aldesign.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_alvalidate.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_atlas.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_b.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_ba.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_ba_v33.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_ba_v45.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_bench.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_c.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_cal.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_calib.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_challenge.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_cite.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_continual.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_cosci2.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_crit.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_ct.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_d.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_drift.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_e.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_env.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_ep.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_epitope.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_f.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_g.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_gen.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_genotox.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_graph.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_h.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_immune.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_ingest.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_innate.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_loop.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_mc.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_mech.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_mon.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_o.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_orch.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_outcome.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_pareto.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_peg.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_plan.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_policy.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_profile.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_proto.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_r.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_redteam.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_route.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_screen.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_seroprev.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_simlab.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_twincal.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_uq.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_v.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_vcell.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_wv.yaml +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/scripts/p1_build_atlas.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/scripts/p1_build_durability.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/scripts/p1_export_tracks.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/scripts/p1_safety_concordance.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/scripts/p1_train_safety.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/scripts/p1_validation_report.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/scripts/p2_build_atlas.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/scripts/p3_benchmark_report.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/scripts/p4_genome_scan.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/scripts/p52_build_genotox_oracle.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/scripts/p53_build_epitope_oracle.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/scripts/ws_b_report.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/scripts/ws_c_report.py +0 -0
- {pen_stack-6.0.0 → pen_stack-6.1.0}/setup.cfg +0 -0
|
@@ -3,6 +3,35 @@
|
|
|
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.1.0] - 2026-06-11 - v6.1: The AI Integration Surface
|
|
7
|
+
|
|
8
|
+
**Post-1.0 adoption surface for AI builders.** Not new capability — the *introspectable, documented, dependable*
|
|
9
|
+
contract that lets an external agent discover what PEN-STACK offers **and what it refuses to answer**. MINOR
|
|
10
|
+
release on the stable 6.0 API. Workstreams WS-{MANIFEST,OPENAPI,MCP} + examples, SHA-locked.
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
- **WS-MANIFEST** *(the differentiator)* — `pen_stack/api/manifest.py`: `capability_manifest()` (machine-readable:
|
|
14
|
+
the stable tools, inputs/outputs, all `fabricates=False`, guarantees, stability) and **`scope_manifest()`**
|
|
15
|
+
(machine-readable: the **known-unknowns** registry + every **oracle scope card** — what PEN-STACK *refuses* to
|
|
16
|
+
answer). Generated from the live registry/scope cards (never hand-written); internal matcher fields not leaked.
|
|
17
|
+
- **WS-OPENAPI** — `pen_stack/server/api.py`: `GET /capabilities` + `GET /scope` + `POST /verify /safety /immune
|
|
18
|
+
/generate /predict /suggest /session`; FastAPI auto-generates the **OpenAPI 3.1** spec at `/openapi.json`.
|
|
19
|
+
- **WS-MCP** — `pen_stack/agent/mcp_server.py`: the self-describing **resources** `pen-stack://capabilities` +
|
|
20
|
+
`pen-stack://scope`, plus the engine tools (`safety_screen`, `immune_profile`, `generate_designs`,
|
|
21
|
+
`predict_outcome`, `suggest_experiment`, `co_scientist_session`). A hazardous design returns a **structured
|
|
22
|
+
refusal** an agent branches on.
|
|
23
|
+
- **WS-EXAMPLE** — runnable golden path: `examples/external_agent.py` (REST: discover scope → submit → branch on
|
|
24
|
+
safety/legality), `examples/mcp_client.py` (MCP), `examples/agent_tools.py` (framework-agnostic tool specs built
|
|
25
|
+
**from the live manifest** + an in-process dispatcher to the validated engine).
|
|
26
|
+
- Docs: `docs/integrations.md` rewritten as "Integrate PEN-STACK in your AI" (the four guarantees + the scope
|
|
27
|
+
contract + REST/MCP/framework quickstarts); prereg `ws_{manifest,openapi,mcp}` + SHA locks; deposit `phase_6.1/`.
|
|
28
|
+
|
|
29
|
+
### Notes
|
|
30
|
+
- **Scope is data, not a disclaimer.** The scope manifest makes the honesty machinery itself an API — the thing
|
|
31
|
+
that makes trustworthy autonomy something another system can build on. This cycle lowers the barrier to
|
|
32
|
+
adoption; it does not, by itself, create it — outreach + a real result remain the standing bottleneck. No new
|
|
33
|
+
science or validation; contracts versioned + deprecation-policed under the 1.0 commitment.
|
|
34
|
+
|
|
6
35
|
## [6.0.0] - 2026-06-11 - 1.0 — First Stable (the graduation)
|
|
7
36
|
|
|
8
37
|
**The Closed-Loop arc is complete (7/7), and PEN-STACK graduates to "1.0 — First Stable."** The public API
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pen-stack
|
|
3
|
-
Version: 6.
|
|
3
|
+
Version: 6.1.0
|
|
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/)
|
|
@@ -148,6 +148,24 @@ demonstrated (v5.12) and the benchmark went public (v5.13).
|
|
|
148
148
|
> unknown funnel remains — made legible (scope flags, known-unknowns, honest baselines, no fabrication), not
|
|
149
149
|
> hidden.
|
|
150
150
|
|
|
151
|
+
## What is new in v6.1 — The AI Integration Surface
|
|
152
|
+
|
|
153
|
+
Post-1.0, the adoption surface for **AI builders**: PEN-STACK is now **self-describing** — an external agent can
|
|
154
|
+
ask, programmatically, *"what can you do, and what do you refuse to answer?"* and get a typed, honest answer it can
|
|
155
|
+
route on.
|
|
156
|
+
|
|
157
|
+
| Workstream | What it adds | Result |
|
|
158
|
+
|---|---|---|
|
|
159
|
+
| **MANIFEST** *(the differentiator)* | `pen_stack/api/manifest.py` | `capability_manifest()` (tools, all `fabricates=False`) + **`scope_manifest()`** — the known-unknowns + oracle scope cards as **machine-readable data** (what PEN-STACK *refuses* to answer) |
|
|
160
|
+
| **OPENAPI** | `server/api.py` | `GET /capabilities` + `GET /scope` + tool routes (`/verify /safety /immune /generate /predict /suggest /session`); auto **OpenAPI 3.1** at `/openapi.json` |
|
|
161
|
+
| **MCP** | `agent/mcp_server.py` | resources `pen-stack://capabilities` + `pen-stack://scope`; engine tools; a hazardous design returns a **structured refusal** |
|
|
162
|
+
| **EXAMPLE** | `examples/` | golden-path `external_agent.py` (REST), `mcp_client.py` (MCP), `agent_tools.py` (framework specs built from the live manifest + dispatcher) |
|
|
163
|
+
|
|
164
|
+
**Scope is data, not a disclaimer** — the honesty machinery becomes an API, the thing that makes trustworthy
|
|
165
|
+
autonomy something another system can build on. See [Integrate PEN-STACK in your AI](docs/integrations.md) and
|
|
166
|
+
`prereg/ws_{manifest,openapi,mcp}.yaml`. (Lowers the adoption barrier; outreach + a real result remain the
|
|
167
|
+
standing bottleneck — no new science.)
|
|
168
|
+
|
|
151
169
|
## What is new in v5.13 — The Standard (Genome-Writing Challenge + Co-Scientist II)
|
|
152
170
|
|
|
153
171
|
v5.13 (**Closed-Loop arc, Cycle 7 of 7**) makes PEN-STACK the field's reference and its most useful face: the
|
|
@@ -520,45 +538,68 @@ benchmark with deterministic scorers and no circular labels. See
|
|
|
520
538
|
|
|
521
539
|
## Architecture
|
|
522
540
|
|
|
541
|
+
At **1.0**, PEN-STACK is a **closed design→build→test→learn loop** standing on two reference layers, the oracle
|
|
542
|
+
mesh, and the data foundation — with **the verifier at the centre as the discriminator**: nothing is generated,
|
|
543
|
+
built, or learned unless it passes *safe + legal + calibrated*, and no number is fabricated. The loop stops
|
|
544
|
+
deliberately at **autonomy Level 3** (a human in control at every gate).
|
|
545
|
+
|
|
523
546
|
```
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
547
|
+
+-----------------------------------------------------------------------+
|
|
548
|
+
| THE FACES (v5.13 / 1.0) |
|
|
549
|
+
| Co-Scientist (drives the loop) . Genome-Writing Challenge (held-out) |
|
|
550
|
+
| . MCP server . REST API . Streamlit web app |
|
|
551
|
+
+-----------------------------------^-----------------------------------+
|
|
552
|
+
|
|
|
553
|
+
+----------------------------------------------------+---------------------------------------------------+
|
|
554
|
+
| THE CLOSED LOOP (v5.12 - autonomy Level 3; a human in control at safety / build / belief-admission) |
|
|
555
|
+
| |
|
|
556
|
+
| GENERATE ----> PREDICT ----> DECIDE ----> [ SAFETY ] ----> BUILD ----> INGEST ----> LEARN |
|
|
557
|
+
| v5.8 v5.9 v5.10 v5.7 v5.11 v4.5 gate v5.12 |
|
|
558
|
+
| generative digital experiment GUARDIAN protocol (no auto- continual |
|
|
559
|
+
| designer twin designer gate export edit) + drift |
|
|
560
|
+
| (Pareto) (OOD-gated) (EIG+immVOI) (refuse=stop) (DRAFT) (versioned) |
|
|
561
|
+
| |
|
|
562
|
+
| Every candidate is DISCARDED unless it passes THE VERIFIER below. No number is fabricated. |
|
|
563
|
+
+----------------------------------------------------+---------------------------------------------------+
|
|
564
|
+
|
|
|
565
|
+
+-----------------------------------v-----------------------------------+
|
|
566
|
+
| THE VERIFIER verify(design) -> Verdict (the discriminator) |
|
|
567
|
+
| legality (v3.3 rules) . SAFETY gate (v5.7, runs first) . |
|
|
568
|
+
| calibrated confidence (v3.2) . per-axis immune-risk profile (v5.6) |
|
|
569
|
+
+-----------------------------------^-----------------------------------+
|
|
570
|
+
|
|
|
571
|
+
+--------------------------------+-------------------+----------------+--------------------------------+
|
|
572
|
+
| WRITABLE GENOME (Paper 1) | WRITER ATLAS (Paper 2) | ORACLE MESH (v4.0) |
|
|
573
|
+
| learned safety x durability | 33,370 systems on measured axes | AF3 . Boltz-2 . Chai-1 . ESM3 |
|
|
574
|
+
| x reachability | + Writer-Targeting KB (8 families)| . Evo2 . AlphaGenome . RFdiff. |
|
|
575
|
+
| -> writability profile | <----- reachability -----> | ProteinMPNN . v5.9 STATE/scGPT |
|
|
576
|
+
| + WRITE PLANNER (Paper 3) | + BRIDGE OFF-TARGET ENGINE (P4) | one OracleResult contract, |
|
|
577
|
+
| inverse design (edit_intent)| | OOD-gated, generative=candidate|
|
|
578
|
+
| + DELIVERY IMMUNOLOGY (v5.1-6) per-axis immune-risk profile (each axis validated-or-proxy, never collapsed) |
|
|
579
|
+
| + WORLD-MODEL GRAPH (v4.5) typed provenanced edges, gated living loop (propose-only) |
|
|
580
|
+
+--------------------------------+------------------------------------+--------------------------------+
|
|
581
|
+
+----------------------------------------------------------------------------------------------------+
|
|
582
|
+
| DATA FOUNDATION (bulk-downloadable, public) |
|
|
583
|
+
| hg38 . ENCODE/Roadmap chromatin . Hi-C/LADs . TRIP position effects . RID/VISDB/MLV integration . |
|
|
584
|
+
| clinical genotoxic CIS . COSMIC . DepMap . gnomAD . GTEx . UniProt . Pfam/InterPro . |
|
|
585
|
+
| bridge off-target + DMS (Perry 2025) . anti-vector + anti-PEG serosurveys (immunology) |
|
|
586
|
+
+----------------------------------------------------------------------------------------------------+
|
|
557
587
|
```
|
|
558
588
|
|
|
589
|
+
**Reading the loop.** A *goal* enters at the top. The **generative designer** (v5.8) proposes candidate
|
|
590
|
+
writing systems; the **twin** (v5.9) predicts their calibrated outcomes; the **experiment designer** (v5.10)
|
|
591
|
+
chooses the most informative ones to test; the **Guardian** (v5.7) refuses anything hazardous; the **build
|
|
592
|
+
interface** (v5.11) exports a safety-gated protocol DRAFT and ingests results through the v4.5 gate; and
|
|
593
|
+
**continual learning** (v5.12) recalibrates, drift-aware, versioned and reversible. Each stage is gated by the
|
|
594
|
+
**verifier** — the single discriminator that keeps the whole loop honest. Two **faces** sit on top: a
|
|
595
|
+
**co-scientist** that drives the loop for a working scientist, and the **Genome-Writing Challenge**, an open
|
|
596
|
+
held-out benchmark others build to.
|
|
597
|
+
|
|
559
598
|
## How it works
|
|
560
599
|
|
|
561
|
-
PEN-STACK is organised as **
|
|
600
|
+
PEN-STACK is organised as **the data + reference layers, the oracle mesh, the verifier (the discriminator), the
|
|
601
|
+
closed loop, and the faces** — each layer below feeding the one above, with the verifier keeping the whole loop
|
|
602
|
+
honest.
|
|
562
603
|
|
|
563
604
|
| Component | Module | Role | Status |
|
|
564
605
|
|---|---|---|---|
|
|
@@ -569,6 +610,16 @@ PEN-STACK is organised as **two reference layers + one engine + a services layer
|
|
|
569
610
|
| **Delivery immunology** (v5.1-5.6) | `pen_stack.planner.delivery_immunology` + `{genotoxicity,capsid_epitope,seroprevalence,antipeg}_oracle`, `innate_sensing`, `immune_profile`; `validate.immune_calibration` | safety↔efficacy balance over the 8-vehicle palette; immune axes **computed/grounded from data+sequence** + anti-PEG (gates LNP re-dosing) → a unified per-axis `Verdict.immune_profile` (each axis validated-or-proxy, never collapsed); magnitude + patient titer stay known-unknowns ([docs](docs/delivery_immunology.md)) | M2 |
|
|
570
611
|
| **Agentic platform** | `pen_stack.agent` | goal to cited, auditable plan; MCP server; one-command deploy | Paper 3 |
|
|
571
612
|
| **Bridge off-target engine** | `pen_stack.bridge` | "CRISPOR for bridge recombinases" + guide QC (v3.1) | Paper 4 |
|
|
613
|
+
| **Oracle Mesh** (v4.0) | `pen_stack.oracles` | one `OracleResult` contract over AF3/Boltz-2/Chai-1/ESM3/Evo2/AlphaGenome/STATE/scGPT; OOD-gated; generative=candidate | v4.0 |
|
|
614
|
+
| **World-Model Graph** (v4.5) | `pen_stack.graph` | living knowledge graph; typed provenanced edges; gated propose-only loop | v4.5 |
|
|
615
|
+
| **The Verifier** (v3.3+) | `pen_stack.verify` | `verify(design) -> Verdict`: legality + **safety** + calibrated confidence + immune profile — the discriminator | v3.3 |
|
|
616
|
+
| **The Guardian** (v5.7) | `pen_stack.safety` | biosecurity / dual-use gate; runs first in `verify()`; refuse short-circuits; tamper-evident audit | v5.7 |
|
|
617
|
+
| **Generative Designer** (v5.8) | `pen_stack.design` | generate → verifier-as-discriminator (hazardous/illegal discarded); Pareto with grounded immune axis | v5.8 |
|
|
618
|
+
| **Digital Twin** (v5.9) | `pen_stack.twin` | calibrated, OOD-gated outcome prediction; immune-outcome from v5.6; phenotype-bounded | v5.9 |
|
|
619
|
+
| **Experiment Designer** (v5.10) | `pen_stack.active` | active learning (EIG + immune-VOI); retrospective active-vs-random (reps+CI) | v5.10 |
|
|
620
|
+
| **Build Interface** (v5.11) | `pen_stack.build` | safety-gated protocol export (DRAFT + immune metadata); gated ingestion; sim-lab | v5.11 |
|
|
621
|
+
| **The Closed Loop** (v5.12) | `pen_stack.loop` | one gated DBTL command; autonomy **Level 3**; drift-aware; versioned/reversible continual learning | v5.12 |
|
|
622
|
+
| **Co-Scientist + Challenge** (v5.13) | `pen_stack.agent.co_scientist`, `benchmarks/genome_writing_challenge` | the co-scientist drives the loop; the public held-out benchmark others build to | v5.13 |
|
|
572
623
|
| **Genome-Writing Bench** (v3.1) | `benchmarks/`, `bench/run.py` | first writing-side benchmark; deterministic scorers, leaderboard | M2 |
|
|
573
624
|
| **PEN-Agent** (v3.1) | `pen_stack.agent.pen_agent` | grounded write-planning state machine; zero fabrication | M2 |
|
|
574
625
|
| **3D structural risk** (v3.1) | `pen_stack.wgenome.structure3d` | AlphaGenome contact-map deltas as a safety axis | M1 |
|
|
@@ -728,12 +779,14 @@ pen-stack/
|
|
|
728
779
|
│ │ v5.11 protocol_safety (build-interface hard-gate: cleared exports w/ immune metadata · hazard+illegal blocked · sim loop completes) /
|
|
729
780
|
│ │ v5.12 closed_loop (loop-integrity hard-gate: gated end-to-end run · Level-3 human-in-control · drift detection · versioned/reversible continual learning)
|
|
730
781
|
│ ├── data/ ingestion (genome, chromatin, integration, TRIP, safety annotations)
|
|
731
|
-
│ ├──
|
|
782
|
+
│ ├── api/ v6.1 AI integration surface: manifest (capability_manifest + scope_manifest = machine-readable known-unknowns + oracle scope cards)
|
|
783
|
+
│ ├── server/api.py FastAPI REST (atlas, crosslink, writable, plan, bridge, ask; v3.3 verify; v6.1 /capabilities /scope /safety /immune /generate /predict /suggest /session + openapi.json 3.1)
|
|
732
784
|
│ ├── ui/app.py Streamlit web app (16 pages; v3.2 PEN-Agent shows confidence + epistemic status)
|
|
733
785
|
│ └── cli.py unified CLI
|
|
734
786
|
├── benchmarks/genome_writing_bench/ Genome-Writing Bench v0.3.8 (T1-T16 + co_scientist + safety_screening + generative_design + outcome_prediction + experiment_design + protocol_safety + closed_loop; tasks / harness / solvers / LEADERBOARD / SHAs)
|
|
735
787
|
├── benchmarks/genome_writing_challenge/ v5.13 the public Genome-Writing Challenge (held-out rounds + immune-risk task + submission API; harness / run / README / SUBMISSIONS)
|
|
736
788
|
├── bench/run.py one-command bench entrypoint (--agent, --verify)
|
|
789
|
+
├── examples/ v6.1 runnable golden path: external_agent.py (REST) / mcp_client.py (MCP) / agent_tools.py (framework-agnostic tool specs from the live manifest + dispatcher)
|
|
737
790
|
├── scripts/ reproducible pipeline drivers (p1_*, p2_*, p4_*, p52/p53 delivery-immunology oracle builds, ws_*_report)
|
|
738
791
|
├── configs/ pinned datasets + thresholds + curation (YAML); v3.2 known_unknowns /
|
|
739
792
|
│ target_sites / delivery_constraints; v5.1-5.6 delivery_vehicles immune_safety /
|
|
@@ -741,18 +794,25 @@ pen-stack/
|
|
|
741
794
|
│ seroprevalence / antipeg + oracles/scope_cards (+ v5.6 known_unknowns:
|
|
742
795
|
│ cd4_mhcii_help / preexisting_capsid_tcell / complement_carpa);
|
|
743
796
|
│ v5.7 safety/{hazard_registry,policy,probes} (Guardian; function/family/taxon-level only)
|
|
744
|
-
├── prereg/ SHA-locked success criteria (paper1..4 + ws_a..ws_h + v3.2-
|
|
797
|
+
├── prereg/ SHA-locked success criteria (paper1..4 + ws_a..ws_h + v3.2-v6.0 ws_{uq,ep,mc,ba,
|
|
745
798
|
│ r,v,route,env,bench,cal,o,wv,atlas,graph,mon,ct,plan,crit,cite,immune,
|
|
746
799
|
│ genotox,epitope,innate,seroprev,peg,calib,profile,screen,policy,redteam,
|
|
747
800
|
│ gen,pareto,orch,vcell,mech,outcome,twincal,acq,aldesign,alvalidate,
|
|
748
|
-
│ proto,ingest,simlab,loop,continual,drift,challenge,cosci2
|
|
801
|
+
│ proto,ingest,simlab,loop,continual,drift,challenge,cosci2,
|
|
802
|
+
│ manifest,openapi,mcp} + SHA256 locks)
|
|
749
803
|
├── data/curated/ small committed tables (universe, gene coords, measured bridge profile,
|
|
750
804
|
│ v3.2 bridge_offtarget_energetics.json)
|
|
751
805
|
├── data/llm_bench_cache/ 28 cached ungrounded-LLM transcripts (T7, offline/CI replay)
|
|
752
806
|
├── data/alphagenome_cache/ cached AlphaGenome predictions (tracks + contact maps; offline reproducibility)
|
|
753
807
|
├── tests/unit/ unit + regression + blind-validation suite
|
|
754
808
|
├── docs/ mkdocs site (cards, tutorials, INFRA, DEPLOY, MCP);
|
|
755
|
-
│ v3.2: uncertainty.md / scope.md / mechanistic_constraints.md / BACKLOG.md
|
|
809
|
+
│ v3.2: uncertainty.md / scope.md / mechanistic_constraints.md / BACKLOG.md;
|
|
810
|
+
│ v4.0-4.5: oracles.md / writer_verification.md / world_model.md;
|
|
811
|
+
│ v5.0-5.6: co_scientist.md / delivery_immunology.md;
|
|
812
|
+
│ v5.7-v6.0 (the closed loop): responsible_use.md / biosecurity.md /
|
|
813
|
+
│ generative_design.md / digital_twin.md / experiment_design.md /
|
|
814
|
+
│ build_interface.md / closed_loop.md / autonomy.md / challenge.md /
|
|
815
|
+
│ co_scientist_loop.md / integrations.md / STABILITY.md (1.0 API freeze)
|
|
756
816
|
├── docker/ CUDA image + UI image + pinned requirements
|
|
757
817
|
├── tools/penctl.py laptop<->VM orchestrator (paramiko SSH/SFTP, Docker-only)
|
|
758
818
|
├── docker-compose.yml one-command self-hostable platform
|
|
@@ -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/)
|
|
@@ -73,6 +73,24 @@ demonstrated (v5.12) and the benchmark went public (v5.13).
|
|
|
73
73
|
> unknown funnel remains — made legible (scope flags, known-unknowns, honest baselines, no fabrication), not
|
|
74
74
|
> hidden.
|
|
75
75
|
|
|
76
|
+
## What is new in v6.1 — The AI Integration Surface
|
|
77
|
+
|
|
78
|
+
Post-1.0, the adoption surface for **AI builders**: PEN-STACK is now **self-describing** — an external agent can
|
|
79
|
+
ask, programmatically, *"what can you do, and what do you refuse to answer?"* and get a typed, honest answer it can
|
|
80
|
+
route on.
|
|
81
|
+
|
|
82
|
+
| Workstream | What it adds | Result |
|
|
83
|
+
|---|---|---|
|
|
84
|
+
| **MANIFEST** *(the differentiator)* | `pen_stack/api/manifest.py` | `capability_manifest()` (tools, all `fabricates=False`) + **`scope_manifest()`** — the known-unknowns + oracle scope cards as **machine-readable data** (what PEN-STACK *refuses* to answer) |
|
|
85
|
+
| **OPENAPI** | `server/api.py` | `GET /capabilities` + `GET /scope` + tool routes (`/verify /safety /immune /generate /predict /suggest /session`); auto **OpenAPI 3.1** at `/openapi.json` |
|
|
86
|
+
| **MCP** | `agent/mcp_server.py` | resources `pen-stack://capabilities` + `pen-stack://scope`; engine tools; a hazardous design returns a **structured refusal** |
|
|
87
|
+
| **EXAMPLE** | `examples/` | golden-path `external_agent.py` (REST), `mcp_client.py` (MCP), `agent_tools.py` (framework specs built from the live manifest + dispatcher) |
|
|
88
|
+
|
|
89
|
+
**Scope is data, not a disclaimer** — the honesty machinery becomes an API, the thing that makes trustworthy
|
|
90
|
+
autonomy something another system can build on. See [Integrate PEN-STACK in your AI](docs/integrations.md) and
|
|
91
|
+
`prereg/ws_{manifest,openapi,mcp}.yaml`. (Lowers the adoption barrier; outreach + a real result remain the
|
|
92
|
+
standing bottleneck — no new science.)
|
|
93
|
+
|
|
76
94
|
## What is new in v5.13 — The Standard (Genome-Writing Challenge + Co-Scientist II)
|
|
77
95
|
|
|
78
96
|
v5.13 (**Closed-Loop arc, Cycle 7 of 7**) makes PEN-STACK the field's reference and its most useful face: the
|
|
@@ -445,45 +463,68 @@ benchmark with deterministic scorers and no circular labels. See
|
|
|
445
463
|
|
|
446
464
|
## Architecture
|
|
447
465
|
|
|
466
|
+
At **1.0**, PEN-STACK is a **closed design→build→test→learn loop** standing on two reference layers, the oracle
|
|
467
|
+
mesh, and the data foundation — with **the verifier at the centre as the discriminator**: nothing is generated,
|
|
468
|
+
built, or learned unless it passes *safe + legal + calibrated*, and no number is fabricated. The loop stops
|
|
469
|
+
deliberately at **autonomy Level 3** (a human in control at every gate).
|
|
470
|
+
|
|
448
471
|
```
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
472
|
+
+-----------------------------------------------------------------------+
|
|
473
|
+
| THE FACES (v5.13 / 1.0) |
|
|
474
|
+
| Co-Scientist (drives the loop) . Genome-Writing Challenge (held-out) |
|
|
475
|
+
| . MCP server . REST API . Streamlit web app |
|
|
476
|
+
+-----------------------------------^-----------------------------------+
|
|
477
|
+
|
|
|
478
|
+
+----------------------------------------------------+---------------------------------------------------+
|
|
479
|
+
| THE CLOSED LOOP (v5.12 - autonomy Level 3; a human in control at safety / build / belief-admission) |
|
|
480
|
+
| |
|
|
481
|
+
| GENERATE ----> PREDICT ----> DECIDE ----> [ SAFETY ] ----> BUILD ----> INGEST ----> LEARN |
|
|
482
|
+
| v5.8 v5.9 v5.10 v5.7 v5.11 v4.5 gate v5.12 |
|
|
483
|
+
| generative digital experiment GUARDIAN protocol (no auto- continual |
|
|
484
|
+
| designer twin designer gate export edit) + drift |
|
|
485
|
+
| (Pareto) (OOD-gated) (EIG+immVOI) (refuse=stop) (DRAFT) (versioned) |
|
|
486
|
+
| |
|
|
487
|
+
| Every candidate is DISCARDED unless it passes THE VERIFIER below. No number is fabricated. |
|
|
488
|
+
+----------------------------------------------------+---------------------------------------------------+
|
|
489
|
+
|
|
|
490
|
+
+-----------------------------------v-----------------------------------+
|
|
491
|
+
| THE VERIFIER verify(design) -> Verdict (the discriminator) |
|
|
492
|
+
| legality (v3.3 rules) . SAFETY gate (v5.7, runs first) . |
|
|
493
|
+
| calibrated confidence (v3.2) . per-axis immune-risk profile (v5.6) |
|
|
494
|
+
+-----------------------------------^-----------------------------------+
|
|
495
|
+
|
|
|
496
|
+
+--------------------------------+-------------------+----------------+--------------------------------+
|
|
497
|
+
| WRITABLE GENOME (Paper 1) | WRITER ATLAS (Paper 2) | ORACLE MESH (v4.0) |
|
|
498
|
+
| learned safety x durability | 33,370 systems on measured axes | AF3 . Boltz-2 . Chai-1 . ESM3 |
|
|
499
|
+
| x reachability | + Writer-Targeting KB (8 families)| . Evo2 . AlphaGenome . RFdiff. |
|
|
500
|
+
| -> writability profile | <----- reachability -----> | ProteinMPNN . v5.9 STATE/scGPT |
|
|
501
|
+
| + WRITE PLANNER (Paper 3) | + BRIDGE OFF-TARGET ENGINE (P4) | one OracleResult contract, |
|
|
502
|
+
| inverse design (edit_intent)| | OOD-gated, generative=candidate|
|
|
503
|
+
| + DELIVERY IMMUNOLOGY (v5.1-6) per-axis immune-risk profile (each axis validated-or-proxy, never collapsed) |
|
|
504
|
+
| + WORLD-MODEL GRAPH (v4.5) typed provenanced edges, gated living loop (propose-only) |
|
|
505
|
+
+--------------------------------+------------------------------------+--------------------------------+
|
|
506
|
+
+----------------------------------------------------------------------------------------------------+
|
|
507
|
+
| DATA FOUNDATION (bulk-downloadable, public) |
|
|
508
|
+
| hg38 . ENCODE/Roadmap chromatin . Hi-C/LADs . TRIP position effects . RID/VISDB/MLV integration . |
|
|
509
|
+
| clinical genotoxic CIS . COSMIC . DepMap . gnomAD . GTEx . UniProt . Pfam/InterPro . |
|
|
510
|
+
| bridge off-target + DMS (Perry 2025) . anti-vector + anti-PEG serosurveys (immunology) |
|
|
511
|
+
+----------------------------------------------------------------------------------------------------+
|
|
482
512
|
```
|
|
483
513
|
|
|
514
|
+
**Reading the loop.** A *goal* enters at the top. The **generative designer** (v5.8) proposes candidate
|
|
515
|
+
writing systems; the **twin** (v5.9) predicts their calibrated outcomes; the **experiment designer** (v5.10)
|
|
516
|
+
chooses the most informative ones to test; the **Guardian** (v5.7) refuses anything hazardous; the **build
|
|
517
|
+
interface** (v5.11) exports a safety-gated protocol DRAFT and ingests results through the v4.5 gate; and
|
|
518
|
+
**continual learning** (v5.12) recalibrates, drift-aware, versioned and reversible. Each stage is gated by the
|
|
519
|
+
**verifier** — the single discriminator that keeps the whole loop honest. Two **faces** sit on top: a
|
|
520
|
+
**co-scientist** that drives the loop for a working scientist, and the **Genome-Writing Challenge**, an open
|
|
521
|
+
held-out benchmark others build to.
|
|
522
|
+
|
|
484
523
|
## How it works
|
|
485
524
|
|
|
486
|
-
PEN-STACK is organised as **
|
|
525
|
+
PEN-STACK is organised as **the data + reference layers, the oracle mesh, the verifier (the discriminator), the
|
|
526
|
+
closed loop, and the faces** — each layer below feeding the one above, with the verifier keeping the whole loop
|
|
527
|
+
honest.
|
|
487
528
|
|
|
488
529
|
| Component | Module | Role | Status |
|
|
489
530
|
|---|---|---|---|
|
|
@@ -494,6 +535,16 @@ PEN-STACK is organised as **two reference layers + one engine + a services layer
|
|
|
494
535
|
| **Delivery immunology** (v5.1-5.6) | `pen_stack.planner.delivery_immunology` + `{genotoxicity,capsid_epitope,seroprevalence,antipeg}_oracle`, `innate_sensing`, `immune_profile`; `validate.immune_calibration` | safety↔efficacy balance over the 8-vehicle palette; immune axes **computed/grounded from data+sequence** + anti-PEG (gates LNP re-dosing) → a unified per-axis `Verdict.immune_profile` (each axis validated-or-proxy, never collapsed); magnitude + patient titer stay known-unknowns ([docs](docs/delivery_immunology.md)) | M2 |
|
|
495
536
|
| **Agentic platform** | `pen_stack.agent` | goal to cited, auditable plan; MCP server; one-command deploy | Paper 3 |
|
|
496
537
|
| **Bridge off-target engine** | `pen_stack.bridge` | "CRISPOR for bridge recombinases" + guide QC (v3.1) | Paper 4 |
|
|
538
|
+
| **Oracle Mesh** (v4.0) | `pen_stack.oracles` | one `OracleResult` contract over AF3/Boltz-2/Chai-1/ESM3/Evo2/AlphaGenome/STATE/scGPT; OOD-gated; generative=candidate | v4.0 |
|
|
539
|
+
| **World-Model Graph** (v4.5) | `pen_stack.graph` | living knowledge graph; typed provenanced edges; gated propose-only loop | v4.5 |
|
|
540
|
+
| **The Verifier** (v3.3+) | `pen_stack.verify` | `verify(design) -> Verdict`: legality + **safety** + calibrated confidence + immune profile — the discriminator | v3.3 |
|
|
541
|
+
| **The Guardian** (v5.7) | `pen_stack.safety` | biosecurity / dual-use gate; runs first in `verify()`; refuse short-circuits; tamper-evident audit | v5.7 |
|
|
542
|
+
| **Generative Designer** (v5.8) | `pen_stack.design` | generate → verifier-as-discriminator (hazardous/illegal discarded); Pareto with grounded immune axis | v5.8 |
|
|
543
|
+
| **Digital Twin** (v5.9) | `pen_stack.twin` | calibrated, OOD-gated outcome prediction; immune-outcome from v5.6; phenotype-bounded | v5.9 |
|
|
544
|
+
| **Experiment Designer** (v5.10) | `pen_stack.active` | active learning (EIG + immune-VOI); retrospective active-vs-random (reps+CI) | v5.10 |
|
|
545
|
+
| **Build Interface** (v5.11) | `pen_stack.build` | safety-gated protocol export (DRAFT + immune metadata); gated ingestion; sim-lab | v5.11 |
|
|
546
|
+
| **The Closed Loop** (v5.12) | `pen_stack.loop` | one gated DBTL command; autonomy **Level 3**; drift-aware; versioned/reversible continual learning | v5.12 |
|
|
547
|
+
| **Co-Scientist + Challenge** (v5.13) | `pen_stack.agent.co_scientist`, `benchmarks/genome_writing_challenge` | the co-scientist drives the loop; the public held-out benchmark others build to | v5.13 |
|
|
497
548
|
| **Genome-Writing Bench** (v3.1) | `benchmarks/`, `bench/run.py` | first writing-side benchmark; deterministic scorers, leaderboard | M2 |
|
|
498
549
|
| **PEN-Agent** (v3.1) | `pen_stack.agent.pen_agent` | grounded write-planning state machine; zero fabrication | M2 |
|
|
499
550
|
| **3D structural risk** (v3.1) | `pen_stack.wgenome.structure3d` | AlphaGenome contact-map deltas as a safety axis | M1 |
|
|
@@ -653,12 +704,14 @@ pen-stack/
|
|
|
653
704
|
│ │ v5.11 protocol_safety (build-interface hard-gate: cleared exports w/ immune metadata · hazard+illegal blocked · sim loop completes) /
|
|
654
705
|
│ │ v5.12 closed_loop (loop-integrity hard-gate: gated end-to-end run · Level-3 human-in-control · drift detection · versioned/reversible continual learning)
|
|
655
706
|
│ ├── data/ ingestion (genome, chromatin, integration, TRIP, safety annotations)
|
|
656
|
-
│ ├──
|
|
707
|
+
│ ├── api/ v6.1 AI integration surface: manifest (capability_manifest + scope_manifest = machine-readable known-unknowns + oracle scope cards)
|
|
708
|
+
│ ├── server/api.py FastAPI REST (atlas, crosslink, writable, plan, bridge, ask; v3.3 verify; v6.1 /capabilities /scope /safety /immune /generate /predict /suggest /session + openapi.json 3.1)
|
|
657
709
|
│ ├── ui/app.py Streamlit web app (16 pages; v3.2 PEN-Agent shows confidence + epistemic status)
|
|
658
710
|
│ └── cli.py unified CLI
|
|
659
711
|
├── benchmarks/genome_writing_bench/ Genome-Writing Bench v0.3.8 (T1-T16 + co_scientist + safety_screening + generative_design + outcome_prediction + experiment_design + protocol_safety + closed_loop; tasks / harness / solvers / LEADERBOARD / SHAs)
|
|
660
712
|
├── benchmarks/genome_writing_challenge/ v5.13 the public Genome-Writing Challenge (held-out rounds + immune-risk task + submission API; harness / run / README / SUBMISSIONS)
|
|
661
713
|
├── bench/run.py one-command bench entrypoint (--agent, --verify)
|
|
714
|
+
├── examples/ v6.1 runnable golden path: external_agent.py (REST) / mcp_client.py (MCP) / agent_tools.py (framework-agnostic tool specs from the live manifest + dispatcher)
|
|
662
715
|
├── scripts/ reproducible pipeline drivers (p1_*, p2_*, p4_*, p52/p53 delivery-immunology oracle builds, ws_*_report)
|
|
663
716
|
├── configs/ pinned datasets + thresholds + curation (YAML); v3.2 known_unknowns /
|
|
664
717
|
│ target_sites / delivery_constraints; v5.1-5.6 delivery_vehicles immune_safety /
|
|
@@ -666,18 +719,25 @@ pen-stack/
|
|
|
666
719
|
│ seroprevalence / antipeg + oracles/scope_cards (+ v5.6 known_unknowns:
|
|
667
720
|
│ cd4_mhcii_help / preexisting_capsid_tcell / complement_carpa);
|
|
668
721
|
│ v5.7 safety/{hazard_registry,policy,probes} (Guardian; function/family/taxon-level only)
|
|
669
|
-
├── prereg/ SHA-locked success criteria (paper1..4 + ws_a..ws_h + v3.2-
|
|
722
|
+
├── prereg/ SHA-locked success criteria (paper1..4 + ws_a..ws_h + v3.2-v6.0 ws_{uq,ep,mc,ba,
|
|
670
723
|
│ r,v,route,env,bench,cal,o,wv,atlas,graph,mon,ct,plan,crit,cite,immune,
|
|
671
724
|
│ genotox,epitope,innate,seroprev,peg,calib,profile,screen,policy,redteam,
|
|
672
725
|
│ gen,pareto,orch,vcell,mech,outcome,twincal,acq,aldesign,alvalidate,
|
|
673
|
-
│ proto,ingest,simlab,loop,continual,drift,challenge,cosci2
|
|
726
|
+
│ proto,ingest,simlab,loop,continual,drift,challenge,cosci2,
|
|
727
|
+
│ manifest,openapi,mcp} + SHA256 locks)
|
|
674
728
|
├── data/curated/ small committed tables (universe, gene coords, measured bridge profile,
|
|
675
729
|
│ v3.2 bridge_offtarget_energetics.json)
|
|
676
730
|
├── data/llm_bench_cache/ 28 cached ungrounded-LLM transcripts (T7, offline/CI replay)
|
|
677
731
|
├── data/alphagenome_cache/ cached AlphaGenome predictions (tracks + contact maps; offline reproducibility)
|
|
678
732
|
├── tests/unit/ unit + regression + blind-validation suite
|
|
679
733
|
├── docs/ mkdocs site (cards, tutorials, INFRA, DEPLOY, MCP);
|
|
680
|
-
│ v3.2: uncertainty.md / scope.md / mechanistic_constraints.md / BACKLOG.md
|
|
734
|
+
│ v3.2: uncertainty.md / scope.md / mechanistic_constraints.md / BACKLOG.md;
|
|
735
|
+
│ v4.0-4.5: oracles.md / writer_verification.md / world_model.md;
|
|
736
|
+
│ v5.0-5.6: co_scientist.md / delivery_immunology.md;
|
|
737
|
+
│ v5.7-v6.0 (the closed loop): responsible_use.md / biosecurity.md /
|
|
738
|
+
│ generative_design.md / digital_twin.md / experiment_design.md /
|
|
739
|
+
│ build_interface.md / closed_loop.md / autonomy.md / challenge.md /
|
|
740
|
+
│ co_scientist_loop.md / integrations.md / STABILITY.md (1.0 API freeze)
|
|
681
741
|
├── docker/ CUDA image + UI image + pinned requirements
|
|
682
742
|
├── tools/penctl.py laptop<->VM orchestrator (paramiko SSH/SFTP, Docker-only)
|
|
683
743
|
├── docker-compose.yml one-command self-hostable platform
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# Integrate PEN-STACK in your AI (v6.1)
|
|
2
|
+
|
|
3
|
+
PEN-STACK is a **grounding substrate** an AI agent can depend on. From v6.1 the AI-facing surface is
|
|
4
|
+
**self-describing**: an agent can ask, programmatically, *"what can you do, and what do you refuse to answer?"* —
|
|
5
|
+
and get a typed, honest answer it can route on. Integrate in minutes over REST or MCP.
|
|
6
|
+
|
|
7
|
+
## The four guarantees
|
|
8
|
+
|
|
9
|
+
When your agent calls PEN-STACK, every answer carries:
|
|
10
|
+
|
|
11
|
+
1. **Rule-grounded legality** — a design is legal/illegal per machine-readable rules, with the *named* rule cited.
|
|
12
|
+
2. **Calibrated confidence** — soft scores come with conformal intervals; out-of-distribution is flagged.
|
|
13
|
+
3. **Explicit scope** — what PEN-STACK *cannot* tell you is returned as data (`out_of_scope` / `extrapolating`), never guessed.
|
|
14
|
+
4. **Biosecurity safety** — a dual-use/hazardous design is refused or escalated, as a structured verdict.
|
|
15
|
+
|
|
16
|
+
…and **no fabrication**: every number is computed by a validated tool.
|
|
17
|
+
|
|
18
|
+
## Discover capabilities — and scope (the differentiator)
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
GET /capabilities # machine-readable: the tools, inputs, outputs, stability
|
|
22
|
+
GET /scope # machine-readable: the known-unknowns + every oracle's in-distribution envelope
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
`/scope` is the contract that makes depending on PEN-STACK safe: it lists, as data, the questions PEN-STACK
|
|
26
|
+
**refuses** to answer (phenotype, in-vivo immunogenicity magnitude, long-term clinical durability, …) and what
|
|
27
|
+
each wrapped model is *not* valid for. Your agent reads it and never builds on a non-answer.
|
|
28
|
+
|
|
29
|
+
```python
|
|
30
|
+
from pen_stack.api import capability_manifest, scope_manifest # in-process
|
|
31
|
+
caps = capability_manifest() # {"tools": [...], "guarantees": [...], "stability": "stable"}
|
|
32
|
+
scope = scope_manifest() # {"known_unknowns": [...], "oracle_scope_cards": [...], "policy": "..."}
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## REST — the golden path
|
|
36
|
+
|
|
37
|
+
```python
|
|
38
|
+
import requests
|
|
39
|
+
BASE = "http://localhost:8000" # uvicorn pen_stack.server.api:app
|
|
40
|
+
|
|
41
|
+
scope = requests.get(f"{BASE}/scope").json()
|
|
42
|
+
v = requests.post(f"{BASE}/verify", json=design).json()
|
|
43
|
+
if v["safety"]["decision"] == "refuse": # safety branch — halt
|
|
44
|
+
...
|
|
45
|
+
elif not v["legal"]: # legality branch — revise
|
|
46
|
+
...
|
|
47
|
+
else: # proceed, with calibrated confidence + immune profile
|
|
48
|
+
use(v["confidence"], v["immune_profile"])
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Tool routes: `/verify · /safety · /immune · /generate · /predict · /suggest · /session` + `/capabilities · /scope`.
|
|
52
|
+
The full typed contract is the auto-generated **OpenAPI 3.1** spec at `/openapi.json`. Runnable example:
|
|
53
|
+
[`examples/external_agent.py`](../examples/external_agent.py).
|
|
54
|
+
|
|
55
|
+
## MCP — call PEN-STACK from any MCP client
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
python -m pen_stack.agent.mcp_server # fastmcp; tools + the capabilities/scope resources
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Tools: `verify_write · safety_screen · immune_profile · generate_designs · predict_outcome · suggest_experiment
|
|
62
|
+
· co_scientist_session · graph_query · plan_write · …`. Resources: `pen-stack://capabilities`,
|
|
63
|
+
`pen-stack://scope`. A hazardous design returns a **structured refusal** (`safety.decision == "refuse"`) an agent
|
|
64
|
+
branches on. Runnable example: [`examples/mcp_client.py`](../examples/mcp_client.py).
|
|
65
|
+
|
|
66
|
+
## Drop into any tool-calling framework
|
|
67
|
+
|
|
68
|
+
[`examples/agent_tools.py`](../examples/agent_tools.py) builds OpenAI/Anthropic-shaped tool specs **from the live
|
|
69
|
+
capability manifest** (so they never drift from the code) and dispatches to the validated engine in-process:
|
|
70
|
+
|
|
71
|
+
```python
|
|
72
|
+
from examples.agent_tools import tool_specs, dispatch
|
|
73
|
+
specs = tool_specs() # hand to LangChain / the OpenAI or Anthropic SDK
|
|
74
|
+
result = dispatch("verify_write", {"payload": {...}}) # numbers come only from the engine
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## Stability
|
|
78
|
+
|
|
79
|
+
All exposed contracts (the manifests, the OpenAPI schemas, the MCP tool/resource shapes) are versioned and
|
|
80
|
+
deprecation-policed under the **1.0 commitment** — see [API stability](STABILITY.md). The
|
|
81
|
+
`OracleResult`/`Verdict`/`SafetyVerdict`/immune-profile contracts and invariants are stable across 6.x.
|
|
82
|
+
|
|
83
|
+
## The honest bottleneck
|
|
84
|
+
|
|
85
|
+
This surface makes integration **easy and dependable**; it does not, by itself, create adoption — landing a first
|
|
86
|
+
external integration and a demonstrated real-world result remain the standing outreach work. The surface is
|
|
87
|
+
shipped; `benchmarks/genome_writing_challenge/SUBMISSIONS.md` records external entries as they arrive.
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
"""PEN-STACK v3.0 - open infrastructure for genome writing."""
|
|
2
|
-
__version__ = "6.
|
|
2
|
+
__version__ = "6.1.0"
|