fred-runtime 3.5.0__tar.gz → 3.5.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (210) hide show
  1. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/PKG-INFO +1 -1
  2. fred_runtime-3.5.0/fred_runtime/migrations.py → fred_runtime-3.5.1/fred_runtime/migrations/__init__.py +5 -5
  3. fred_runtime-3.5.1/fred_runtime/migrations/env.py +50 -0
  4. fred_runtime-3.5.1/fred_runtime/migrations/script.py.mako +32 -0
  5. fred_runtime-3.5.1/fred_runtime/migrations/versions/__init__.py +1 -0
  6. fred_runtime-3.5.1/fred_runtime/migrations/versions/a1e2f3c4d5b6_create_session_history.py +75 -0
  7. fred_runtime-3.5.1/fred_runtime/migrations/versions/b2f3a4e5c6d7_add_exchange_id.py +49 -0
  8. fred_runtime-3.5.1/fred_runtime/migrations/versions/c3d4b5a6f7e8_add_team_and_instance.py +70 -0
  9. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime.egg-info/PKG-INFO +1 -1
  10. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime.egg-info/SOURCES.txt +8 -1
  11. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/pyproject.toml +5 -2
  12. fred_runtime-3.5.1/tests/test_migrations.py +80 -0
  13. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/README.md +0 -0
  14. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/__init__.py +0 -0
  15. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/__main__.py +0 -0
  16. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/app/__init__.py +0 -0
  17. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/app/_catalogs.py +0 -0
  18. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/app/agent_app.py +0 -0
  19. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/app/chat_input_limit.py +0 -0
  20. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/app/config.py +0 -0
  21. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/app/config_loader.py +0 -0
  22. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/app/container.py +0 -0
  23. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/app/context.py +0 -0
  24. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/app/dependencies.py +0 -0
  25. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/app/mcp_config.py +0 -0
  26. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/app/observability_factory.py +0 -0
  27. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/app/openai_compat_router.py +0 -0
  28. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/capabilities/__init__.py +0 -0
  29. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/capabilities/assembly.py +0 -0
  30. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/capabilities/assets.py +0 -0
  31. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/capabilities/demo.py +0 -0
  32. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/capabilities/demo_migrations/env.py +0 -0
  33. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/capabilities/demo_migrations/versions/d1e2m0a0b0c0_create_demo_echo_notes.py +0 -0
  34. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/capabilities/document_access/__init__.py +0 -0
  35. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/capabilities/document_access/capability.py +0 -0
  36. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/capabilities/document_extract/__init__.py +0 -0
  37. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/capabilities/document_extract/capability.py +0 -0
  38. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/capabilities/document_label_search/__init__.py +0 -0
  39. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/capabilities/document_label_search/capability.py +0 -0
  40. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/capabilities/document_read_common.py +0 -0
  41. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/capabilities/document_similarity/__init__.py +0 -0
  42. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/capabilities/document_similarity/capability.py +0 -0
  43. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/capabilities/document_summarize/__init__.py +0 -0
  44. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/capabilities/document_summarize/capability.py +0 -0
  45. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/capabilities/document_verbatim/__init__.py +0 -0
  46. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/capabilities/document_verbatim/capability.py +0 -0
  47. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/capabilities/errors.py +0 -0
  48. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/capabilities/mcp.py +0 -0
  49. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/capabilities/openapi_dump.py +0 -0
  50. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/capabilities/registry.py +0 -0
  51. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/cli/__init__.py +0 -0
  52. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/cli/completion.py +0 -0
  53. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/cli/entrypoint.py +0 -0
  54. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/cli/history_display.py +0 -0
  55. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/cli/kpi_display.py +0 -0
  56. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/cli/pod_client.py +0 -0
  57. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/cli/repl.py +0 -0
  58. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/cli/repl_helpers.py +0 -0
  59. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/cli/url_helpers.py +0 -0
  60. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/client.py +0 -0
  61. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/common/__init__.py +0 -0
  62. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/common/context_aware_tool.py +0 -0
  63. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/common/kf_base_client.py +0 -0
  64. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/common/kf_document_client.py +0 -0
  65. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/common/kf_fast_text_client.py +0 -0
  66. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/common/kf_http_client.py +0 -0
  67. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/common/kf_markdown_media_client.py +0 -0
  68. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/common/kf_tag_client.py +0 -0
  69. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/common/kf_vectorsearch_client.py +0 -0
  70. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/common/kf_workspace_client.py +0 -0
  71. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/common/mcp_interceptors.py +0 -0
  72. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/common/mcp_runtime.py +0 -0
  73. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/common/mcp_toolkit.py +0 -0
  74. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/common/mcp_utils.py +0 -0
  75. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/common/structures.py +0 -0
  76. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/common/table_hits.py +0 -0
  77. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/common/token_expiry.py +0 -0
  78. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/common/tool_node_utils.py +0 -0
  79. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/deep/__init__.py +0 -0
  80. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/deep/deep_runtime.py +0 -0
  81. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/eval/__init__.py +0 -0
  82. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/eval/collector.py +0 -0
  83. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/graph/__init__.py +0 -0
  84. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/graph/graph_runtime.py +0 -0
  85. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/integrations/__init__.py +0 -0
  86. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/integrations/inprocess_toolkit_registry.py +0 -0
  87. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/integrations/kf_vector_search/__init__.py +0 -0
  88. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/integrations/kf_vector_search/toolkit.py +0 -0
  89. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/integrations/v2_runtime/__init__.py +0 -0
  90. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/integrations/v2_runtime/adapters.py +0 -0
  91. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/model_routing/__init__.py +0 -0
  92. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/model_routing/authz.py +0 -0
  93. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/model_routing/catalog.py +0 -0
  94. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/model_routing/contracts.py +0 -0
  95. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/model_routing/provider.py +0 -0
  96. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/model_routing/resolver.py +0 -0
  97. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/react/__init__.py +0 -0
  98. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/react/middleware/__init__.py +0 -0
  99. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/react/middleware/checkpoint_hygiene.py +0 -0
  100. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/react/middleware/dynamic_prompt.py +0 -0
  101. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/react/middleware/frame.py +0 -0
  102. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/react/middleware/hitl.py +0 -0
  103. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/react/middleware/shared.py +0 -0
  104. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/react/middleware/tool_observability.py +0 -0
  105. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/react/middleware/tracing_kpi.py +0 -0
  106. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/react/react_langchain_adapter.py +0 -0
  107. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/react/react_message_codec.py +0 -0
  108. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/react/react_model_adapter.py +0 -0
  109. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/react/react_prompting.py +0 -0
  110. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/react/react_runtime.py +0 -0
  111. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/react/react_stream_adapter.py +0 -0
  112. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/react/react_tool_binding.py +0 -0
  113. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/react/react_tool_loop.py +0 -0
  114. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/react/react_tool_rendering.py +0 -0
  115. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/react/react_tool_resolution.py +0 -0
  116. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/react/react_tool_utils.py +0 -0
  117. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/react/react_tracing.py +0 -0
  118. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/runtime_context.py +0 -0
  119. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/runtime_support/__init__.py +0 -0
  120. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/runtime_support/checkpoints.py +0 -0
  121. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/runtime_support/model_metadata.py +0 -0
  122. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/runtime_support/request_context_helpers.py +0 -0
  123. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/runtime_support/sql_checkpointer.py +0 -0
  124. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/runtime_support/trace_payloads.py +0 -0
  125. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/runtime_support/user_token_refresher.py +0 -0
  126. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/support/__init__.py +0 -0
  127. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/support/filesystem_context.py +0 -0
  128. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/support/thinking.py +0 -0
  129. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/support/tool_loop.py +0 -0
  130. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime.egg-info/dependency_links.txt +0 -0
  131. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime.egg-info/entry_points.txt +0 -0
  132. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime.egg-info/requires.txt +0 -0
  133. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime.egg-info/top_level.txt +0 -0
  134. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/setup.cfg +0 -0
  135. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_agent_app.py +0 -0
  136. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_capability_agent_1973.py +0 -0
  137. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_capability_chat_controls_1976.py +0 -0
  138. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_capability_chat_parts_1977.py +0 -0
  139. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_capability_document_access_1906.py +0 -0
  140. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_capability_document_label_search.py +0 -0
  141. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_capability_document_reading.py +0 -0
  142. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_capability_document_similarity.py +0 -0
  143. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_capability_document_summarize.py +0 -0
  144. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_capability_endpoints_1974.py +0 -0
  145. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_capability_registry_1973.py +0 -0
  146. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_capability_routes_tables_1979.py +0 -0
  147. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_capability_selection_1974.py +0 -0
  148. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_capability_tool_return_convention.py +0 -0
  149. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_chat_input_limit.py +0 -0
  150. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_checkpoint_namespace.py +0 -0
  151. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_client.py +0 -0
  152. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_config_loader.py +0 -0
  153. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_context.py +0 -0
  154. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_context_aware_tool.py +0 -0
  155. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_conversational_memory.py +0 -0
  156. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_deep_agent_middleware.py +0 -0
  157. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_document_port_error_redaction.py +0 -0
  158. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_document_similarity_adapter.py +0 -0
  159. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_eval_collector.py +0 -0
  160. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_eval_trace.py +0 -0
  161. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_fred_workspace_fs.py +0 -0
  162. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_graph_capability_bridge.py +0 -0
  163. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_graph_checkpoint_namespace.py +0 -0
  164. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_graph_runtime_invoke_agent.py +0 -0
  165. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_graph_runtime_observability.py +0 -0
  166. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_graph_runtime_token_usage_totals.py +0 -0
  167. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_history.py +0 -0
  168. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_history_display.py +0 -0
  169. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_hitl_resume_langgraph_integration.py +0 -0
  170. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_kf_base_client_refresh_shapes.py +0 -0
  171. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_kf_vector_search_toolkit.py +0 -0
  172. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_kf_workspace_client.py +0 -0
  173. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_knowledge_search_table_ordering.py +0 -0
  174. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_knowledge_search_tool_invoker_sources.py +0 -0
  175. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_kpi_display.py +0 -0
  176. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_langfuse_tracing.py +0 -0
  177. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_langgraph_interrupt_id_semantics.py +0 -0
  178. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_mcp_config.py +0 -0
  179. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_model_enforcement.py +0 -0
  180. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_model_metadata_cache_tokens.py +0 -0
  181. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_model_reasoning_enablement.py +0 -0
  182. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_model_routing.py +0 -0
  183. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_model_routing_provider.py +0 -0
  184. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_models_catalog_projection.py +0 -0
  185. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_openai_compat_router.py +0 -0
  186. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_pod_client.py +0 -0
  187. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_react_checkpoint_namespace.py +0 -0
  188. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_react_loop_regressions_1972.py +0 -0
  189. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_react_message_codec_resume.py +0 -0
  190. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_react_middleware_frame.py +0 -0
  191. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_react_prompting.py +0 -0
  192. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_react_thinking.py +0 -0
  193. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_react_token_usage_totals.py +0 -0
  194. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_react_tool_error_final_2244.py +0 -0
  195. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_repl_helpers.py +0 -0
  196. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_runtime_context_prompt_injection.py +0 -0
  197. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_smoke.py +0 -0
  198. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_spike_capability_state_1971.py +0 -0
  199. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_sql_checkpointer_hitl_claim.py +0 -0
  200. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_sql_checkpointer_owner.py +0 -0
  201. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_table_repair_wiring.py +0 -0
  202. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_token_expiry.py +0 -0
  203. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_tool_carrier_middleware_naming.py +0 -0
  204. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_tool_loop_trim.py +0 -0
  205. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_tool_observability_middleware.py +0 -0
  206. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_trace_payloads.py +0 -0
  207. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_tracing_kpi_content_confinement.py +0 -0
  208. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_url_helpers.py +0 -0
  209. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_user_token_refresher.py +0 -0
  210. {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_vector_similarity_search_retry.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fred-runtime
3
- Version: 3.5.0
3
+ Version: 3.5.1
4
4
  Summary: Runtime adapters and infrastructure wiring for Fred v2 agents.
5
5
  Author-email: Thales <noreply@thalesgroup.com>
6
6
  License: Apache-2.0
@@ -38,13 +38,13 @@ import logging
38
38
  import os
39
39
  from pathlib import Path
40
40
 
41
- from .capabilities import CapabilityRegistry
41
+ from ..capabilities import CapabilityRegistry
42
42
 
43
43
  logger = logging.getLogger(__name__)
44
44
 
45
- # fred-runtime's own Alembic tree ships beside the package (libs/fred-runtime/
46
- # alembic), one level above this module's package directory.
47
- RUNTIME_ALEMBIC_DIR = Path(__file__).resolve().parent.parent / "alembic"
45
+ # This package is the runtime's Alembic tree, so the migration CLI needs no
46
+ # source checkout or repository-relative resources.
47
+ RUNTIME_ALEMBIC_DIR = Path(__file__).resolve().parent
48
48
 
49
49
 
50
50
  def _upgrade(script_location: str, *, label: str) -> None:
@@ -106,7 +106,7 @@ def upgrade_sqlite_database(sqlite_path: str | Path) -> None:
106
106
  leaves `alembic_version_runtime` stamped like a real install. It costs ~30ms
107
107
  per database once imports are warm.
108
108
 
109
- Why `DATABASE_URL`: `alembic/env.py` honours it ahead of `CONFIG_FILE`
109
+ Why `DATABASE_URL`: the packaged Alembic env honours it ahead of `CONFIG_FILE`
110
110
  (`fred_core.sql.alembic_env._build_url`), which is the only way to point the
111
111
  tree at an arbitrary file. The previous value is restored, since tests run
112
112
  in-process and some set it themselves.
@@ -0,0 +1,50 @@
1
+ # Copyright Thales 2026
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ from __future__ import annotations
16
+
17
+ from logging.config import fileConfig
18
+ from typing import cast
19
+
20
+ from alembic import context
21
+ from fred_core.history.history_models import SessionHistoryRow # noqa: F401
22
+ from fred_core.sql import make_alembic_env
23
+ from sqlalchemy import MetaData, Table
24
+
25
+ from fred_runtime.app.config_loader import load_agent_pod_config
26
+
27
+ # Alembic Config object — provides access to values in alembic.ini.
28
+ config = context.config
29
+
30
+ # Set up Python logging from alembic.ini if present.
31
+ if config.config_file_name is not None:
32
+ fileConfig(config.config_file_name)
33
+
34
+ # Build a MetaData scoped to only the tables fred-runtime owns.
35
+ # SessionHistoryRow shares Base with other backends (users, session, teammetadata),
36
+ # so we must not pass Base.metadata directly — that would make alembic check
37
+ # report drift for tables managed by control-plane-backend.
38
+ _runtime_metadata = MetaData()
39
+ cast(Table, SessionHistoryRow.__table__).to_metadata(_runtime_metadata)
40
+
41
+ run_migrations_offline, run_migrations_online = make_alembic_env(
42
+ target_metadata=_runtime_metadata,
43
+ get_postgres_config=lambda: load_agent_pod_config().storage.postgres,
44
+ version_table="alembic_version_runtime",
45
+ )
46
+
47
+ if context.is_offline_mode():
48
+ run_migrations_offline()
49
+ else:
50
+ run_migrations_online()
@@ -0,0 +1,32 @@
1
+ ${message}
2
+
3
+ Revision ID: ${up_revision}
4
+ Revises: ${down_revision | comma,n}
5
+ Create Date: ${create_date}
6
+
7
+ """
8
+ from typing import Sequence, Union
9
+
10
+ from alembic import op
11
+ import sqlalchemy as sa
12
+ ${imports if imports else ""}
13
+
14
+ # revision identifiers, used by Alembic.
15
+ # codeql[py/unused-global-variable]
16
+ revision: str = ${repr(up_revision)}
17
+ # codeql[py/unused-global-variable]
18
+ down_revision: Union[str, Sequence[str], None] = ${repr(down_revision)}
19
+ # codeql[py/unused-global-variable]
20
+ branch_labels: Union[str, Sequence[str], None] = ${repr(branch_labels)}
21
+ # codeql[py/unused-global-variable]
22
+ depends_on: Union[str, Sequence[str], None] = ${repr(depends_on)}
23
+
24
+
25
+ def upgrade() -> None:
26
+ """Upgrade schema."""
27
+ ${upgrades if upgrades else "pass"}
28
+
29
+
30
+ def downgrade() -> None:
31
+ """Downgrade schema."""
32
+ ${downgrades if downgrades else "pass"}
@@ -0,0 +1 @@
1
+ """Linear fred-runtime Alembic revision history."""
@@ -0,0 +1,75 @@
1
+ # Copyright Thales 2026
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ """create session_history table
16
+
17
+ Initial schema for the session_history table as originally deployed via
18
+ PostgresHistoryStore._ensure_tables (CREATE TABLE IF NOT EXISTS).
19
+
20
+ Stamp an existing production database that already has this table with:
21
+ alembic stamp a1e2f3c4d5b6
22
+
23
+ Revision ID: a1e2f3c4d5b6
24
+ Revises:
25
+ Create Date: 2026-06-02 00:00:00.000000
26
+
27
+ """
28
+
29
+ from typing import Sequence, Union
30
+
31
+ import sqlalchemy as sa
32
+ from alembic import op
33
+ from sqlalchemy.dialects import postgresql
34
+
35
+ # revision identifiers, used by Alembic.
36
+ revision: str = "a1e2f3c4d5b6" # pragma: allowlist secret
37
+ down_revision: Union[str, Sequence[str], None] = None
38
+ branch_labels: Union[str, Sequence[str], None] = None
39
+ depends_on: Union[str, Sequence[str], None] = None
40
+
41
+
42
+ def upgrade() -> None:
43
+ """Upgrade schema."""
44
+ op.create_table(
45
+ "session_history",
46
+ sa.Column("session_id", sa.String(), nullable=False),
47
+ sa.Column("user_id", sa.String(), nullable=False),
48
+ sa.Column("rank", sa.Integer(), nullable=False),
49
+ sa.Column("timestamp", sa.DateTime(timezone=True), nullable=False),
50
+ sa.Column("role", sa.String(), nullable=False),
51
+ sa.Column("channel", sa.String(), nullable=False),
52
+ sa.Column(
53
+ "parts_json",
54
+ postgresql.JSONB(astext_type=sa.Text()).with_variant(sa.JSON(), "sqlite"),
55
+ nullable=True,
56
+ ),
57
+ sa.Column(
58
+ "metadata_json",
59
+ postgresql.JSONB(astext_type=sa.Text()).with_variant(sa.JSON(), "sqlite"),
60
+ nullable=True,
61
+ ),
62
+ sa.PrimaryKeyConstraint("session_id", "user_id", "rank"),
63
+ )
64
+ op.create_index(
65
+ "ix_session_history_timestamp",
66
+ "session_history",
67
+ ["timestamp"],
68
+ unique=False,
69
+ )
70
+
71
+
72
+ def downgrade() -> None:
73
+ """Downgrade schema."""
74
+ op.drop_index("ix_session_history_timestamp", table_name="session_history")
75
+ op.drop_table("session_history")
@@ -0,0 +1,49 @@
1
+ # Copyright Thales 2026
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ """add exchange_id to session_history
16
+
17
+ Per-turn UUID used to join KPI and history records for a single agent turn.
18
+
19
+ Revision ID: b2f3a4e5c6d7
20
+ Revises: a1e2f3c4d5b6
21
+ Create Date: 2026-06-02 00:01:00.000000
22
+
23
+ """
24
+
25
+ from typing import Sequence, Union
26
+
27
+ import sqlalchemy as sa
28
+ from alembic import op
29
+
30
+ # revision identifiers, used by Alembic.
31
+ revision: str = "b2f3a4e5c6d7" # pragma: allowlist secret
32
+ down_revision: Union[str, Sequence[str], None] = (
33
+ "a1e2f3c4d5b6" # pragma: allowlist secret
34
+ )
35
+ branch_labels: Union[str, Sequence[str], None] = None
36
+ depends_on: Union[str, Sequence[str], None] = None
37
+
38
+
39
+ def upgrade() -> None:
40
+ """Upgrade schema."""
41
+ op.add_column(
42
+ "session_history",
43
+ sa.Column("exchange_id", sa.String(), nullable=True),
44
+ )
45
+
46
+
47
+ def downgrade() -> None:
48
+ """Downgrade schema."""
49
+ op.drop_column("session_history", "exchange_id")
@@ -0,0 +1,70 @@
1
+ # Copyright Thales 2026
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ """add team_id and agent_instance_id to session_history
16
+
17
+ Team-scoped and managed-execution identity columns added for admin and
18
+ retention queries. These are nullable for backward compatibility with rows
19
+ written before this revision.
20
+
21
+ Revision ID: c3d4b5a6f7e8
22
+ Revises: b2f3a4e5c6d7
23
+ Create Date: 2026-06-02 00:02:00.000000
24
+
25
+ """
26
+
27
+ from typing import Sequence, Union
28
+
29
+ import sqlalchemy as sa
30
+ from alembic import op
31
+
32
+ # revision identifiers, used by Alembic.
33
+ revision: str = "c3d4b5a6f7e8" # pragma: allowlist secret
34
+ down_revision: Union[str, Sequence[str], None] = (
35
+ "b2f3a4e5c6d7" # pragma: allowlist secret
36
+ )
37
+ branch_labels: Union[str, Sequence[str], None] = None
38
+ depends_on: Union[str, Sequence[str], None] = None
39
+
40
+
41
+ def upgrade() -> None:
42
+ """Upgrade schema."""
43
+ op.add_column(
44
+ "session_history",
45
+ sa.Column("team_id", sa.String(), nullable=True),
46
+ )
47
+ op.add_column(
48
+ "session_history",
49
+ sa.Column("agent_instance_id", sa.String(), nullable=True),
50
+ )
51
+ op.create_index(
52
+ "ix_session_history_team_id",
53
+ "session_history",
54
+ ["team_id"],
55
+ unique=False,
56
+ )
57
+ op.create_index(
58
+ "ix_session_history_agent_instance_id",
59
+ "session_history",
60
+ ["agent_instance_id"],
61
+ unique=False,
62
+ )
63
+
64
+
65
+ def downgrade() -> None:
66
+ """Downgrade schema."""
67
+ op.drop_index("ix_session_history_agent_instance_id", table_name="session_history")
68
+ op.drop_index("ix_session_history_team_id", table_name="session_history")
69
+ op.drop_column("session_history", "agent_instance_id")
70
+ op.drop_column("session_history", "team_id")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fred-runtime
3
- Version: 3.5.0
3
+ Version: 3.5.1
4
4
  Summary: Runtime adapters and infrastructure wiring for Fred v2 agents.
5
5
  Author-email: Thales <noreply@thalesgroup.com>
6
6
  License: Apache-2.0
@@ -3,7 +3,6 @@ pyproject.toml
3
3
  fred_runtime/__init__.py
4
4
  fred_runtime/__main__.py
5
5
  fred_runtime/client.py
6
- fred_runtime/migrations.py
7
6
  fred_runtime/runtime_context.py
8
7
  fred_runtime.egg-info/PKG-INFO
9
8
  fred_runtime.egg-info/SOURCES.txt
@@ -85,6 +84,13 @@ fred_runtime/integrations/kf_vector_search/__init__.py
85
84
  fred_runtime/integrations/kf_vector_search/toolkit.py
86
85
  fred_runtime/integrations/v2_runtime/__init__.py
87
86
  fred_runtime/integrations/v2_runtime/adapters.py
87
+ fred_runtime/migrations/__init__.py
88
+ fred_runtime/migrations/env.py
89
+ fred_runtime/migrations/script.py.mako
90
+ fred_runtime/migrations/versions/__init__.py
91
+ fred_runtime/migrations/versions/a1e2f3c4d5b6_create_session_history.py
92
+ fred_runtime/migrations/versions/b2f3a4e5c6d7_add_exchange_id.py
93
+ fred_runtime/migrations/versions/c3d4b5a6f7e8_add_team_and_instance.py
88
94
  fred_runtime/model_routing/__init__.py
89
95
  fred_runtime/model_routing/authz.py
90
96
  fred_runtime/model_routing/catalog.py
@@ -167,6 +173,7 @@ tests/test_kpi_display.py
167
173
  tests/test_langfuse_tracing.py
168
174
  tests/test_langgraph_interrupt_id_semantics.py
169
175
  tests/test_mcp_config.py
176
+ tests/test_migrations.py
170
177
  tests/test_model_enforcement.py
171
178
  tests/test_model_metadata_cache_tokens.py
172
179
  tests/test_model_reasoning_enablement.py
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "fred-runtime"
3
- version = "3.5.0"
3
+ version = "3.5.1"
4
4
  description = "Runtime adapters and infrastructure wiring for Fred v2 agents."
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12,<3.13"
@@ -91,6 +91,9 @@ build-backend = "setuptools.build_meta"
91
91
  [tool.setuptools.packages.find]
92
92
  include = ["fred_runtime*"]
93
93
 
94
+ [tool.setuptools.package-data]
95
+ fred_runtime = ["migrations/*.mako"]
96
+
94
97
  [tool.pytest.ini_options]
95
98
  minversion = "8.0"
96
99
  addopts = "-ra"
@@ -128,4 +131,4 @@ dev = [
128
131
  ]
129
132
 
130
133
  [tool.alembic]
131
- script_location = "%(here)s/alembic"
134
+ script_location = "%(here)s/fred_runtime/migrations"
@@ -0,0 +1,80 @@
1
+ # Copyright Thales 2026
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ from __future__ import annotations
16
+
17
+ import sqlite3
18
+ from pathlib import Path
19
+
20
+ import fred_runtime
21
+ from alembic.config import Config
22
+ from alembic.script import ScriptDirectory
23
+ from fred_runtime.migrations import RUNTIME_ALEMBIC_DIR, upgrade_sqlite_database
24
+
25
+
26
+ def test_runtime_migration_tree_is_packaged_and_linear() -> None:
27
+ """Verify discovery uses the package tree and preserves its revision chain."""
28
+ package_dir = Path(fred_runtime.__file__).resolve().parent
29
+ project_dir = Path(__file__).resolve().parents[1]
30
+ assert RUNTIME_ALEMBIC_DIR == package_dir / "migrations"
31
+ assert RUNTIME_ALEMBIC_DIR.is_dir()
32
+ assert (RUNTIME_ALEMBIC_DIR / "env.py").is_file()
33
+ assert (RUNTIME_ALEMBIC_DIR / "script.py.mako").is_file()
34
+ assert {path.name for path in (RUNTIME_ALEMBIC_DIR / "versions").glob("*.py")} == {
35
+ "__init__.py",
36
+ "a1e2f3c4d5b6_create_session_history.py", # pragma: allowlist secret
37
+ "b2f3a4e5c6d7_add_exchange_id.py", # pragma: allowlist secret
38
+ "c3d4b5a6f7e8_add_team_and_instance.py", # pragma: allowlist secret
39
+ }
40
+
41
+ config = Config()
42
+ config.set_main_option("script_location", str(RUNTIME_ALEMBIC_DIR))
43
+ revisions = list(ScriptDirectory.from_config(config).walk_revisions(base="base"))
44
+
45
+ assert [(revision.revision, revision.down_revision) for revision in revisions] == [
46
+ ("c3d4b5a6f7e8", "b2f3a4e5c6d7"), # pragma: allowlist secret
47
+ ("b2f3a4e5c6d7", "a1e2f3c4d5b6"), # pragma: allowlist secret
48
+ ("a1e2f3c4d5b6", None), # pragma: allowlist secret
49
+ ]
50
+ assert not (project_dir / "alembic").exists()
51
+
52
+
53
+ def test_upgrade_sqlite_database_applies_packaged_migrations(tmp_path: Path) -> None:
54
+ """Run the packaged tree against SQLite and verify its schema reaches head."""
55
+ database_path = tmp_path / "runtime.db"
56
+
57
+ upgrade_sqlite_database(database_path)
58
+
59
+ with sqlite3.connect(database_path) as connection:
60
+ columns = {
61
+ row[1] for row in connection.execute("PRAGMA table_info(session_history)")
62
+ }
63
+ revision = connection.execute(
64
+ "SELECT version_num FROM alembic_version_runtime"
65
+ ).fetchone()
66
+
67
+ assert columns == {
68
+ "session_id",
69
+ "user_id",
70
+ "rank",
71
+ "timestamp",
72
+ "role",
73
+ "channel",
74
+ "parts_json",
75
+ "metadata_json",
76
+ "exchange_id",
77
+ "team_id",
78
+ "agent_instance_id",
79
+ }
80
+ assert revision == ("c3d4b5a6f7e8",) # pragma: allowlist secret
File without changes