agentevolve-optimizer 0.5.0__py3-none-any.whl
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.
- agent_evolve/__init__.py +722 -0
- agent_evolve/agentic.py +2800 -0
- agent_evolve/api.py +767 -0
- agent_evolve/application/__init__.py +1580 -0
- agent_evolve/application/action_allocation.py +744 -0
- agent_evolve/application/action_allocation_frame.py +347 -0
- agent_evolve/application/action_allocation_frame_commit.py +185 -0
- agent_evolve/application/action_allocation_frame_commit_v3.py +184 -0
- agent_evolve/application/action_allocation_frame_v3.py +338 -0
- agent_evolve/application/action_archive_value.py +497 -0
- agent_evolve/application/action_evidence_consistency.py +455 -0
- agent_evolve/application/action_forecast_partitioning.py +1471 -0
- agent_evolve/application/action_metric_projection.py +211 -0
- agent_evolve/application/action_role_value.py +680 -0
- agent_evolve/application/action_score_authorities.py +363 -0
- agent_evolve/application/action_structural_signature.py +116 -0
- agent_evolve/application/action_target_realization.py +402 -0
- agent_evolve/application/agentic_evolution.py +7734 -0
- agent_evolve/application/agentic_portfolio_residual_expert.py +835 -0
- agent_evolve/application/anchor_residual_identification.py +463 -0
- agent_evolve/application/archive_conditioned_action_target.py +208 -0
- agent_evolve/application/artifact_journal.py +246 -0
- agent_evolve/application/artifact_replay.py +347 -0
- agent_evolve/application/budgeted_optimizer.py +1828 -0
- agent_evolve/application/calibrated_campaign.py +485 -0
- agent_evolve/application/calibrated_current_prefix_forecast_opportunity.py +322 -0
- agent_evolve/application/calibrated_positive_gain_opportunity.py +1581 -0
- agent_evolve/application/campaign_capacity_recourse.py +254 -0
- agent_evolve/application/campaign_contextual_outcomes.py +119 -0
- agent_evolve/application/campaign_diagnostic_blocks.py +930 -0
- agent_evolve/application/campaign_evidence_registry.py +262 -0
- agent_evolve/application/campaign_execution.py +2537 -0
- agent_evolve/application/campaign_generation_audit.py +942 -0
- agent_evolve/application/campaign_learning.py +1812 -0
- agent_evolve/application/campaign_learning_runtime.py +1977 -0
- agent_evolve/application/campaign_search_phase.py +227 -0
- agent_evolve/application/campaign_selector_context_extension.py +220 -0
- agent_evolve/application/campaign_variation_envelope.py +649 -0
- agent_evolve/application/campaign_variation_trace.py +451 -0
- agent_evolve/application/candidate_archive_consequence.py +128 -0
- agent_evolve/application/causal_opportunity_portfolio_gate.py +385 -0
- agent_evolve/application/composite_outcome_updater.py +145 -0
- agent_evolve/application/composition_portfolio_selection.py +363 -0
- agent_evolve/application/concurrent_stage.py +144 -0
- agent_evolve/application/contextual_action_allocation.py +181 -0
- agent_evolve/application/contextual_campaign_outcomes.py +267 -0
- agent_evolve/application/contextual_campaign_planning.py +1366 -0
- agent_evolve/application/contextual_delayed_credit.py +651 -0
- agent_evolve/application/contextual_search_controller.py +2374 -0
- agent_evolve/application/current_prefix_forecast_opportunity.py +714 -0
- agent_evolve/application/decision_metric_projection.py +112 -0
- agent_evolve/application/derived_action_semantics.py +129 -0
- agent_evolve/application/detailed_evaluation.py +449 -0
- agent_evolve/application/earned_lineage.py +1011 -0
- agent_evolve/application/effective_choice_audit.py +484 -0
- agent_evolve/application/empirical_consequence_calibration.py +908 -0
- agent_evolve/application/evaluation_accounting.py +325 -0
- agent_evolve/application/evaluation_cache.py +199 -0
- agent_evolve/application/evaluation_escrow.py +547 -0
- agent_evolve/application/evaluation_recourse.py +253 -0
- agent_evolve/application/event_recorder.py +151 -0
- agent_evolve/application/evolution_campaign.py +1840 -0
- agent_evolve/application/executable_hypothesis.py +323 -0
- agent_evolve/application/factorial_branch_pilot.py +772 -0
- agent_evolve/application/finite_acquisition_capacity_recourse.py +672 -0
- agent_evolve/application/finite_acquisition_residual_expert.py +373 -0
- agent_evolve/application/finite_acquisition_variation_envelope.py +802 -0
- agent_evolve/application/finite_action_hypothesis_semantics.py +446 -0
- agent_evolve/application/finite_action_selection.py +188 -0
- agent_evolve/application/finite_action_set.py +306 -0
- agent_evolve/application/finite_action_transition.py +537 -0
- agent_evolve/application/finite_variation_eligibility.py +296 -0
- agent_evolve/application/forecast_geometry_portfolio.py +799 -0
- agent_evolve/application/forecast_opportunity_shadow_calibration.py +316 -0
- agent_evolve/application/front_proximity_admission.py +311 -0
- agent_evolve/application/front_proximity_parent_basis.py +458 -0
- agent_evolve/application/frozen_hurdle_score.py +659 -0
- agent_evolve/application/g3_causal_screen.py +2257 -0
- agent_evolve/application/g3_causal_validation.py +1046 -0
- agent_evolve/application/g3_postseal_curation.py +818 -0
- agent_evolve/application/gated_agentic_generator.py +205 -0
- agent_evolve/application/generation_feedback.py +293 -0
- agent_evolve/application/generative_proposal_journal.py +185 -0
- agent_evolve/application/geometry_conditional_elasticity.py +453 -0
- agent_evolve/application/global_wave_action_allocation.py +1151 -0
- agent_evolve/application/head_mass_conditional_seat.py +268 -0
- agent_evolve/application/identifiable_reflection_evidence.py +1147 -0
- agent_evolve/application/identifiable_reflection_learning.py +395 -0
- agent_evolve/application/identifiable_reflection_request.py +364 -0
- agent_evolve/application/in_memory_residual_archive.py +341 -0
- agent_evolve/application/insight_memory.py +1804 -0
- agent_evolve/application/live_runtime_manifest.py +758 -0
- agent_evolve/application/llm_task_queue.py +769 -0
- agent_evolve/application/matched_finite_action_block.py +409 -0
- agent_evolve/application/materialized_action_broker.py +2328 -0
- agent_evolve/application/materialized_action_constraints.py +83 -0
- agent_evolve/application/materialized_variation.py +211 -0
- agent_evolve/application/multi_option_evolution.py +1536 -0
- agent_evolve/application/outcome_adaptive_action_racing.py +2827 -0
- agent_evolve/application/outcome_adaptive_residual_campaign_runtime.py +580 -0
- agent_evolve/application/outcome_adaptive_residual_portfolio_evolution.py +3671 -0
- agent_evolve/application/outcome_conditioned_portfolio_selection.py +1374 -0
- agent_evolve/application/outcome_relation.py +193 -0
- agent_evolve/application/paired_allocation_comparison.py +241 -0
- agent_evolve/application/paired_block_schedule.py +127 -0
- agent_evolve/application/parent_measurement.py +226 -0
- agent_evolve/application/pareto_archive.py +811 -0
- agent_evolve/application/portfolio_campaign_runtime.py +4739 -0
- agent_evolve/application/portfolio_evolution.py +2950 -0
- agent_evolve/application/portfolio_hypothesis_observations.py +814 -0
- agent_evolve/application/portfolio_memory_attribution.py +581 -0
- agent_evolve/application/portfolio_memory_dose.py +788 -0
- agent_evolve/application/portfolio_memory_matched_control.py +938 -0
- agent_evolve/application/portfolio_memory_transfer.py +297 -0
- agent_evolve/application/portfolio_optimization_memory.py +363 -0
- agent_evolve/application/portfolio_outcome_feedback.py +1613 -0
- agent_evolve/application/portfolio_projection.py +335 -0
- agent_evolve/application/portfolio_recombination.py +2032 -0
- agent_evolve/application/post_evolution_reflection.py +834 -0
- agent_evolve/application/postcommit_rank_authority.py +245 -0
- agent_evolve/application/precommitted_portfolio_racing.py +2762 -0
- agent_evolve/application/prequential_archive_opportunity_calibration.py +1154 -0
- agent_evolve/application/prequential_residual_exploration.py +343 -0
- agent_evolve/application/prequential_score_portfolio.py +954 -0
- agent_evolve/application/projections.py +292 -0
- agent_evolve/application/protected_action_committee.py +1027 -0
- agent_evolve/application/protected_branch_pilot.py +376 -0
- agent_evolve/application/protected_current_prefix_forecast_opportunity.py +552 -0
- agent_evolve/application/provider_replay.py +910 -0
- agent_evolve/application/rank_balanced_causal_pilot.py +1372 -0
- agent_evolve/application/recombination_residual_expert.py +403 -0
- agent_evolve/application/reflection_workflow.py +571 -0
- agent_evolve/application/region_conditional_credit.py +911 -0
- agent_evolve/application/residual_campaign_runtime.py +531 -0
- agent_evolve/application/residual_headroom_campaign_runtime.py +459 -0
- agent_evolve/application/residual_headroom_ledger.py +1544 -0
- agent_evolve/application/residual_learning_transaction.py +396 -0
- agent_evolve/application/residual_portfolio_evolution.py +1228 -0
- agent_evolve/application/residual_reachability.py +749 -0
- agent_evolve/application/residual_stage_credit.py +499 -0
- agent_evolve/application/same_prefix_paired_audit.py +1580 -0
- agent_evolve/application/semantic_coverage_score_portfolio.py +838 -0
- agent_evolve/application/sequential_lineage_allocation.py +1017 -0
- agent_evolve/application/sequential_market_replay.py +1395 -0
- agent_evolve/application/sequential_residual_campaign_runtime.py +305 -0
- agent_evolve/application/sequential_residual_portfolio_evolution.py +940 -0
- agent_evolve/application/single_score_action_allocation.py +299 -0
- agent_evolve/application/source_exposure_allocation.py +906 -0
- agent_evolve/application/staged_memory.py +210 -0
- agent_evolve/application/stratified_cold_start_allocation.py +732 -0
- agent_evolve/application/support_guarded_hurdle_score.py +549 -0
- agent_evolve/application/target_conditioned_action_forecast.py +595 -0
- agent_evolve/application/target_conditioned_campaign.py +566 -0
- agent_evolve/application/treatment_assignment.py +201 -0
- agent_evolve/application/trusted_objective_evidence.py +217 -0
- agent_evolve/application/two_stage_action_evolution.py +1131 -0
- agent_evolve/application/v8lite_allocation_policy.py +1083 -0
- agent_evolve/application/v9_candidate_policy.py +1303 -0
- agent_evolve/bootstrap.py +108 -0
- agent_evolve/campaign_presets.py +517 -0
- agent_evolve/campaign_profiles.py +452 -0
- agent_evolve/campaign_variation_topology.py +288 -0
- agent_evolve/campaign_workload.py +950 -0
- agent_evolve/cli.py +797 -0
- agent_evolve/contract.py +241 -0
- agent_evolve/core/__init__.py +91 -0
- agent_evolve/core/action_semantics.py +411 -0
- agent_evolve/core/authored.py +105 -0
- agent_evolve/core/formatting.py +286 -0
- agent_evolve/core/optimization_semantics.py +324 -0
- agent_evolve/core/problem.py +167 -0
- agent_evolve/core/results.py +323 -0
- agent_evolve/core/stats.py +70 -0
- agent_evolve/core/telemetry.py +100 -0
- agent_evolve/domain/__init__.py +89 -0
- agent_evolve/domain/artifact.py +162 -0
- agent_evolve/domain/durable_text.py +68 -0
- agent_evolve/domain/event.py +1454 -0
- agent_evolve/domain/finite_action_set.py +426 -0
- agent_evolve/domain/finite_variation.py +526 -0
- agent_evolve/domain/generative_emission.py +559 -0
- agent_evolve/domain/ids.py +163 -0
- agent_evolve/domain/inline_text.py +106 -0
- agent_evolve/domain/insight.py +27 -0
- agent_evolve/domain/lineage.py +737 -0
- agent_evolve/domain/llm_task_queue.py +960 -0
- agent_evolve/domain/outcome.py +96 -0
- agent_evolve/domain/patch.py +854 -0
- agent_evolve/domain/typed_json.py +542 -0
- agent_evolve/domain/variation_space.py +158 -0
- agent_evolve/driver.py +1014 -0
- agent_evolve/harness/__init__.py +29 -0
- agent_evolve/harness/base.py +242 -0
- agent_evolve/harness/directives.py +163 -0
- agent_evolve/harness/generative_seal.py +479 -0
- agent_evolve/harness/registry.py +41 -0
- agent_evolve/infrastructure/__init__.py +39 -0
- agent_evolve/infrastructure/artifacts/__init__.py +6 -0
- agent_evolve/infrastructure/artifacts/_verification.py +67 -0
- agent_evolve/infrastructure/artifacts/filesystem.py +343 -0
- agent_evolve/infrastructure/artifacts/in_memory.py +73 -0
- agent_evolve/infrastructure/asyncio_runtime.py +109 -0
- agent_evolve/infrastructure/authored_runtime.py +188 -0
- agent_evolve/infrastructure/authored_worker.py +171 -0
- agent_evolve/infrastructure/clock.py +53 -0
- agent_evolve/infrastructure/events/__init__.py +6 -0
- agent_evolve/infrastructure/events/_validation.py +89 -0
- agent_evolve/infrastructure/events/in_memory.py +56 -0
- agent_evolve/infrastructure/events/jsonl.py +193 -0
- agent_evolve/infrastructure/exception_provenance.py +215 -0
- agent_evolve/infrastructure/ids.py +118 -0
- agent_evolve/infrastructure/lineage_codec.py +1836 -0
- agent_evolve/infrastructure/outcome_adaptive_phase_journal.py +170 -0
- agent_evolve/infrastructure/residual_headroom_journal.py +221 -0
- agent_evolve/infrastructure/resource_lease.py +370 -0
- agent_evolve/infrastructure/sanitization/__init__.py +8 -0
- agent_evolve/infrastructure/sanitization/strict_json.py +484 -0
- agent_evolve/infrastructure/sequential_phase_journal.py +170 -0
- agent_evolve/infrastructure/stream_liveness.py +383 -0
- agent_evolve/infrastructure/subprocess_boundary.py +136 -0
- agent_evolve/integrations/__init__.py +1 -0
- agent_evolve/integrations/botorch/__init__.py +28 -0
- agent_evolve/integrations/botorch/finite_qlognehvi.py +190 -0
- agent_evolve/integrations/botorch/finite_qlognehvi_batch.py +155 -0
- agent_evolve/integrations/botorch/finite_qlognehvi_batch_identity.py +20 -0
- agent_evolve/integrations/botorch/finite_qlognehvi_batch_worker.py +55 -0
- agent_evolve/integrations/botorch/finite_qlognehvi_identity.py +22 -0
- agent_evolve/integrations/botorch/finite_qlognehvi_worker.py +55 -0
- agent_evolve/integrations/botorch/subprocess_qlognehvi.py +261 -0
- agent_evolve/integrations/botorch/subprocess_qlognehvi_batch.py +273 -0
- agent_evolve/integrations/completion.py +242 -0
- agent_evolve/integrations/pydantic_ai/__init__.py +441 -0
- agent_evolve/integrations/pydantic_ai/action_forecast.py +1068 -0
- agent_evolve/integrations/pydantic_ai/agentic_generator.py +2308 -0
- agent_evolve/integrations/pydantic_ai/async_generator.py +1604 -0
- agent_evolve/integrations/pydantic_ai/boundary_codec.py +1526 -0
- agent_evolve/integrations/pydantic_ai/calibrated_portfolio_campaign.py +756 -0
- agent_evolve/integrations/pydantic_ai/calibrated_portfolio_selection.py +7537 -0
- agent_evolve/integrations/pydantic_ai/campaign_acquisition.py +609 -0
- agent_evolve/integrations/pydantic_ai/execution_binding.py +138 -0
- agent_evolve/integrations/pydantic_ai/forecast_geometry_action_committee.py +217 -0
- agent_evolve/integrations/pydantic_ai/harness.py +159 -0
- agent_evolve/integrations/pydantic_ai/heterogeneous_model_execution.py +306 -0
- agent_evolve/integrations/pydantic_ai/hierarchical_residual_adaptive_semantic_view.py +179 -0
- agent_evolve/integrations/pydantic_ai/json_schema_dialect.py +108 -0
- agent_evolve/integrations/pydantic_ai/materialized_hierarchical_residual_expert.py +952 -0
- agent_evolve/integrations/pydantic_ai/materialized_portfolio_judge.py +520 -0
- agent_evolve/integrations/pydantic_ai/model_execution_profile.py +659 -0
- agent_evolve/integrations/pydantic_ai/outbound_request_manifest.py +1170 -0
- agent_evolve/integrations/pydantic_ai/portable_residual_consequence_features.py +575 -0
- agent_evolve/integrations/pydantic_ai/portfolio_selection.py +422 -0
- agent_evolve/integrations/pydantic_ai/progress_aware_openrouter.py +416 -0
- agent_evolve/integrations/pydantic_ai/provider_attempt_join.py +1523 -0
- agent_evolve/integrations/pydantic_ai/provider_free_calibrated_runner.py +607 -0
- agent_evolve/integrations/pydantic_ai/queued_runner.py +2634 -0
- agent_evolve/integrations/pydantic_ai/reconciled_residual_reachability.py +1417 -0
- agent_evolve/integrations/pydantic_ai/residual_forecast_geometry.py +445 -0
- agent_evolve/integrations/pydantic_ai/residual_reachability.py +674 -0
- agent_evolve/integrations/pydantic_ai/residual_semantic_cells.py +239 -0
- agent_evolve/integrations/pydantic_ai/sealed_output_replay.py +1068 -0
- agent_evolve/integrations/pydantic_ai/semantic_coverage_residual_portfolio.py +770 -0
- agent_evolve/integrations/pydantic_ai/semantic_decision_replay.py +383 -0
- agent_evolve/integrations/pydantic_ai/support_adaptive_residual_portfolio.py +135 -0
- agent_evolve/integrations/pydantic_ai/trusted_residual_prompt_context.py +143 -0
- agent_evolve/integrations/pydantic_ai/validated_openrouter_model.py +107 -0
- agent_evolve/integrations/pymoo_adapter.py +242 -0
- agent_evolve/policies/__init__.py +17 -0
- agent_evolve/policies/check.py +469 -0
- agent_evolve/policies/emit_scaffold.py +451 -0
- agent_evolve/policies/feedback/__init__.py +37 -0
- agent_evolve/policies/feedback/held_out_asn.py +1325 -0
- agent_evolve/policies/genetic.py +607 -0
- agent_evolve/policies/llm_backoff.py +183 -0
- agent_evolve/policies/llm_chooser.py +226 -0
- agent_evolve/policies/llm_generator.py +1760 -0
- agent_evolve/policies/llm_init.py +267 -0
- agent_evolve/policies/llm_operator.py +109 -0
- agent_evolve/policies/llm_prior.py +194 -0
- agent_evolve/policies/llm_surrogate.py +334 -0
- agent_evolve/policies/measurement_evidence.py +704 -0
- agent_evolve/policies/memory/__init__.py +223 -0
- agent_evolve/policies/memory/balanced_subset_blocks.py +707 -0
- agent_evolve/policies/memory/compatibility_matching.py +593 -0
- agent_evolve/policies/memory/global_falsification.py +1841 -0
- agent_evolve/policies/memory/prompt_shape.py +503 -0
- agent_evolve/policies/memory/randomized_subset.py +714 -0
- agent_evolve/policies/memory/staged_causal.py +1270 -0
- agent_evolve/policies/memory/treatment_compliance.py +759 -0
- agent_evolve/policies/objective_resolution/__init__.py +17 -0
- agent_evolve/policies/objective_resolution/fixed_grid.py +364 -0
- agent_evolve/policies/operator_portfolio.py +407 -0
- agent_evolve/policies/reguidance.py +1133 -0
- agent_evolve/policies/reward/__init__.py +83 -0
- agent_evolve/policies/reward/affine_candidate_consequence.py +156 -0
- agent_evolve/policies/reward/affine_candidate_consequence_3d.py +159 -0
- agent_evolve/policies/reward/affine_hypervolume.py +490 -0
- agent_evolve/policies/reward/affine_hypervolume_3d.py +567 -0
- agent_evolve/policies/reward/contextual_marginal_utility.py +318 -0
- agent_evolve/policies/reward/frozen_archive.py +360 -0
- agent_evolve/policies/reward/frozen_wave_archive.py +368 -0
- agent_evolve/policies/search_state.py +208 -0
- agent_evolve/policies/selection/__init__.py +345 -0
- agent_evolve/policies/selection/acquisition_certified_slate.py +684 -0
- agent_evolve/policies/selection/affine_frontier_context.py +330 -0
- agent_evolve/policies/selection/affine_frontier_target.py +473 -0
- agent_evolve/policies/selection/archive_elite.py +1346 -0
- agent_evolve/policies/selection/calibrated_portfolio_binding.py +640 -0
- agent_evolve/policies/selection/calibrated_slate.py +1394 -0
- agent_evolve/policies/selection/calibrated_slate_codec.py +579 -0
- agent_evolve/policies/selection/common_candidate_pool.py +685 -0
- agent_evolve/policies/selection/diagnostic_sampling.py +319 -0
- agent_evolve/policies/selection/disjoint_pairs.py +479 -0
- agent_evolve/policies/selection/elite_explorer.py +719 -0
- agent_evolve/policies/selection/finite_action.py +187 -0
- agent_evolve/policies/selection/finite_option_prompt_projection.py +377 -0
- agent_evolve/policies/selection/finite_palette_evidence.py +247 -0
- agent_evolve/policies/selection/forecast_calibration.py +922 -0
- agent_evolve/policies/selection/frontier_probe_slate.py +814 -0
- agent_evolve/policies/selection/frozen_archive_pairs.py +762 -0
- agent_evolve/policies/selection/full_support_slate.py +91 -0
- agent_evolve/policies/selection/meaningful_direction.py +240 -0
- agent_evolve/policies/selection/memory_dose_feasibility.py +259 -0
- agent_evolve/policies/selection/model_anchored_slate.py +826 -0
- agent_evolve/policies/selection/phenotype_recourse.py +979 -0
- agent_evolve/policies/selection/proposal_support.py +368 -0
- agent_evolve/policies/selection/random_portfolio.py +254 -0
- agent_evolve/policies/selection/regret_bounded_slate.py +1084 -0
- agent_evolve/policies/selection/residual_frontier.py +463 -0
- agent_evolve/policies/selection/residual_frontier_target.py +605 -0
- agent_evolve/policies/selection/structural_posterior_slate.py +1571 -0
- agent_evolve/policies/selection/target_conditioned_allocator.py +648 -0
- agent_evolve/policies/selection/target_conditioned_features.py +812 -0
- agent_evolve/policies/selection/target_conditioned_prequential.py +1527 -0
- agent_evolve/policies/selection/task_keyed_palette.py +906 -0
- agent_evolve/policies/semantics.py +147 -0
- agent_evolve/policies/structure.py +362 -0
- agent_evolve/policies/structured_output_budget.py +62 -0
- agent_evolve/policies/surrogate.py +696 -0
- agent_evolve/policies/variation/__init__.py +1 -0
- agent_evolve/policies/variation/compositional_finite_catalog.py +426 -0
- agent_evolve/policies/variation/crossover_inheritance.py +575 -0
- agent_evolve/policies/variation/disjoint_recombination.py +611 -0
- agent_evolve/policies/variation/exact_composition_capacity.py +214 -0
- agent_evolve/policies/variation/exact_parent_crossover.py +950 -0
- agent_evolve/policies/variation/multiscale_restart_catalog.py +372 -0
- agent_evolve/policies/variation/source_union_finite_catalog.py +403 -0
- agent_evolve/policies/variation/typed_patch.py +1981 -0
- agent_evolve/policies/weighted_prior.py +394 -0
- agent_evolve/ports/__init__.py +383 -0
- agent_evolve/ports/action_allocation.py +733 -0
- agent_evolve/ports/action_allocation_frame.py +1153 -0
- agent_evolve/ports/action_allocation_frame_commit.py +294 -0
- agent_evolve/ports/action_allocation_frame_commit_v3.py +432 -0
- agent_evolve/ports/action_allocation_frame_v3.py +995 -0
- agent_evolve/ports/action_forecast.py +1568 -0
- agent_evolve/ports/action_metric_projection.py +165 -0
- agent_evolve/ports/agentic_generator.py +1561 -0
- agent_evolve/ports/archive_context.py +136 -0
- agent_evolve/ports/artifact_sanitizer.py +44 -0
- agent_evolve/ports/artifact_store.py +225 -0
- agent_evolve/ports/clock.py +13 -0
- agent_evolve/ports/contextual_search_allocation.py +827 -0
- agent_evolve/ports/decision_metric_projection.py +258 -0
- agent_evolve/ports/event_store.py +55 -0
- agent_evolve/ports/executable_hypothesis.py +557 -0
- agent_evolve/ports/finite_acquisition.py +377 -0
- agent_evolve/ports/finite_acquisition_batch.py +296 -0
- agent_evolve/ports/finite_acquisition_batch_json.py +164 -0
- agent_evolve/ports/finite_acquisition_json.py +247 -0
- agent_evolve/ports/finite_acquisition_space.py +168 -0
- agent_evolve/ports/finite_action_selection.py +348 -0
- agent_evolve/ports/finite_action_set.py +256 -0
- agent_evolve/ports/frontier_target.py +396 -0
- agent_evolve/ports/generation_failure.py +43 -0
- agent_evolve/ports/hard_feasibility.py +233 -0
- agent_evolve/ports/id_factory.py +34 -0
- agent_evolve/ports/llm_task_queue.py +93 -0
- agent_evolve/ports/objective_resolution.py +419 -0
- agent_evolve/ports/paired_allocation_comparison.py +401 -0
- agent_evolve/ports/paired_block_schedule.py +475 -0
- agent_evolve/ports/parent_measurement.py +336 -0
- agent_evolve/ports/portfolio_memory_dose.py +643 -0
- agent_evolve/ports/portfolio_selection.py +3169 -0
- agent_evolve/ports/postcommit_rank_authority.py +467 -0
- agent_evolve/ports/presented_action_evidence.py +794 -0
- agent_evolve/ports/resource_lease.py +162 -0
- agent_evolve/ports/structured_generator.py +734 -0
- agent_evolve/ports/structured_output_budget.py +120 -0
- agent_evolve/ports/subprocess_boundary.py +138 -0
- agent_evolve/ports/treatment_assignment.py +466 -0
- agent_evolve/ports/variation_catalog.py +76 -0
- agent_evolve/ports/variation_source.py +226 -0
- agent_evolve/proposal_mode.py +157 -0
- agent_evolve/proposers/__init__.py +10 -0
- agent_evolve/proposers/random_proposer.py +188 -0
- agent_evolve/provider_accounting.py +163 -0
- agent_evolve/py.typed +0 -0
- agent_evolve/reference_method.py +1570 -0
- agent_evolve/session/__init__.py +11 -0
- agent_evolve/session/authorship.py +864 -0
- agent_evolve/session/evaluate.py +236 -0
- agent_evolve/session/fidelity.py +237 -0
- agent_evolve/session/genetic_loop.py +742 -0
- agent_evolve/session/loop.py +803 -0
- agent_evolve/session/screening.py +671 -0
- agent_evolve/settings.py +376 -0
- agent_evolve/workload_kit.py +368 -0
- agent_evolve/workload_prompt.py +398 -0
- agentevolve_optimizer-0.5.0.dist-info/METADATA +599 -0
- agentevolve_optimizer-0.5.0.dist-info/RECORD +414 -0
- agentevolve_optimizer-0.5.0.dist-info/WHEEL +5 -0
- agentevolve_optimizer-0.5.0.dist-info/entry_points.txt +2 -0
- agentevolve_optimizer-0.5.0.dist-info/licenses/LICENSE +21 -0
- agentevolve_optimizer-0.5.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,818 @@
|
|
|
1
|
+
"""Generic, authority-bound post-G3 reflection and atomic revision.
|
|
2
|
+
|
|
3
|
+
The G3 causal screen seals optimization endpoints before this policy runs.
|
|
4
|
+
This module then performs one optional provider call whose failure cannot erase
|
|
5
|
+
those endpoints. Every accepted result is joined to an engine-issued
|
|
6
|
+
request/provider/publication receipt; interceptor-authored metadata is never
|
|
7
|
+
treated as evidence on its own.
|
|
8
|
+
|
|
9
|
+
Benchmark semantics enter only through an injected ``ReflectionInsightContract``
|
|
10
|
+
and a declarative source-slot scope. This keeps the workflow reusable across
|
|
11
|
+
Airfoil, compiler flows, scheduling, or any future finite-action benchmark.
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
from __future__ import annotations
|
|
15
|
+
|
|
16
|
+
import hashlib
|
|
17
|
+
import json
|
|
18
|
+
import re
|
|
19
|
+
from dataclasses import dataclass, field
|
|
20
|
+
from typing import TYPE_CHECKING
|
|
21
|
+
|
|
22
|
+
from agent_evolve.application.agentic_evolution import (
|
|
23
|
+
AgenticEvolutionEngine,
|
|
24
|
+
InvocationOutcome,
|
|
25
|
+
ReflectionCallExecutionError,
|
|
26
|
+
ReflectionCallReceipt,
|
|
27
|
+
ReflectionCallStatus,
|
|
28
|
+
ReflectionPublicationResult,
|
|
29
|
+
)
|
|
30
|
+
from agent_evolve.application.budgeted_optimizer import GenerationReceipt
|
|
31
|
+
from agent_evolve.application.g3_causal_screen import G3CausalScreenPlanner
|
|
32
|
+
from agent_evolve.application.generation_feedback import (
|
|
33
|
+
GenerationFeedbackContext,
|
|
34
|
+
GenerationFeedbackReservation,
|
|
35
|
+
GenerationFeedbackResult,
|
|
36
|
+
)
|
|
37
|
+
from agent_evolve.application.insight_memory import (
|
|
38
|
+
InsightLifecycleState,
|
|
39
|
+
InsightMemoryBank,
|
|
40
|
+
InsightMemoryEntry,
|
|
41
|
+
InsightOrigin,
|
|
42
|
+
)
|
|
43
|
+
from agent_evolve.domain.ids import OperatorInvocationId
|
|
44
|
+
from agent_evolve.domain.insight import InsightRef
|
|
45
|
+
from agent_evolve.domain.patch import require_sha256
|
|
46
|
+
from agent_evolve.ports.agentic_generator import ReflectionInsightContract
|
|
47
|
+
|
|
48
|
+
if TYPE_CHECKING:
|
|
49
|
+
from agent_evolve.application.g3_causal_validation import (
|
|
50
|
+
G3TerminalStateValidationReceipt,
|
|
51
|
+
)
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
_TOKEN = re.compile(r"^[a-z][a-z0-9_.-]{0,95}$")
|
|
55
|
+
_SOURCE_SCOPE_DOMAIN = b"agent-evolve:g3-curation-source-scope:v1\x00"
|
|
56
|
+
_SPEC_DOMAIN = b"agent-evolve:g3-postseal-curation-spec:v1\x00"
|
|
57
|
+
_AUTHORITY_DOMAIN = b"agent-evolve:g3-postseal-curation-authority:v1\x00"
|
|
58
|
+
_RECEIPT_DOMAIN = b"agent-evolve:g3-postseal-curation-receipt:v1\x00"
|
|
59
|
+
G3_POSTSEAL_CURATION_DEFINITION_SHA256 = hashlib.sha256(
|
|
60
|
+
b"agent-evolve:g3-postseal-atomic-revision:v1:terminal-gate;"
|
|
61
|
+
b"declarative-source-scope;engine-request-provider-publication-receipt;"
|
|
62
|
+
b"one-zero-prior-quarantined-revision;isolated-provider-failure"
|
|
63
|
+
).hexdigest()
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
def _canonical_json(value: object) -> bytes:
|
|
67
|
+
return json.dumps(
|
|
68
|
+
value,
|
|
69
|
+
ensure_ascii=True,
|
|
70
|
+
allow_nan=False,
|
|
71
|
+
separators=(",", ":"),
|
|
72
|
+
sort_keys=True,
|
|
73
|
+
).encode("ascii")
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def _hash(domain: bytes, record: object) -> str:
|
|
77
|
+
return hashlib.sha256(domain + _canonical_json(record)).hexdigest()
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
def _ref_record(reference: InsightRef) -> dict[str, object]:
|
|
81
|
+
return {
|
|
82
|
+
"insight_id": reference.insight_id.value,
|
|
83
|
+
"version": reference.version,
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
@dataclass(frozen=True, slots=True)
|
|
88
|
+
class G3CurationSourceScope:
|
|
89
|
+
"""Declarative ordered selection of sealed G1--G3 outcome slots.
|
|
90
|
+
|
|
91
|
+
Selecting direct adaptive evidence only is useful when an exact finite
|
|
92
|
+
action contract cannot honestly attribute a composite union. Selecting all
|
|
93
|
+
ten slots is appropriate for family-level reflection. Either choice is
|
|
94
|
+
explicit, versioned, and included in the curation authority.
|
|
95
|
+
"""
|
|
96
|
+
|
|
97
|
+
policy_id: str
|
|
98
|
+
policy_version: int
|
|
99
|
+
policy_definition_sha256: str
|
|
100
|
+
slot_ids: tuple[str, ...]
|
|
101
|
+
scope_sha256: str = field(init=False)
|
|
102
|
+
|
|
103
|
+
def __post_init__(self) -> None:
|
|
104
|
+
if type(self.policy_id) is not str or _TOKEN.fullmatch(self.policy_id) is None:
|
|
105
|
+
raise ValueError("source scope policy_id must use the token grammar")
|
|
106
|
+
if type(self.policy_version) is not int or self.policy_version <= 0:
|
|
107
|
+
raise ValueError("source scope policy_version must be positive")
|
|
108
|
+
require_sha256(
|
|
109
|
+
self.policy_definition_sha256,
|
|
110
|
+
"source scope policy_definition_sha256",
|
|
111
|
+
)
|
|
112
|
+
if (
|
|
113
|
+
type(self.slot_ids) is not tuple
|
|
114
|
+
or not self.slot_ids
|
|
115
|
+
or any(
|
|
116
|
+
type(value) is not str
|
|
117
|
+
or not value
|
|
118
|
+
or value != value.strip()
|
|
119
|
+
for value in self.slot_ids
|
|
120
|
+
)
|
|
121
|
+
):
|
|
122
|
+
raise TypeError("source scope slot_ids must be canonical strings")
|
|
123
|
+
if len(set(self.slot_ids)) != len(self.slot_ids):
|
|
124
|
+
raise ValueError("source scope slot_ids cannot repeat")
|
|
125
|
+
object.__setattr__(
|
|
126
|
+
self,
|
|
127
|
+
"scope_sha256",
|
|
128
|
+
_hash(_SOURCE_SCOPE_DOMAIN, self.to_record()),
|
|
129
|
+
)
|
|
130
|
+
|
|
131
|
+
def to_record(self) -> dict[str, object]:
|
|
132
|
+
return {
|
|
133
|
+
"schema_version": 1,
|
|
134
|
+
"policy_id": self.policy_id,
|
|
135
|
+
"policy_version": self.policy_version,
|
|
136
|
+
"policy_definition_sha256": self.policy_definition_sha256,
|
|
137
|
+
"slot_ids": list(self.slot_ids),
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
def select(
|
|
141
|
+
self,
|
|
142
|
+
receipts: tuple[GenerationReceipt, ...],
|
|
143
|
+
) -> tuple[InvocationOutcome, ...]:
|
|
144
|
+
"""Resolve exact outcome objects from already-sealed receipts."""
|
|
145
|
+
|
|
146
|
+
if type(receipts) is not tuple or len(receipts) != 3:
|
|
147
|
+
raise ValueError("G3 curation requires exactly three generation receipts")
|
|
148
|
+
outcomes_by_slot: dict[str, InvocationOutcome] = {}
|
|
149
|
+
for receipt in receipts:
|
|
150
|
+
if type(receipt) is not GenerationReceipt:
|
|
151
|
+
raise TypeError("source receipts must be exact GenerationReceipt values")
|
|
152
|
+
for slot_result in receipt.slot_results:
|
|
153
|
+
slot_id = slot_result.slot.slot_id
|
|
154
|
+
if slot_id in outcomes_by_slot:
|
|
155
|
+
raise ValueError("generation receipts repeat a source slot ID")
|
|
156
|
+
outcomes_by_slot[slot_id] = slot_result.outcome
|
|
157
|
+
missing = tuple(
|
|
158
|
+
slot_id for slot_id in self.slot_ids if slot_id not in outcomes_by_slot
|
|
159
|
+
)
|
|
160
|
+
if missing:
|
|
161
|
+
raise ValueError("curation source scope names an absent G1--G3 slot")
|
|
162
|
+
return tuple(outcomes_by_slot[slot_id] for slot_id in self.slot_ids)
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
@dataclass(frozen=True, slots=True)
|
|
166
|
+
class G3PostsealCurationSpec:
|
|
167
|
+
"""Benchmark-neutral behavior plus injected reflection vocabulary/scope."""
|
|
168
|
+
|
|
169
|
+
insight_contract: ReflectionInsightContract
|
|
170
|
+
source_scope: G3CurationSourceScope
|
|
171
|
+
policy_id: str = "g3_postseal_atomic_revision"
|
|
172
|
+
policy_version: int = 1
|
|
173
|
+
policy_definition_sha256: str = G3_POSTSEAL_CURATION_DEFINITION_SHA256
|
|
174
|
+
label: str = "g3_postseal_curation"
|
|
175
|
+
spec_sha256: str = field(init=False)
|
|
176
|
+
|
|
177
|
+
def __post_init__(self) -> None:
|
|
178
|
+
if type(self.insight_contract) is not ReflectionInsightContract:
|
|
179
|
+
raise TypeError("curation insight_contract must be exact")
|
|
180
|
+
ReflectionInsightContract.__post_init__(self.insight_contract)
|
|
181
|
+
if type(self.source_scope) is not G3CurationSourceScope:
|
|
182
|
+
raise TypeError("curation source_scope must be exact")
|
|
183
|
+
G3CurationSourceScope.__post_init__(self.source_scope)
|
|
184
|
+
if type(self.policy_id) is not str or _TOKEN.fullmatch(self.policy_id) is None:
|
|
185
|
+
raise ValueError("curation policy_id must use the token grammar")
|
|
186
|
+
if type(self.policy_version) is not int or self.policy_version <= 0:
|
|
187
|
+
raise ValueError("curation policy_version must be positive")
|
|
188
|
+
require_sha256(
|
|
189
|
+
self.policy_definition_sha256,
|
|
190
|
+
"curation policy_definition_sha256",
|
|
191
|
+
)
|
|
192
|
+
if (
|
|
193
|
+
type(self.label) is not str
|
|
194
|
+
or not self.label
|
|
195
|
+
or self.label != self.label.strip()
|
|
196
|
+
):
|
|
197
|
+
raise ValueError("curation label must be canonical non-empty text")
|
|
198
|
+
object.__setattr__(self, "spec_sha256", _hash(_SPEC_DOMAIN, self.to_record()))
|
|
199
|
+
|
|
200
|
+
def to_record(self) -> dict[str, object]:
|
|
201
|
+
return {
|
|
202
|
+
"schema_version": 1,
|
|
203
|
+
"policy_id": self.policy_id,
|
|
204
|
+
"policy_version": self.policy_version,
|
|
205
|
+
"policy_definition_sha256": self.policy_definition_sha256,
|
|
206
|
+
"label": self.label,
|
|
207
|
+
"insight_contract_sha256": self.insight_contract.identity_sha256,
|
|
208
|
+
"source_scope_sha256": self.source_scope.scope_sha256,
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
|
|
212
|
+
def _adaptive_predecessor(
|
|
213
|
+
planner: G3CausalScreenPlanner,
|
|
214
|
+
memory: InsightMemoryBank,
|
|
215
|
+
) -> tuple[InsightRef, InsightMemoryEntry]:
|
|
216
|
+
if type(planner) is not G3CausalScreenPlanner:
|
|
217
|
+
raise TypeError("curation predecessor planner must be exact")
|
|
218
|
+
if type(memory) is not InsightMemoryBank:
|
|
219
|
+
raise TypeError("curation predecessor memory must be exact")
|
|
220
|
+
assignments = planner.g2_assignments
|
|
221
|
+
if len(assignments) != 2:
|
|
222
|
+
raise ValueError("curation requires the sealed adaptive assignment")
|
|
223
|
+
selected = assignments[0].selection_decision.selected
|
|
224
|
+
if len(selected) != 1:
|
|
225
|
+
raise ValueError("adaptive assignment must select exactly one card")
|
|
226
|
+
reference = selected[0]
|
|
227
|
+
return reference, memory.entries_for((reference,))[0]
|
|
228
|
+
|
|
229
|
+
|
|
230
|
+
def build_g3_postseal_curation_reservation(
|
|
231
|
+
*,
|
|
232
|
+
spec: G3PostsealCurationSpec,
|
|
233
|
+
planner: G3CausalScreenPlanner,
|
|
234
|
+
memory: InsightMemoryBank,
|
|
235
|
+
generation: int,
|
|
236
|
+
) -> GenerationFeedbackReservation:
|
|
237
|
+
"""Rebuild the expected reservation independently for final validation."""
|
|
238
|
+
|
|
239
|
+
if type(spec) is not G3PostsealCurationSpec:
|
|
240
|
+
raise TypeError("curation reservation spec must be exact")
|
|
241
|
+
G3PostsealCurationSpec.__post_init__(spec)
|
|
242
|
+
if type(generation) is not int or not 1 <= generation <= 3:
|
|
243
|
+
raise ValueError("curation reservation generation must lie in [1,3]")
|
|
244
|
+
if generation < 3:
|
|
245
|
+
metadata = tuple(
|
|
246
|
+
sorted(
|
|
247
|
+
(
|
|
248
|
+
("curation_spec_sha256", spec.spec_sha256),
|
|
249
|
+
("stage", "sealed_no_op"),
|
|
250
|
+
)
|
|
251
|
+
)
|
|
252
|
+
)
|
|
253
|
+
else:
|
|
254
|
+
terminal_authority = planner.terminal_validation_authority
|
|
255
|
+
if terminal_authority is None:
|
|
256
|
+
raise ValueError("G3 terminal validation authority is not sealed")
|
|
257
|
+
predecessor, entry = _adaptive_predecessor(planner, memory)
|
|
258
|
+
metadata = tuple(
|
|
259
|
+
sorted(
|
|
260
|
+
(
|
|
261
|
+
("curation_spec_sha256", spec.spec_sha256),
|
|
262
|
+
(
|
|
263
|
+
"reflection_contract_sha256",
|
|
264
|
+
spec.insight_contract.identity_sha256,
|
|
265
|
+
),
|
|
266
|
+
(
|
|
267
|
+
"revision_predecessor",
|
|
268
|
+
f"{predecessor.insight_id.value}@{predecessor.version}",
|
|
269
|
+
),
|
|
270
|
+
(
|
|
271
|
+
"revision_predecessor_content_sha256",
|
|
272
|
+
entry.draft.content_sha256,
|
|
273
|
+
),
|
|
274
|
+
("source_scope_sha256", spec.source_scope.scope_sha256),
|
|
275
|
+
("stage", "post_g3"),
|
|
276
|
+
(
|
|
277
|
+
"terminal_validation_authority_sha256",
|
|
278
|
+
terminal_authority.authority_sha256,
|
|
279
|
+
),
|
|
280
|
+
)
|
|
281
|
+
)
|
|
282
|
+
)
|
|
283
|
+
return GenerationFeedbackReservation(
|
|
284
|
+
policy_id=spec.policy_id,
|
|
285
|
+
policy_version=spec.policy_version,
|
|
286
|
+
logical_llm_calls=1 if generation == 3 else 0,
|
|
287
|
+
metadata=metadata,
|
|
288
|
+
)
|
|
289
|
+
|
|
290
|
+
|
|
291
|
+
@dataclass(frozen=True, slots=True)
|
|
292
|
+
class G3PostsealCurationAuthority:
|
|
293
|
+
"""Pre-provider commitment joining the terminal gate to one request."""
|
|
294
|
+
|
|
295
|
+
spec_sha256: str
|
|
296
|
+
reservation_hash: str
|
|
297
|
+
terminal_validation_receipt_sha256: str
|
|
298
|
+
terminal_validation_authority_sha256: str
|
|
299
|
+
generation_receipt_sha256s: tuple[str, str, str]
|
|
300
|
+
source_scope_sha256: str
|
|
301
|
+
source_slot_ids: tuple[str, ...]
|
|
302
|
+
source_operator_invocation_ids: tuple[OperatorInvocationId, ...]
|
|
303
|
+
revision_predecessor: InsightRef
|
|
304
|
+
revision_predecessor_content_sha256: str
|
|
305
|
+
insight_contract_sha256: str
|
|
306
|
+
reflection_label: str
|
|
307
|
+
authority_sha256: str = ""
|
|
308
|
+
|
|
309
|
+
def __post_init__(self) -> None:
|
|
310
|
+
for name in (
|
|
311
|
+
"spec_sha256",
|
|
312
|
+
"reservation_hash",
|
|
313
|
+
"terminal_validation_receipt_sha256",
|
|
314
|
+
"terminal_validation_authority_sha256",
|
|
315
|
+
"source_scope_sha256",
|
|
316
|
+
"revision_predecessor_content_sha256",
|
|
317
|
+
"insight_contract_sha256",
|
|
318
|
+
):
|
|
319
|
+
require_sha256(getattr(self, name), f"curation authority {name}")
|
|
320
|
+
if (
|
|
321
|
+
type(self.generation_receipt_sha256s) is not tuple
|
|
322
|
+
or len(self.generation_receipt_sha256s) != 3
|
|
323
|
+
):
|
|
324
|
+
raise ValueError("curation authority requires G1--G3 receipt hashes")
|
|
325
|
+
for value in self.generation_receipt_sha256s:
|
|
326
|
+
require_sha256(value, "curation source generation receipt")
|
|
327
|
+
if (
|
|
328
|
+
type(self.source_slot_ids) is not tuple
|
|
329
|
+
or not self.source_slot_ids
|
|
330
|
+
or len(set(self.source_slot_ids)) != len(self.source_slot_ids)
|
|
331
|
+
):
|
|
332
|
+
raise ValueError("curation authority requires unique source slots")
|
|
333
|
+
if type(self.source_operator_invocation_ids) is not tuple or any(
|
|
334
|
+
type(value) is not OperatorInvocationId
|
|
335
|
+
for value in self.source_operator_invocation_ids
|
|
336
|
+
):
|
|
337
|
+
raise TypeError("curation source operator IDs must be exact")
|
|
338
|
+
for value in self.source_operator_invocation_ids:
|
|
339
|
+
OperatorInvocationId.__post_init__(value)
|
|
340
|
+
if len(self.source_slot_ids) != len(self.source_operator_invocation_ids):
|
|
341
|
+
raise ValueError("curation source slots/operator IDs differ")
|
|
342
|
+
if len(set(self.source_operator_invocation_ids)) != len(
|
|
343
|
+
self.source_operator_invocation_ids
|
|
344
|
+
):
|
|
345
|
+
raise ValueError("curation source operator IDs cannot repeat")
|
|
346
|
+
if type(self.revision_predecessor) is not InsightRef:
|
|
347
|
+
raise TypeError("curation revision predecessor must be exact")
|
|
348
|
+
InsightRef.__post_init__(self.revision_predecessor)
|
|
349
|
+
if (
|
|
350
|
+
type(self.reflection_label) is not str
|
|
351
|
+
or not self.reflection_label
|
|
352
|
+
or self.reflection_label != self.reflection_label.strip()
|
|
353
|
+
):
|
|
354
|
+
raise ValueError("curation reflection label must be canonical")
|
|
355
|
+
expected = _hash(_AUTHORITY_DOMAIN, self.to_record())
|
|
356
|
+
if self.authority_sha256:
|
|
357
|
+
require_sha256(self.authority_sha256, "curation authority_sha256")
|
|
358
|
+
if self.authority_sha256 != expected:
|
|
359
|
+
raise ValueError("curation authority hash does not authenticate data")
|
|
360
|
+
else:
|
|
361
|
+
object.__setattr__(self, "authority_sha256", expected)
|
|
362
|
+
|
|
363
|
+
def to_record(self) -> dict[str, object]:
|
|
364
|
+
return {
|
|
365
|
+
"schema_version": 1,
|
|
366
|
+
"spec_sha256": self.spec_sha256,
|
|
367
|
+
"reservation_hash": self.reservation_hash,
|
|
368
|
+
"terminal_validation_receipt_sha256": (
|
|
369
|
+
self.terminal_validation_receipt_sha256
|
|
370
|
+
),
|
|
371
|
+
"terminal_validation_authority_sha256": (
|
|
372
|
+
self.terminal_validation_authority_sha256
|
|
373
|
+
),
|
|
374
|
+
"generation_receipt_sha256s": list(
|
|
375
|
+
self.generation_receipt_sha256s
|
|
376
|
+
),
|
|
377
|
+
"source_scope_sha256": self.source_scope_sha256,
|
|
378
|
+
"source_slot_ids": list(self.source_slot_ids),
|
|
379
|
+
"source_operator_invocation_ids": [
|
|
380
|
+
value.value for value in self.source_operator_invocation_ids
|
|
381
|
+
],
|
|
382
|
+
"revision_predecessor": _ref_record(self.revision_predecessor),
|
|
383
|
+
"revision_predecessor_content_sha256": (
|
|
384
|
+
self.revision_predecessor_content_sha256
|
|
385
|
+
),
|
|
386
|
+
"insight_contract_sha256": self.insight_contract_sha256,
|
|
387
|
+
"reflection_label": self.reflection_label,
|
|
388
|
+
"requested_cardinality": {"min": 0, "max": 1},
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
|
|
392
|
+
@dataclass(frozen=True, slots=True)
|
|
393
|
+
class G3PostsealCurationReceipt:
|
|
394
|
+
"""Authenticated success/failure result for the isolated sixth call."""
|
|
395
|
+
|
|
396
|
+
authority: G3PostsealCurationAuthority
|
|
397
|
+
call_receipt: ReflectionCallReceipt
|
|
398
|
+
curation_status: str
|
|
399
|
+
failure_type: str | None
|
|
400
|
+
receipt_sha256: str = ""
|
|
401
|
+
|
|
402
|
+
def __post_init__(self) -> None:
|
|
403
|
+
if type(self.authority) is not G3PostsealCurationAuthority:
|
|
404
|
+
raise TypeError("curation receipt authority must be exact")
|
|
405
|
+
G3PostsealCurationAuthority.__post_init__(self.authority)
|
|
406
|
+
if type(self.call_receipt) is not ReflectionCallReceipt:
|
|
407
|
+
raise TypeError("curation call_receipt must be exact")
|
|
408
|
+
ReflectionCallReceipt.__post_init__(self.call_receipt)
|
|
409
|
+
authority = self.authority
|
|
410
|
+
request = self.call_receipt.request
|
|
411
|
+
if (
|
|
412
|
+
request.label != authority.reflection_label
|
|
413
|
+
or request.operation != "extract_insights"
|
|
414
|
+
or request.min_insights != 0
|
|
415
|
+
or request.max_insights != 1
|
|
416
|
+
or request.insight_contract_sha256
|
|
417
|
+
!= authority.insight_contract_sha256
|
|
418
|
+
or request.revision_predecessors
|
|
419
|
+
!= (authority.revision_predecessor,)
|
|
420
|
+
or request.revision_predecessor_content_sha256s
|
|
421
|
+
!= (authority.revision_predecessor_content_sha256,)
|
|
422
|
+
or request.source_receipt_sha256s
|
|
423
|
+
!= authority.generation_receipt_sha256s
|
|
424
|
+
or request.source_operator_invocation_ids
|
|
425
|
+
!= authority.source_operator_invocation_ids
|
|
426
|
+
or len(request.source_outcome_sha256s)
|
|
427
|
+
!= len(authority.source_slot_ids)
|
|
428
|
+
):
|
|
429
|
+
raise ValueError("engine reflection request differs from curation authority")
|
|
430
|
+
publications = self.call_receipt.publications
|
|
431
|
+
if self.curation_status == "sealed_complete":
|
|
432
|
+
if (
|
|
433
|
+
self.failure_type is not None
|
|
434
|
+
or self.call_receipt.status is not ReflectionCallStatus.COMPLETED
|
|
435
|
+
or len(publications) > 1
|
|
436
|
+
):
|
|
437
|
+
raise ValueError("completed curation has invalid provider/publication data")
|
|
438
|
+
if publications:
|
|
439
|
+
publication = publications[0]
|
|
440
|
+
predecessor = authority.revision_predecessor
|
|
441
|
+
if (
|
|
442
|
+
publication.revision_predecessor != predecessor
|
|
443
|
+
or publication.reference.insight_id != predecessor.insight_id
|
|
444
|
+
or publication.reference.version != predecessor.version + 1
|
|
445
|
+
or publication.lifecycle_state
|
|
446
|
+
is not InsightLifecycleState.QUARANTINED
|
|
447
|
+
or publication.origin is not InsightOrigin.REFLECTION
|
|
448
|
+
or publication.initial_score != 0.0
|
|
449
|
+
):
|
|
450
|
+
raise ValueError("curation publication is not one fresh revision")
|
|
451
|
+
elif self.curation_status == "incomplete":
|
|
452
|
+
if (
|
|
453
|
+
type(self.failure_type) is not str
|
|
454
|
+
or not self.failure_type
|
|
455
|
+
or self.call_receipt.status is not ReflectionCallStatus.FAILED
|
|
456
|
+
or self.call_receipt.failure_type != self.failure_type
|
|
457
|
+
or publications
|
|
458
|
+
):
|
|
459
|
+
raise ValueError("incomplete curation lacks exact failure evidence")
|
|
460
|
+
else:
|
|
461
|
+
raise ValueError("curation_status must be sealed_complete or incomplete")
|
|
462
|
+
expected = _hash(_RECEIPT_DOMAIN, self.to_record())
|
|
463
|
+
if self.receipt_sha256:
|
|
464
|
+
require_sha256(self.receipt_sha256, "curation receipt_sha256")
|
|
465
|
+
if self.receipt_sha256 != expected:
|
|
466
|
+
raise ValueError("curation receipt hash does not authenticate data")
|
|
467
|
+
else:
|
|
468
|
+
object.__setattr__(self, "receipt_sha256", expected)
|
|
469
|
+
|
|
470
|
+
def to_record(self) -> dict[str, object]:
|
|
471
|
+
return {
|
|
472
|
+
"schema_version": 1,
|
|
473
|
+
"authority_sha256": self.authority.authority_sha256,
|
|
474
|
+
"reflection_call_receipt_sha256": self.call_receipt.receipt_sha256,
|
|
475
|
+
"reflection_call_id": self.call_receipt.call_id.value,
|
|
476
|
+
"reflection_request_sha256": self.call_receipt.request.request_sha256,
|
|
477
|
+
"curation_status": self.curation_status,
|
|
478
|
+
"publication_outcome": self.publication_outcome,
|
|
479
|
+
"failure_type": self.failure_type,
|
|
480
|
+
"publication_sha256s": [
|
|
481
|
+
value.publication_sha256
|
|
482
|
+
for value in self.call_receipt.publications
|
|
483
|
+
],
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
@property
|
|
487
|
+
def publication_outcome(self) -> str:
|
|
488
|
+
if self.curation_status == "incomplete":
|
|
489
|
+
return "failed"
|
|
490
|
+
return (
|
|
491
|
+
"completed_revision"
|
|
492
|
+
if self.call_receipt.publications
|
|
493
|
+
else "completed_abstention"
|
|
494
|
+
)
|
|
495
|
+
|
|
496
|
+
|
|
497
|
+
class G3PostsealCurationInterceptor:
|
|
498
|
+
"""One reusable feedback policy for the exact generic G3 screen."""
|
|
499
|
+
|
|
500
|
+
def __init__(
|
|
501
|
+
self,
|
|
502
|
+
*,
|
|
503
|
+
engine: AgenticEvolutionEngine,
|
|
504
|
+
planner: G3CausalScreenPlanner,
|
|
505
|
+
memory: InsightMemoryBank,
|
|
506
|
+
spec: G3PostsealCurationSpec,
|
|
507
|
+
) -> None:
|
|
508
|
+
if type(engine) is not AgenticEvolutionEngine:
|
|
509
|
+
raise TypeError("curation engine must be exact")
|
|
510
|
+
if type(planner) is not G3CausalScreenPlanner:
|
|
511
|
+
raise TypeError("curation planner must be exact")
|
|
512
|
+
if type(memory) is not InsightMemoryBank:
|
|
513
|
+
raise TypeError("curation memory must be exact")
|
|
514
|
+
if type(spec) is not G3PostsealCurationSpec:
|
|
515
|
+
raise TypeError("curation spec must be exact")
|
|
516
|
+
G3PostsealCurationSpec.__post_init__(spec)
|
|
517
|
+
if planner.engine is not engine or planner.memory is not memory:
|
|
518
|
+
raise ValueError("curation collaborators differ from planner runtime")
|
|
519
|
+
self.engine = engine
|
|
520
|
+
self.planner = planner
|
|
521
|
+
self.memory = memory
|
|
522
|
+
self.spec = spec
|
|
523
|
+
self.policy_id = spec.policy_id
|
|
524
|
+
self.policy_version = spec.policy_version
|
|
525
|
+
self.invoked_generations: list[int] = []
|
|
526
|
+
self.curated_entries: tuple[InsightMemoryEntry, ...] = ()
|
|
527
|
+
self.terminal_validation_receipt: G3TerminalStateValidationReceipt | None = None
|
|
528
|
+
self.curation_authority: G3PostsealCurationAuthority | None = None
|
|
529
|
+
self.curation_receipt: G3PostsealCurationReceipt | None = None
|
|
530
|
+
self.curation_failure_type: str | None = None
|
|
531
|
+
self._reservations: dict[int, GenerationFeedbackReservation] = {}
|
|
532
|
+
|
|
533
|
+
def _predecessor(self) -> tuple[InsightRef, InsightMemoryEntry]:
|
|
534
|
+
return _adaptive_predecessor(self.planner, self.memory)
|
|
535
|
+
|
|
536
|
+
def _reservation_metadata(self, *, generation: int) -> tuple[tuple[str, str], ...]:
|
|
537
|
+
if generation < 3:
|
|
538
|
+
return tuple(
|
|
539
|
+
sorted(
|
|
540
|
+
(
|
|
541
|
+
("curation_spec_sha256", self.spec.spec_sha256),
|
|
542
|
+
("stage", "sealed_no_op"),
|
|
543
|
+
)
|
|
544
|
+
)
|
|
545
|
+
)
|
|
546
|
+
if generation != 3:
|
|
547
|
+
raise ValueError("G3 curation cannot reserve a foreign generation")
|
|
548
|
+
terminal_authority = self.planner.terminal_validation_authority
|
|
549
|
+
if terminal_authority is None:
|
|
550
|
+
raise ValueError("G3 terminal validation authority is not sealed")
|
|
551
|
+
predecessor, entry = self._predecessor()
|
|
552
|
+
return tuple(
|
|
553
|
+
sorted(
|
|
554
|
+
(
|
|
555
|
+
("curation_spec_sha256", self.spec.spec_sha256),
|
|
556
|
+
(
|
|
557
|
+
"reflection_contract_sha256",
|
|
558
|
+
self.spec.insight_contract.identity_sha256,
|
|
559
|
+
),
|
|
560
|
+
(
|
|
561
|
+
"revision_predecessor",
|
|
562
|
+
f"{predecessor.insight_id.value}@{predecessor.version}",
|
|
563
|
+
),
|
|
564
|
+
(
|
|
565
|
+
"revision_predecessor_content_sha256",
|
|
566
|
+
entry.draft.content_sha256,
|
|
567
|
+
),
|
|
568
|
+
("source_scope_sha256", self.spec.source_scope.scope_sha256),
|
|
569
|
+
("stage", "post_g3"),
|
|
570
|
+
(
|
|
571
|
+
"terminal_validation_authority_sha256",
|
|
572
|
+
terminal_authority.authority_sha256,
|
|
573
|
+
),
|
|
574
|
+
)
|
|
575
|
+
)
|
|
576
|
+
)
|
|
577
|
+
|
|
578
|
+
def expected_reservation(self, *, generation: int) -> GenerationFeedbackReservation:
|
|
579
|
+
reservation = build_g3_postseal_curation_reservation(
|
|
580
|
+
spec=self.spec,
|
|
581
|
+
planner=self.planner,
|
|
582
|
+
memory=self.memory,
|
|
583
|
+
generation=generation,
|
|
584
|
+
)
|
|
585
|
+
if reservation.metadata != self._reservation_metadata(generation=generation):
|
|
586
|
+
raise AssertionError("curation reservation implementations diverged")
|
|
587
|
+
return reservation
|
|
588
|
+
|
|
589
|
+
def reserve(self, *, state, plan) -> GenerationFeedbackReservation:
|
|
590
|
+
if state.generation + 1 != plan.generation:
|
|
591
|
+
raise ValueError("feedback reservation observed the wrong generation")
|
|
592
|
+
if plan.generation in self._reservations:
|
|
593
|
+
raise RuntimeError("curation generation was reserved twice")
|
|
594
|
+
reservation = self.expected_reservation(generation=plan.generation)
|
|
595
|
+
self._reservations[plan.generation] = reservation
|
|
596
|
+
return reservation
|
|
597
|
+
|
|
598
|
+
async def after_generation(
|
|
599
|
+
self,
|
|
600
|
+
context: GenerationFeedbackContext,
|
|
601
|
+
) -> GenerationFeedbackResult:
|
|
602
|
+
generation = context.plan.generation
|
|
603
|
+
self.invoked_generations.append(generation)
|
|
604
|
+
expected_reservation = self._reservations.get(generation)
|
|
605
|
+
if context.reservation != expected_reservation:
|
|
606
|
+
raise ValueError("curation context differs from its frozen reservation")
|
|
607
|
+
if generation < 3:
|
|
608
|
+
if context.reservation.logical_llm_calls != 0:
|
|
609
|
+
raise ValueError("early G3 feedback reservation must be zero")
|
|
610
|
+
return GenerationFeedbackResult(
|
|
611
|
+
logical_llm_calls_used=0,
|
|
612
|
+
metadata=tuple(
|
|
613
|
+
sorted(
|
|
614
|
+
(
|
|
615
|
+
("curation_spec_sha256", self.spec.spec_sha256),
|
|
616
|
+
("curation_status", "not_due"),
|
|
617
|
+
)
|
|
618
|
+
)
|
|
619
|
+
),
|
|
620
|
+
)
|
|
621
|
+
if generation != 3:
|
|
622
|
+
raise ValueError("G3 curation received a foreign generation")
|
|
623
|
+
from agent_evolve.application.g3_causal_validation import (
|
|
624
|
+
validate_g3_terminal_state,
|
|
625
|
+
)
|
|
626
|
+
|
|
627
|
+
self.terminal_validation_receipt = validate_g3_terminal_state(
|
|
628
|
+
state=context.state,
|
|
629
|
+
planner=self.planner,
|
|
630
|
+
evaluation_cache_snapshot=(
|
|
631
|
+
await self.engine.evaluation_cache_snapshot()
|
|
632
|
+
),
|
|
633
|
+
)
|
|
634
|
+
receipts = context.state.generation_receipts
|
|
635
|
+
if (
|
|
636
|
+
type(receipts) is not tuple
|
|
637
|
+
or len(receipts) != 3
|
|
638
|
+
or receipts[-1] != context.generation_receipt
|
|
639
|
+
):
|
|
640
|
+
raise ValueError("curation requires sealed G1 through G3 receipts")
|
|
641
|
+
outcomes = self.spec.source_scope.select(receipts)
|
|
642
|
+
predecessor, predecessor_entry = self._predecessor()
|
|
643
|
+
terminal_authority = self.planner.terminal_validation_authority
|
|
644
|
+
if terminal_authority is None:
|
|
645
|
+
raise ValueError("terminal authority disappeared before curation")
|
|
646
|
+
generation_receipt_sha256s = tuple(
|
|
647
|
+
receipt.receipt_hash for receipt in receipts
|
|
648
|
+
)
|
|
649
|
+
if len(generation_receipt_sha256s) != 3: # narrows the tuple type.
|
|
650
|
+
raise AssertionError("G3 receipt cardinality changed")
|
|
651
|
+
authority = G3PostsealCurationAuthority(
|
|
652
|
+
spec_sha256=self.spec.spec_sha256,
|
|
653
|
+
reservation_hash=context.reservation.reservation_hash,
|
|
654
|
+
terminal_validation_receipt_sha256=(
|
|
655
|
+
self.terminal_validation_receipt.receipt_sha256
|
|
656
|
+
),
|
|
657
|
+
terminal_validation_authority_sha256=(
|
|
658
|
+
terminal_authority.authority_sha256
|
|
659
|
+
),
|
|
660
|
+
generation_receipt_sha256s=generation_receipt_sha256s,
|
|
661
|
+
source_scope_sha256=self.spec.source_scope.scope_sha256,
|
|
662
|
+
source_slot_ids=self.spec.source_scope.slot_ids,
|
|
663
|
+
source_operator_invocation_ids=tuple(
|
|
664
|
+
outcome.prepared.operator_invocation_id for outcome in outcomes
|
|
665
|
+
),
|
|
666
|
+
revision_predecessor=predecessor,
|
|
667
|
+
revision_predecessor_content_sha256=(
|
|
668
|
+
predecessor_entry.draft.content_sha256
|
|
669
|
+
),
|
|
670
|
+
insight_contract_sha256=(
|
|
671
|
+
self.spec.insight_contract.identity_sha256
|
|
672
|
+
),
|
|
673
|
+
reflection_label=self.spec.label,
|
|
674
|
+
)
|
|
675
|
+
# Publish the authority before crossing the provider boundary. A typed
|
|
676
|
+
# provider/cardinality failure can therefore be isolated and audited.
|
|
677
|
+
self.curation_authority = authority
|
|
678
|
+
try:
|
|
679
|
+
publication_result = await self.engine.reflect_with_receipt(
|
|
680
|
+
outcomes,
|
|
681
|
+
label=self.spec.label,
|
|
682
|
+
max_insights=1,
|
|
683
|
+
min_insights=0,
|
|
684
|
+
insight_contract=self.spec.insight_contract,
|
|
685
|
+
revision_predecessors=(predecessor,),
|
|
686
|
+
source_receipt_sha256s=generation_receipt_sha256s,
|
|
687
|
+
)
|
|
688
|
+
except ReflectionCallExecutionError as exc:
|
|
689
|
+
self.curation_failure_type = exc.failure_type
|
|
690
|
+
receipt = G3PostsealCurationReceipt(
|
|
691
|
+
authority=authority,
|
|
692
|
+
call_receipt=exc.receipt,
|
|
693
|
+
curation_status="incomplete",
|
|
694
|
+
failure_type=exc.failure_type,
|
|
695
|
+
)
|
|
696
|
+
self.curation_receipt = receipt
|
|
697
|
+
return self._feedback_result(receipt)
|
|
698
|
+
if type(publication_result) is not ReflectionPublicationResult:
|
|
699
|
+
raise TypeError("receipt-bearing reflection returned a foreign result")
|
|
700
|
+
ReflectionPublicationResult.__post_init__(publication_result)
|
|
701
|
+
self.curated_entries = publication_result.entries
|
|
702
|
+
receipt = G3PostsealCurationReceipt(
|
|
703
|
+
authority=authority,
|
|
704
|
+
call_receipt=publication_result.receipt,
|
|
705
|
+
curation_status="sealed_complete",
|
|
706
|
+
failure_type=None,
|
|
707
|
+
)
|
|
708
|
+
self.curation_receipt = receipt
|
|
709
|
+
return self._feedback_result(receipt)
|
|
710
|
+
|
|
711
|
+
def _feedback_result(
|
|
712
|
+
self,
|
|
713
|
+
receipt: G3PostsealCurationReceipt,
|
|
714
|
+
) -> GenerationFeedbackResult:
|
|
715
|
+
metadata = [
|
|
716
|
+
("curated_entry_count", str(len(receipt.call_receipt.publications))),
|
|
717
|
+
("curation_authority_sha256", receipt.authority.authority_sha256),
|
|
718
|
+
("curation_receipt_sha256", receipt.receipt_sha256),
|
|
719
|
+
("curation_spec_sha256", self.spec.spec_sha256),
|
|
720
|
+
("curation_status", receipt.curation_status),
|
|
721
|
+
("curation_publication_outcome", receipt.publication_outcome),
|
|
722
|
+
(
|
|
723
|
+
"reflection_call_receipt_sha256",
|
|
724
|
+
receipt.call_receipt.receipt_sha256,
|
|
725
|
+
),
|
|
726
|
+
(
|
|
727
|
+
"reflection_call_id",
|
|
728
|
+
receipt.call_receipt.call_id.value,
|
|
729
|
+
),
|
|
730
|
+
(
|
|
731
|
+
"reflection_max_output_tokens",
|
|
732
|
+
str(receipt.call_receipt.request.max_output_tokens),
|
|
733
|
+
),
|
|
734
|
+
(
|
|
735
|
+
"reflection_prompt_sha256",
|
|
736
|
+
receipt.call_receipt.request.prompt_sha256,
|
|
737
|
+
),
|
|
738
|
+
(
|
|
739
|
+
"reflection_request_sha256",
|
|
740
|
+
receipt.call_receipt.request.request_sha256,
|
|
741
|
+
),
|
|
742
|
+
(
|
|
743
|
+
"reflection_temperature",
|
|
744
|
+
(
|
|
745
|
+
"none"
|
|
746
|
+
if receipt.call_receipt.request.temperature is None
|
|
747
|
+
else float(
|
|
748
|
+
receipt.call_receipt.request.temperature
|
|
749
|
+
).hex()
|
|
750
|
+
),
|
|
751
|
+
),
|
|
752
|
+
(
|
|
753
|
+
"terminal_validation_receipt_sha256",
|
|
754
|
+
receipt.authority.terminal_validation_receipt_sha256,
|
|
755
|
+
),
|
|
756
|
+
]
|
|
757
|
+
if receipt.failure_type is not None:
|
|
758
|
+
metadata.append(("curation_failure_type", receipt.failure_type))
|
|
759
|
+
if receipt.call_receipt.telemetry_sha256 is not None:
|
|
760
|
+
metadata.append(
|
|
761
|
+
(
|
|
762
|
+
"reflection_telemetry_sha256",
|
|
763
|
+
receipt.call_receipt.telemetry_sha256,
|
|
764
|
+
)
|
|
765
|
+
)
|
|
766
|
+
return GenerationFeedbackResult(
|
|
767
|
+
logical_llm_calls_used=1,
|
|
768
|
+
metadata=tuple(sorted(metadata)),
|
|
769
|
+
)
|
|
770
|
+
|
|
771
|
+
|
|
772
|
+
class G3PostsealCurationFactory:
|
|
773
|
+
"""Deferred public-composition factory for the exact runtime identities."""
|
|
774
|
+
|
|
775
|
+
def __init__(
|
|
776
|
+
self,
|
|
777
|
+
*,
|
|
778
|
+
spec: G3PostsealCurationSpec,
|
|
779
|
+
) -> None:
|
|
780
|
+
if type(spec) is not G3PostsealCurationSpec:
|
|
781
|
+
raise TypeError("curation factory spec must be exact")
|
|
782
|
+
G3PostsealCurationSpec.__post_init__(spec)
|
|
783
|
+
self.spec = spec
|
|
784
|
+
self.interceptor: G3PostsealCurationInterceptor | None = None
|
|
785
|
+
self.runtime_identities: tuple[object, object, object, object] | None = None
|
|
786
|
+
|
|
787
|
+
def build(self, *, benchmark, engine, id_factory, memory, planner):
|
|
788
|
+
if self.interceptor is not None:
|
|
789
|
+
raise RuntimeError("curation factory may be invoked only once")
|
|
790
|
+
if type(planner) is not G3CausalScreenPlanner:
|
|
791
|
+
raise TypeError("curation factory requires the exact G3 runtime planner")
|
|
792
|
+
if (
|
|
793
|
+
planner.benchmark is not benchmark
|
|
794
|
+
or planner.engine is not engine
|
|
795
|
+
or planner.ids is not id_factory
|
|
796
|
+
or planner.memory is not memory
|
|
797
|
+
):
|
|
798
|
+
raise ValueError("curation factory received foreign runtime identities")
|
|
799
|
+
self.runtime_identities = (benchmark, engine, id_factory, memory)
|
|
800
|
+
self.interceptor = G3PostsealCurationInterceptor(
|
|
801
|
+
engine=engine,
|
|
802
|
+
planner=planner,
|
|
803
|
+
memory=memory,
|
|
804
|
+
spec=self.spec,
|
|
805
|
+
)
|
|
806
|
+
return self.interceptor
|
|
807
|
+
|
|
808
|
+
|
|
809
|
+
__all__ = [
|
|
810
|
+
"G3CurationSourceScope",
|
|
811
|
+
"G3PostsealCurationAuthority",
|
|
812
|
+
"G3PostsealCurationFactory",
|
|
813
|
+
"G3PostsealCurationInterceptor",
|
|
814
|
+
"G3PostsealCurationReceipt",
|
|
815
|
+
"G3PostsealCurationSpec",
|
|
816
|
+
"G3_POSTSEAL_CURATION_DEFINITION_SHA256",
|
|
817
|
+
"build_g3_postseal_curation_reservation",
|
|
818
|
+
]
|