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.
Files changed (163) hide show
  1. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/CHANGELOG.md +7 -0
  2. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/PKG-INFO +1 -1
  3. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/pyproject.toml +1 -1
  4. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/scripts/conversation_wheel_smoke.py +1 -1
  5. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/scripts/production_wheel_smoke.py +1 -1
  6. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/b3_prosaic_runtime.egg-info/PKG-INFO +1 -1
  7. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/__init__.py +1 -1
  8. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/turn_capture.py +4 -1
  9. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_conformance.py +1 -1
  10. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_conversation_turns.py +19 -0
  11. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_distribution_metadata.py +1 -1
  12. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_package_compatibility.py +1 -1
  13. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/LICENSE +0 -0
  14. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/LICENSE-MIT +0 -0
  15. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/MANIFEST.in +0 -0
  16. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/NOTICE.md +0 -0
  17. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/README.md +0 -0
  18. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/docs/accounting.md +0 -0
  19. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/docs/adr-cli-sandbox.md +0 -0
  20. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/docs/cli-tools.md +0 -0
  21. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/docs/conformance.md +0 -0
  22. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/docs/conversations.md +0 -0
  23. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/docs/package-index.md +0 -0
  24. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/docs/production-acceptance.md +0 -0
  25. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/docs/release-0.7.1.md +0 -0
  26. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/docs/security.md +0 -0
  27. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/docs/structured-tools.md +0 -0
  28. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/docs/telemetry.md +0 -0
  29. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/docs/tool-effects.md +0 -0
  30. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/docs/workflow-factory-runtime-implementation.md +0 -0
  31. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/.prosaic/subagents/acquire-pilot.md +0 -0
  32. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/.prosaic/subagents/acquired-reviewer.md +0 -0
  33. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/.prosaic/subagents/catalog-reader.md +0 -0
  34. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/.prosaic/subagents/cli-spec-reviewer.md +0 -0
  35. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/.prosaic/subagents/launch-analyst.md +0 -0
  36. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/.prosaic/subagents/launch-briefer.md +0 -0
  37. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/.prosaic/subagents/launch-decision.md +0 -0
  38. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/.prosaic/subagents/launch-skeptic.md +0 -0
  39. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/.prosaic/subagents/native-summarizer.md +0 -0
  40. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/.prosaic/subagents/preloaded-reviewer.md +0 -0
  41. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/.prosaic/subagents/reviewer.md +0 -0
  42. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/.prosaic/subagents/summarizer.md +0 -0
  43. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/.prosaic/tools/analyze-spec.yml +0 -0
  44. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/README.md +0 -0
  45. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/anthropic.yml +0 -0
  46. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/catalog.json +0 -0
  47. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/catalog_tools.py +0 -0
  48. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/cli-tool/prosaic_example_analyzer.py +0 -0
  49. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/cli-tool/pyproject.toml +0 -0
  50. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/cli-tools-sandboxed.yml +0 -0
  51. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/cli-tools.yml +0 -0
  52. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/custom-tools.yml +0 -0
  53. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/evidence/launch/brief.md +0 -0
  54. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/evidence/launch/field-notes.md +0 -0
  55. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/evidence/launch/metrics.md +0 -0
  56. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/evidence/pilot.md +0 -0
  57. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/evidence/requirements.md +0 -0
  58. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/prosaic-runtime.yaml +0 -0
  59. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/run_acquisition.py +0 -0
  60. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/run_cli_tool.py +0 -0
  61. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/run_custom_tool.py +0 -0
  62. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/run_examples.py +0 -0
  63. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/run_sandbox_probe.py +0 -0
  64. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/run_tiers.py +0 -0
  65. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/tokenproxy.yml +0 -0
  66. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/understanding/.prosaic/subagents/reviewer.md +0 -0
  67. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/understanding/.prosaic/tools/understanding.yml +0 -0
  68. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/understanding/runtime.yml +0 -0
  69. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/examples/with-tools.yml +0 -0
  70. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/scripts/release_artifacts.py +0 -0
  71. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/scripts/wheel_smoke.py +0 -0
  72. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/setup.cfg +0 -0
  73. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/b3_prosaic_runtime.egg-info/SOURCES.txt +0 -0
  74. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/b3_prosaic_runtime.egg-info/dependency_links.txt +0 -0
  75. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/b3_prosaic_runtime.egg-info/entry_points.txt +0 -0
  76. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/b3_prosaic_runtime.egg-info/requires.txt +0 -0
  77. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/b3_prosaic_runtime.egg-info/top_level.txt +0 -0
  78. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/accounting.py +0 -0
  79. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/accounting_capture.py +0 -0
  80. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/adapter.py +0 -0
  81. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/admission.py +0 -0
  82. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/anthropic.py +0 -0
  83. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/anthropic_stream.py +0 -0
  84. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/anthropic_usage.py +0 -0
  85. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/artifacts.py +0 -0
  86. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/budgets.py +0 -0
  87. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/cli.py +0 -0
  88. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/cli_tools.py +0 -0
  89. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/config.py +0 -0
  90. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/conformance.py +0 -0
  91. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/console.py +0 -0
  92. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/conversation.py +0 -0
  93. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/conversation_preparation.py +0 -0
  94. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/diagnostics.py +0 -0
  95. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/events.py +0 -0
  96. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/execution.py +0 -0
  97. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/execution_budget.py +0 -0
  98. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/http_bounds.py +0 -0
  99. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/openai_compatible.py +0 -0
  100. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/openai_compatible_compaction.py +0 -0
  101. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/openai_compatible_filters.py +0 -0
  102. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/openai_compatible_progress.py +0 -0
  103. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/openai_compatible_transcript.py +0 -0
  104. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/operation_context.py +0 -0
  105. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/policy.py +0 -0
  106. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/provider_types.py +0 -0
  107. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/runtime.py +0 -0
  108. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/sandbox.py +0 -0
  109. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/smoke_prose/pilot.md +0 -0
  110. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/smoke_prose/subagents/native-summarizer.md +0 -0
  111. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/smoke_prose/subagents/reviewer.md +0 -0
  112. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/smoke_prose/subagents/summarizer.md +0 -0
  113. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/structured_tools.py +0 -0
  114. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/telemetry.py +0 -0
  115. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/tool_effects.py +0 -0
  116. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/tool_registry.py +0 -0
  117. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/tools.py +0 -0
  118. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/src/prosaic_runtime/types.py +0 -0
  119. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/support/conversation_server.py +0 -0
  120. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/support/tool_journal.py +0 -0
  121. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_accounting.py +0 -0
  122. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_acquisition.py +0 -0
  123. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_anthropic.py +0 -0
  124. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_anthropic_accounting.py +0 -0
  125. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_anthropic_package.py +0 -0
  126. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_anthropic_stream.py +0 -0
  127. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_artifact_admission.py +0 -0
  128. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_cli_sandbox.py +0 -0
  129. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_cli_tool_example.py +0 -0
  130. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_cli_tools.py +0 -0
  131. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_cli_tools_boundaries.py +0 -0
  132. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_config.py +0 -0
  133. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_conversation_bounds.py +0 -0
  134. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_conversation_contracts.py +0 -0
  135. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_conversation_distribution.py +0 -0
  136. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_conversation_failure_evidence.py +0 -0
  137. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_conversation_review_regressions.py +0 -0
  138. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_conversation_tool_batches.py +0 -0
  139. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_custom_tool_example.py +0 -0
  140. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_custom_tool_transport.py +0 -0
  141. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_custom_tools.py +0 -0
  142. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_execution_budget.py +0 -0
  143. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_features.py +0 -0
  144. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_http_boundaries.py +0 -0
  145. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_input_boundary.py +0 -0
  146. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_invocation_budgets.py +0 -0
  147. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_production_smoke.py +0 -0
  148. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_prompt_injection.py +0 -0
  149. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_provider_execution.py +0 -0
  150. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_read_provenance.py +0 -0
  151. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_redirect_safety.py +0 -0
  152. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_release_artifacts.py +0 -0
  153. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_run_adapter.py +0 -0
  154. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_runtime.py +0 -0
  155. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_sample_program.py +0 -0
  156. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_sandbox_probe_example.py +0 -0
  157. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_structured_tools.py +0 -0
  158. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_telemetry.py +0 -0
  159. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_tier_examples.py +0 -0
  160. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_tool_effect_workers.py +0 -0
  161. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_tool_effects.py +0 -0
  162. {b3_prosaic_runtime-0.9.2 → b3_prosaic_runtime-0.9.3}/tests/test_transport.py +0 -0
  163. {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
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: b3-prosaic-runtime
3
- Version: 0.9.2
3
+ Version: 0.9.3
4
4
  Summary: Bounded execution of neutral Prosaic agents on OpenAI-compatible and native Anthropic endpoints
5
5
  Author: B3 Cognition
6
6
  License-Expression: Apache-2.0
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "b3-prosaic-runtime"
7
- version = "0.9.2"
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.2'),
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.2"),
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
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: b3-prosaic-runtime
3
- Version: 0.9.2
3
+ Version: 0.9.3
4
4
  Summary: Bounded execution of neutral Prosaic agents on OpenAI-compatible and native Anthropic endpoints
5
5
  Author: B3 Cognition
6
6
  License-Expression: Apache-2.0
@@ -1,5 +1,5 @@
1
1
  """Execute neutral Prosaic artifacts with explicitly granted authority."""
2
- __version__ = '0.9.2'
2
+ __version__ = '0.9.3'
3
3
 
4
4
  from .artifacts import ProsaicArtifact
5
5
  from .config import EndpointConfig, RuntimeConfig, RunLimits, CliSandboxConfig
@@ -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
- sanitized = Result(result.exit_code if code != 'outputLimit' else 1,
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.2'
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.2", "prosaic_runtime", "b3-prosaic<0.5,>=0.4",
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.2"),
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