b3-prosaic-runtime 0.9.2__tar.gz → 0.9.3__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.
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/CHANGELOG.md +7 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/PKG-INFO +1 -1
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/pyproject.toml +1 -1
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/scripts/conversation_wheel_smoke.py +1 -1
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/scripts/production_wheel_smoke.py +1 -1
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/b3_prosaic_runtime.egg-info/PKG-INFO +1 -1
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/__init__.py +1 -1
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/turn_capture.py +4 -1
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_conformance.py +1 -1
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_conversation_turns.py +19 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_distribution_metadata.py +1 -1
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_package_compatibility.py +1 -1
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/LICENSE +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/LICENSE-MIT +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/MANIFEST.in +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/NOTICE.md +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/README.md +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/docs/accounting.md +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/docs/adr-cli-sandbox.md +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/docs/cli-tools.md +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/docs/conformance.md +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/docs/conversations.md +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/docs/package-index.md +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/docs/production-acceptance.md +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/docs/release-0.7.1.md +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/docs/security.md +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/docs/structured-tools.md +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/docs/telemetry.md +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/docs/tool-effects.md +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/docs/workflow-factory-runtime-implementation.md +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/.prosaic/subagents/acquire-pilot.md +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/.prosaic/subagents/acquired-reviewer.md +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/.prosaic/subagents/catalog-reader.md +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/.prosaic/subagents/cli-spec-reviewer.md +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/.prosaic/subagents/launch-analyst.md +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/.prosaic/subagents/launch-briefer.md +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/.prosaic/subagents/launch-decision.md +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/.prosaic/subagents/launch-skeptic.md +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/.prosaic/subagents/native-summarizer.md +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/.prosaic/subagents/preloaded-reviewer.md +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/.prosaic/subagents/reviewer.md +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/.prosaic/subagents/summarizer.md +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/.prosaic/tools/analyze-spec.yml +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/README.md +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/anthropic.yml +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/catalog.json +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/catalog_tools.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/cli-tool/prosaic_example_analyzer.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/cli-tool/pyproject.toml +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/cli-tools-sandboxed.yml +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/cli-tools.yml +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/custom-tools.yml +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/evidence/launch/brief.md +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/evidence/launch/field-notes.md +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/evidence/launch/metrics.md +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/evidence/pilot.md +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/evidence/requirements.md +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/prosaic-runtime.yaml +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/run_acquisition.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/run_cli_tool.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/run_custom_tool.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/run_examples.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/run_sandbox_probe.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/run_tiers.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/tokenproxy.yml +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/understanding/.prosaic/subagents/reviewer.md +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/understanding/.prosaic/tools/understanding.yml +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/understanding/runtime.yml +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/with-tools.yml +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/scripts/release_artifacts.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/scripts/wheel_smoke.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/setup.cfg +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/b3_prosaic_runtime.egg-info/SOURCES.txt +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/b3_prosaic_runtime.egg-info/dependency_links.txt +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/b3_prosaic_runtime.egg-info/entry_points.txt +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/b3_prosaic_runtime.egg-info/requires.txt +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/b3_prosaic_runtime.egg-info/top_level.txt +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/accounting.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/accounting_capture.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/adapter.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/admission.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/anthropic.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/anthropic_stream.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/anthropic_usage.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/artifacts.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/budgets.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/cli.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/cli_tools.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/config.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/conformance.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/console.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/conversation.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/conversation_preparation.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/diagnostics.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/events.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/execution.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/execution_budget.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/http_bounds.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/openai_compatible.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/openai_compatible_compaction.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/openai_compatible_filters.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/openai_compatible_progress.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/openai_compatible_transcript.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/operation_context.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/policy.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/provider_types.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/runtime.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/sandbox.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/smoke_prose/pilot.md +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/smoke_prose/subagents/native-summarizer.md +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/smoke_prose/subagents/reviewer.md +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/smoke_prose/subagents/summarizer.md +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/structured_tools.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/telemetry.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/tool_effects.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/tool_registry.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/tools.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/types.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/support/conversation_server.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/support/tool_journal.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_accounting.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_acquisition.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_anthropic.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_anthropic_accounting.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_anthropic_package.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_anthropic_stream.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_artifact_admission.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_cli_sandbox.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_cli_tool_example.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_cli_tools.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_cli_tools_boundaries.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_config.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_conversation_bounds.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_conversation_contracts.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_conversation_distribution.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_conversation_failure_evidence.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_conversation_review_regressions.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_conversation_tool_batches.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_custom_tool_example.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_custom_tool_transport.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_custom_tools.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_execution_budget.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_features.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_http_boundaries.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_input_boundary.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_invocation_budgets.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_production_smoke.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_prompt_injection.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_provider_execution.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_read_provenance.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_redirect_safety.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_release_artifacts.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_run_adapter.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_runtime.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_sample_program.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_sandbox_probe_example.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_structured_tools.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_telemetry.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_tier_examples.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_tool_effect_workers.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_tool_effects.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_transport.py +0 -0
- {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_usage_integrity.py +0 -0
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.9.3 — 2026-10-14
|
|
4
|
+
|
|
5
|
+
- Normalize negative provider timeout exit statuses to 124 in conversation turn
|
|
6
|
+
results so Harness can persist failed timeout receipts without `store_corrupt`.
|
|
7
|
+
- Preserve existing run/CLI timeout statuses and the conversation storage format.
|
|
8
|
+
- Cover streaming and nonstreaming provider timeouts through the public turn API.
|
|
9
|
+
|
|
3
10
|
## 0.9.2 — 2026-10-13
|
|
4
11
|
|
|
5
12
|
- Add a host-owned ExecutionBudget that shares deadlines, provider/tool dispatch
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "b3-prosaic-runtime"
|
|
7
|
-
version = "0.9.
|
|
7
|
+
version = "0.9.3"
|
|
8
8
|
description = "Bounded execution of neutral Prosaic agents on OpenAI-compatible and native Anthropic endpoints"
|
|
9
9
|
requires-python = ">=3.11"
|
|
10
10
|
readme = "README.md"
|
|
@@ -22,7 +22,7 @@ def ownership():
|
|
|
22
22
|
import prosaic_runtime as api
|
|
23
23
|
import prosaic_runtime_postgres as recorder
|
|
24
24
|
for module, distribution, version in ((prosaic, 'b3-prosaic', '0.4.1'),
|
|
25
|
-
(api, 'b3-prosaic-runtime', '0.9.
|
|
25
|
+
(api, 'b3-prosaic-runtime', '0.9.3'),
|
|
26
26
|
(recorder, 'b3-prosaic-runtime-postgres', '0.3.0')):
|
|
27
27
|
owner = metadata.distribution(distribution)
|
|
28
28
|
assert module.__version__ == owner.version == version
|
|
@@ -49,7 +49,7 @@ def installed_origins():
|
|
|
49
49
|
owners = {}
|
|
50
50
|
origins = {}
|
|
51
51
|
for package, name, version in ((prosaic, "b3-prosaic", "0.4.1"),
|
|
52
|
-
(runtime, "b3-prosaic-runtime", "0.9.
|
|
52
|
+
(runtime, "b3-prosaic-runtime", "0.9.3"),
|
|
53
53
|
(postgres, "b3-prosaic-runtime-postgres", "0.3.0")):
|
|
54
54
|
owner = metadata.distribution(name)
|
|
55
55
|
assert owner.version == package.__version__ == version
|
|
@@ -231,7 +231,10 @@ class TurnCapture:
|
|
|
231
231
|
max_depth=self.limits.max_json_depth, max_nodes=self.limits.max_json_nodes))
|
|
232
232
|
except (ValueError, TypeError, UnicodeError):
|
|
233
233
|
metadata = {'failure_reason': code} if code else {}
|
|
234
|
-
|
|
234
|
+
# Durable conversation receipts use unsigned exit statuses. The legacy
|
|
235
|
+
# OpenAI-compatible transport reports socket/deadline timeouts as -1.
|
|
236
|
+
exit_code = 124 if result.exit_code < 0 and result.timed_out else result.exit_code
|
|
237
|
+
sanitized = Result(exit_code if code != 'outputLimit' else 1,
|
|
235
238
|
result.stdout if code is None else '', code or '', token_usage=known.get('totalTokens') if complete else None,
|
|
236
239
|
timed_out=result.timed_out, metadata=metadata)
|
|
237
240
|
return TurnResult(sanitized, completed, evidence)
|
|
@@ -44,7 +44,7 @@ def test_canonical_order_owned_snapshot_and_source_version():
|
|
|
44
44
|
encode = lambda value: json.dumps(value, sort_keys=True, ensure_ascii=False,
|
|
45
45
|
separators=(',', ':'), allow_nan=False)
|
|
46
46
|
assert encode(a) == encode(b)
|
|
47
|
-
assert a['version'] == 1 and a['runtimeVersion'] == '0.9.
|
|
47
|
+
assert a['version'] == 1 and a['runtimeVersion'] == '0.9.3'
|
|
48
48
|
assert tuple(case['id'] for case in a['cases']) == CASES
|
|
49
49
|
assert a['cases'][0]['origin'] == 'fixture'
|
|
50
50
|
assert a['cases'][1]['state'] == 'not_run'
|
|
@@ -13,6 +13,25 @@ def execute(fx, **kwargs):
|
|
|
13
13
|
return rt.turn(fx.agent, policy=fx.policy, **kwargs)
|
|
14
14
|
|
|
15
15
|
|
|
16
|
+
@pytest.mark.parametrize('streaming', [False, True])
|
|
17
|
+
def test_provider_timeout_turn_has_a_persistable_exit_status(turn_fixture, monkeypatch, streaming):
|
|
18
|
+
class Opener:
|
|
19
|
+
def open(self, *args, **kwargs):
|
|
20
|
+
raise TimeoutError('synthetic provider timeout')
|
|
21
|
+
|
|
22
|
+
# Replace only network I/O; execute the real provider and turn reducers.
|
|
23
|
+
monkeypatch.setattr('urllib.request.build_opener', lambda *args: Opener())
|
|
24
|
+
with turn_fixture('openai-compatible') as fx:
|
|
25
|
+
fx.streaming = streaming
|
|
26
|
+
result = execute(fx, message='Hello')
|
|
27
|
+
assert result.result.exit_code == 124
|
|
28
|
+
assert result.result.timed_out is True
|
|
29
|
+
assert result.result.stdout == ''
|
|
30
|
+
assert result.completed_turn is None
|
|
31
|
+
assert result.evidence.to_dict()['failureCode'] == 'timeout'
|
|
32
|
+
assert result.evidence.to_dict()['providerAttempts'] == 1
|
|
33
|
+
|
|
34
|
+
|
|
16
35
|
@pytest.mark.parametrize('provider', ['openai-compatible', 'anthropic'])
|
|
17
36
|
def test_failed_corrections_are_unprivileged_in_next_actual_payload(turn_fixture, provider):
|
|
18
37
|
with turn_fixture(provider) as fx:
|
|
@@ -14,7 +14,7 @@ import pytest
|
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
@pytest.mark.parametrize("project,name,version,package,dependency,licenses", [
|
|
17
|
-
(".", "b3-prosaic-runtime", "0.9.
|
|
17
|
+
(".", "b3-prosaic-runtime", "0.9.3", "prosaic_runtime", "b3-prosaic<0.5,>=0.4",
|
|
18
18
|
("LICENSE", "LICENSE-MIT", "NOTICE.md")),
|
|
19
19
|
("adapters/postgres", "b3-prosaic-runtime-postgres", "0.3.0", "prosaic_runtime_postgres",
|
|
20
20
|
"b3-prosaic-runtime<0.10,>=0.9", ("LICENSE", "LICENSE-MIT", "NOTICE.md")),
|
|
@@ -17,7 +17,7 @@ def test_wheel_metadata():
|
|
|
17
17
|
|
|
18
18
|
for package, name, version in (
|
|
19
19
|
(prosaic, "b3-prosaic", "0.4.1"),
|
|
20
|
-
(prosaic_runtime, "b3-prosaic-runtime", "0.9.
|
|
20
|
+
(prosaic_runtime, "b3-prosaic-runtime", "0.9.3"),
|
|
21
21
|
(prosaic_runtime_postgres, "b3-prosaic-runtime-postgres", "0.3.0")):
|
|
22
22
|
owner = metadata.distribution(name)
|
|
23
23
|
assert owner.version == package.__version__ == version
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/.prosaic/subagents/acquire-pilot.md
RENAMED
|
File without changes
|
|
File without changes
|
{b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/.prosaic/subagents/catalog-reader.md
RENAMED
|
File without changes
|
|
File without changes
|
{b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/.prosaic/subagents/launch-analyst.md
RENAMED
|
File without changes
|
{b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/.prosaic/subagents/launch-briefer.md
RENAMED
|
File without changes
|
{b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/.prosaic/subagents/launch-decision.md
RENAMED
|
File without changes
|
{b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/.prosaic/subagents/launch-skeptic.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/.prosaic/subagents/reviewer.md
RENAMED
|
File without changes
|
{b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/.prosaic/subagents/summarizer.md
RENAMED
|
File without changes
|
{b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/.prosaic/tools/analyze-spec.yml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/cli-tool/prosaic_example_analyzer.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/evidence/launch/field-notes.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/b3_prosaic_runtime.egg-info/SOURCES.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/b3_prosaic_runtime.egg-info/requires.txt
RENAMED
|
File without changes
|
{b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/b3_prosaic_runtime.egg-info/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|
{b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/accounting_capture.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/anthropic_stream.py
RENAMED
|
File without changes
|
{b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/anthropic_usage.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/execution_budget.py
RENAMED
|
File without changes
|
|
File without changes
|
{b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/openai_compatible.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/operation_context.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/smoke_prose/pilot.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/structured_tools.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_conversation_distribution.py
RENAMED
|
File without changes
|
{b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_conversation_failure_evidence.py
RENAMED
|
File without changes
|
{b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_conversation_review_regressions.py
RENAMED
|
File without changes
|
{b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_conversation_tool_batches.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|