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.
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/PKG-INFO +1 -1
- fred_runtime-3.5.0/fred_runtime/migrations.py → fred_runtime-3.5.1/fred_runtime/migrations/__init__.py +5 -5
- fred_runtime-3.5.1/fred_runtime/migrations/env.py +50 -0
- fred_runtime-3.5.1/fred_runtime/migrations/script.py.mako +32 -0
- fred_runtime-3.5.1/fred_runtime/migrations/versions/__init__.py +1 -0
- fred_runtime-3.5.1/fred_runtime/migrations/versions/a1e2f3c4d5b6_create_session_history.py +75 -0
- fred_runtime-3.5.1/fred_runtime/migrations/versions/b2f3a4e5c6d7_add_exchange_id.py +49 -0
- fred_runtime-3.5.1/fred_runtime/migrations/versions/c3d4b5a6f7e8_add_team_and_instance.py +70 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime.egg-info/PKG-INFO +1 -1
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime.egg-info/SOURCES.txt +8 -1
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/pyproject.toml +5 -2
- fred_runtime-3.5.1/tests/test_migrations.py +80 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/README.md +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/__init__.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/__main__.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/app/__init__.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/app/_catalogs.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/app/agent_app.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/app/chat_input_limit.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/app/config.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/app/config_loader.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/app/container.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/app/context.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/app/dependencies.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/app/mcp_config.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/app/observability_factory.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/app/openai_compat_router.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/capabilities/__init__.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/capabilities/assembly.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/capabilities/assets.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/capabilities/demo.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/capabilities/demo_migrations/env.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/capabilities/demo_migrations/versions/d1e2m0a0b0c0_create_demo_echo_notes.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/capabilities/document_access/__init__.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/capabilities/document_access/capability.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/capabilities/document_extract/__init__.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/capabilities/document_extract/capability.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/capabilities/document_label_search/__init__.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/capabilities/document_label_search/capability.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/capabilities/document_read_common.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/capabilities/document_similarity/__init__.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/capabilities/document_similarity/capability.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/capabilities/document_summarize/__init__.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/capabilities/document_summarize/capability.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/capabilities/document_verbatim/__init__.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/capabilities/document_verbatim/capability.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/capabilities/errors.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/capabilities/mcp.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/capabilities/openapi_dump.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/capabilities/registry.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/cli/__init__.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/cli/completion.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/cli/entrypoint.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/cli/history_display.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/cli/kpi_display.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/cli/pod_client.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/cli/repl.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/cli/repl_helpers.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/cli/url_helpers.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/client.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/common/__init__.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/common/context_aware_tool.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/common/kf_base_client.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/common/kf_document_client.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/common/kf_fast_text_client.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/common/kf_http_client.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/common/kf_markdown_media_client.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/common/kf_tag_client.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/common/kf_vectorsearch_client.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/common/kf_workspace_client.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/common/mcp_interceptors.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/common/mcp_runtime.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/common/mcp_toolkit.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/common/mcp_utils.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/common/structures.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/common/table_hits.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/common/token_expiry.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/common/tool_node_utils.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/deep/__init__.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/deep/deep_runtime.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/eval/__init__.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/eval/collector.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/graph/__init__.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/graph/graph_runtime.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/integrations/__init__.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/integrations/inprocess_toolkit_registry.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/integrations/kf_vector_search/__init__.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/integrations/kf_vector_search/toolkit.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/integrations/v2_runtime/__init__.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/integrations/v2_runtime/adapters.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/model_routing/__init__.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/model_routing/authz.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/model_routing/catalog.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/model_routing/contracts.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/model_routing/provider.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/model_routing/resolver.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/react/__init__.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/react/middleware/__init__.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/react/middleware/checkpoint_hygiene.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/react/middleware/dynamic_prompt.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/react/middleware/frame.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/react/middleware/hitl.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/react/middleware/shared.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/react/middleware/tool_observability.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/react/middleware/tracing_kpi.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/react/react_langchain_adapter.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/react/react_message_codec.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/react/react_model_adapter.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/react/react_prompting.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/react/react_runtime.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/react/react_stream_adapter.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/react/react_tool_binding.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/react/react_tool_loop.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/react/react_tool_rendering.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/react/react_tool_resolution.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/react/react_tool_utils.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/react/react_tracing.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/runtime_context.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/runtime_support/__init__.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/runtime_support/checkpoints.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/runtime_support/model_metadata.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/runtime_support/request_context_helpers.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/runtime_support/sql_checkpointer.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/runtime_support/trace_payloads.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/runtime_support/user_token_refresher.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/support/__init__.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/support/filesystem_context.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/support/thinking.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/support/tool_loop.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime.egg-info/dependency_links.txt +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime.egg-info/entry_points.txt +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime.egg-info/requires.txt +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime.egg-info/top_level.txt +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/setup.cfg +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_agent_app.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_capability_agent_1973.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_capability_chat_controls_1976.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_capability_chat_parts_1977.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_capability_document_access_1906.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_capability_document_label_search.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_capability_document_reading.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_capability_document_similarity.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_capability_document_summarize.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_capability_endpoints_1974.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_capability_registry_1973.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_capability_routes_tables_1979.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_capability_selection_1974.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_capability_tool_return_convention.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_chat_input_limit.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_checkpoint_namespace.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_client.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_config_loader.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_context.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_context_aware_tool.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_conversational_memory.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_deep_agent_middleware.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_document_port_error_redaction.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_document_similarity_adapter.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_eval_collector.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_eval_trace.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_fred_workspace_fs.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_graph_capability_bridge.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_graph_checkpoint_namespace.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_graph_runtime_invoke_agent.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_graph_runtime_observability.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_graph_runtime_token_usage_totals.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_history.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_history_display.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_hitl_resume_langgraph_integration.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_kf_base_client_refresh_shapes.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_kf_vector_search_toolkit.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_kf_workspace_client.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_knowledge_search_table_ordering.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_knowledge_search_tool_invoker_sources.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_kpi_display.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_langfuse_tracing.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_langgraph_interrupt_id_semantics.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_mcp_config.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_model_enforcement.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_model_metadata_cache_tokens.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_model_reasoning_enablement.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_model_routing.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_model_routing_provider.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_models_catalog_projection.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_openai_compat_router.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_pod_client.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_react_checkpoint_namespace.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_react_loop_regressions_1972.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_react_message_codec_resume.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_react_middleware_frame.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_react_prompting.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_react_thinking.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_react_token_usage_totals.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_react_tool_error_final_2244.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_repl_helpers.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_runtime_context_prompt_injection.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_smoke.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_spike_capability_state_1971.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_sql_checkpointer_hitl_claim.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_sql_checkpointer_owner.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_table_repair_wiring.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_token_expiry.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_tool_carrier_middleware_naming.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_tool_loop_trim.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_tool_observability_middleware.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_trace_payloads.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_tracing_kpi_content_confinement.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_url_helpers.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_user_token_refresher.py +0 -0
- {fred_runtime-3.5.0 → fred_runtime-3.5.1}/tests/test_vector_similarity_search_retry.py +0 -0
|
@@ -38,13 +38,13 @@ import logging
|
|
|
38
38
|
import os
|
|
39
39
|
from pathlib import Path
|
|
40
40
|
|
|
41
|
-
from
|
|
41
|
+
from ..capabilities import CapabilityRegistry
|
|
42
42
|
|
|
43
43
|
logger = logging.getLogger(__name__)
|
|
44
44
|
|
|
45
|
-
#
|
|
46
|
-
#
|
|
47
|
-
RUNTIME_ALEMBIC_DIR = Path(__file__).resolve().parent
|
|
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`:
|
|
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")
|
|
@@ -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.
|
|
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/
|
|
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
|
|
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
|
{fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/capabilities/document_access/__init__.py
RENAMED
|
File without changes
|
{fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/capabilities/document_access/capability.py
RENAMED
|
File without changes
|
{fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/capabilities/document_extract/__init__.py
RENAMED
|
File without changes
|
{fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/capabilities/document_extract/capability.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/capabilities/document_similarity/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/capabilities/document_summarize/__init__.py
RENAMED
|
File without changes
|
{fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/capabilities/document_summarize/capability.py
RENAMED
|
File without changes
|
{fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/capabilities/document_verbatim/__init__.py
RENAMED
|
File without changes
|
{fred_runtime-3.5.0 → fred_runtime-3.5.1}/fred_runtime/capabilities/document_verbatim/capability.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
|
|
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
|