flare-kernel 0.2.3__tar.gz → 0.2.5__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.
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/PKG-INFO +3 -2
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/README.md +2 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/pyproject.toml +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/src/flare_kernel/app.py +3 -2
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/src/flare_kernel/contracts/__init__.py +4 -0
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/src/flare_kernel/contracts/context.py +30 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/src/flare_kernel/contracts/kernel_contract.py +19 -3
- flare_kernel-0.2.5/src/flare_kernel/contracts/project_contract.py +49 -0
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/src/flare_kernel/contracts/session_contract.py +10 -0
- flare_kernel-0.2.5/src/flare_kernel/project_store.py +249 -0
- flare_kernel-0.2.5/src/flare_kernel/router/__init__.py +17 -0
- flare_kernel-0.2.5/src/flare_kernel/router/api/__init__.py +0 -0
- flare_kernel-0.2.5/src/flare_kernel/router/api/chat.py +29 -0
- flare_kernel-0.2.3/src/flare_kernel/router/project_api.py → flare_kernel-0.2.5/src/flare_kernel/router/api/project.py +16 -0
- flare_kernel-0.2.3/src/flare_kernel/router/session_api.py → flare_kernel-0.2.5/src/flare_kernel/router/api/session.py +7 -1
- flare_kernel-0.2.3/src/flare_kernel/router/canonical/canonical_state_context.py → flare_kernel-0.2.5/src/flare_kernel/router/canonical/context/__init__.py +3 -3
- flare_kernel-0.2.3/src/flare_kernel/router/canonical/canonical_state_context_analysis.py → flare_kernel-0.2.5/src/flare_kernel/router/canonical/context/analysis.py +2 -2
- flare_kernel-0.2.3/src/flare_kernel/router/canonical/canonical_state_context_inputs.py → flare_kernel-0.2.5/src/flare_kernel/router/canonical/context/inputs.py +1 -1
- flare_kernel-0.2.3/src/flare_kernel/router/canonical/canonical_state_context_session.py → flare_kernel-0.2.5/src/flare_kernel/router/canonical/context/session.py +1 -1
- flare_kernel-0.2.5/src/flare_kernel/router/canonical/contract_support.py +102 -0
- flare_kernel-0.2.3/src/flare_kernel/router/canonical/canonical_state_flow.py → flare_kernel-0.2.5/src/flare_kernel/router/canonical/flow.py +4 -4
- flare_kernel-0.2.3/src/flare_kernel/router/canonical/canonical_state_payload.py → flare_kernel-0.2.5/src/flare_kernel/router/canonical/payload.py +153 -24
- flare_kernel-0.2.3/src/flare_kernel/router/canonical/canonical_state_projection.py → flare_kernel-0.2.5/src/flare_kernel/router/canonical/projection.py +2 -2
- flare_kernel-0.2.5/src/flare_kernel/router/completion/__init__.py +0 -0
- flare_kernel-0.2.5/src/flare_kernel/router/completion/guided.py +249 -0
- flare_kernel-0.2.3/src/flare_kernel/router/completion_response_builder.py → flare_kernel-0.2.5/src/flare_kernel/router/completion/response_builder.py +123 -2
- flare_kernel-0.2.3/src/flare_kernel/router/completion_selection.py → flare_kernel-0.2.5/src/flare_kernel/router/completion/selection.py +13 -7
- flare_kernel-0.2.5/src/flare_kernel/router/context/__init__.py +0 -0
- flare_kernel-0.2.5/src/flare_kernel/router/context/sourcing_preview.py +77 -0
- flare_kernel-0.2.5/src/flare_kernel/router/intake/__init__.py +54 -0
- flare_kernel-0.2.3/src/flare_kernel/router/intake/intake_amount_quantity.py → flare_kernel-0.2.5/src/flare_kernel/router/intake/amount_quantity.py +1 -1
- flare_kernel-0.2.5/src/flare_kernel/router/intake/authority/__init__.py +19 -0
- flare_kernel-0.2.3/src/flare_kernel/router/intake/intake_authority.py → flare_kernel-0.2.5/src/flare_kernel/router/intake/authority/core.py +8 -4
- flare_kernel-0.2.3/src/flare_kernel/router/intake/intake_authority_hydration.py → flare_kernel-0.2.5/src/flare_kernel/router/intake/authority/hydration.py +16 -1
- flare_kernel-0.2.3/src/flare_kernel/router/intake/intake_canonicalization.py → flare_kernel-0.2.5/src/flare_kernel/router/intake/canonicalization.py +4 -4
- flare_kernel-0.2.3/src/flare_kernel/router/intake/intake_clarification.py → flare_kernel-0.2.5/src/flare_kernel/router/intake/clarification.py +1 -1
- flare_kernel-0.2.3/src/flare_kernel/router/intake/intake_decision_rules.py → flare_kernel-0.2.5/src/flare_kernel/router/intake/decision_rules.py +0 -56
- flare_kernel-0.2.3/src/flare_kernel/router/intake/intake_deployment_delivery.py → flare_kernel-0.2.5/src/flare_kernel/router/intake/deployment_delivery.py +1 -1
- flare_kernel-0.2.5/src/flare_kernel/router/intake/extraction/__init__.py +31 -0
- flare_kernel-0.2.3/src/flare_kernel/router/intake/intake_extraction.py → flare_kernel-0.2.5/src/flare_kernel/router/intake/extraction/core.py +2 -2
- flare_kernel-0.2.3/src/flare_kernel/router/intake/intake_extraction_extractors.py → flare_kernel-0.2.5/src/flare_kernel/router/intake/extraction/extractors.py +1 -1
- flare_kernel-0.2.5/src/flare_kernel/router/intake/field_projection/__init__.py +21 -0
- flare_kernel-0.2.3/src/flare_kernel/router/intake/intake_field_projection.py → flare_kernel-0.2.5/src/flare_kernel/router/intake/field_projection/core.py +3 -3
- flare_kernel-0.2.3/src/flare_kernel/router/intake/intake_field_projection_entity.py → flare_kernel-0.2.5/src/flare_kernel/router/intake/field_projection/entity.py +3 -3
- flare_kernel-0.2.3/src/flare_kernel/router/intake/intake_field_projection_payload.py → flare_kernel-0.2.5/src/flare_kernel/router/intake/field_projection/payload.py +2 -2
- flare_kernel-0.2.5/src/flare_kernel/router/intake/guided/__init__.py +27 -0
- flare_kernel-0.2.3/src/flare_kernel/router/intake/intake_guided_followup.py → flare_kernel-0.2.5/src/flare_kernel/router/intake/guided/followup.py +1 -1
- flare_kernel-0.2.3/src/flare_kernel/router/intake/intake_guided_status.py → flare_kernel-0.2.5/src/flare_kernel/router/intake/guided/status.py +1 -1
- flare_kernel-0.2.5/src/flare_kernel/router/intake/status/__init__.py +43 -0
- flare_kernel-0.2.3/src/flare_kernel/router/intake/intake_status.py → flare_kernel-0.2.5/src/flare_kernel/router/intake/status/core.py +3 -3
- flare_kernel-0.2.5/src/flare_kernel/router/intake/status/guided_session.py +20 -0
- flare_kernel-0.2.3/src/flare_kernel/router/intake/intake_status_projection.py → flare_kernel-0.2.5/src/flare_kernel/router/intake/status/projection.py +1 -1
- flare_kernel-0.2.5/src/flare_kernel/router/intent/__init__.py +23 -0
- flare_kernel-0.2.3/src/flare_kernel/router/intent/intent_classifier_utils.py → flare_kernel-0.2.5/src/flare_kernel/router/intent/classifier_utils.py +5 -5
- flare_kernel-0.2.5/src/flare_kernel/router/intent/escalation/__init__.py +1 -0
- flare_kernel-0.2.3/src/flare_kernel/router/intent/intent_escalation_pipeline.py → flare_kernel-0.2.5/src/flare_kernel/router/intent/escalation/pipeline.py +2 -2
- flare_kernel-0.2.3/src/flare_kernel/router/intent/intent_routing.py → flare_kernel-0.2.5/src/flare_kernel/router/intent/routing.py +20 -1
- flare_kernel-0.2.5/src/flare_kernel/router/intent/session_intent/__init__.py +23 -0
- flare_kernel-0.2.3/src/flare_kernel/router/intent/session_intent.py → flare_kernel-0.2.5/src/flare_kernel/router/intent/session_intent/core.py +2 -2
- flare_kernel-0.2.3/src/flare_kernel/router/intent/session_intent_fields.py → flare_kernel-0.2.5/src/flare_kernel/router/intent/session_intent/fields.py +9 -0
- flare_kernel-0.2.5/src/flare_kernel/router/kernel.py +303 -0
- flare_kernel-0.2.3/src/flare_kernel/router/kernel_constants.py → flare_kernel-0.2.5/src/flare_kernel/router/kernel_constants/__init__.py +3 -3
- flare_kernel-0.2.3/src/flare_kernel/router/kernel_constants_intent.py → flare_kernel-0.2.5/src/flare_kernel/router/kernel_constants/intent.py +1 -1
- flare_kernel-0.2.3/src/flare_kernel/router/kernel_constants_patch.py → flare_kernel-0.2.5/src/flare_kernel/router/kernel_constants/patch.py +4 -0
- flare_kernel-0.2.3/src/flare_kernel/router/kernel_endpoint_handlers.py → flare_kernel-0.2.5/src/flare_kernel/router/kernel_endpoint_handlers/__init__.py +5 -3
- flare_kernel-0.2.3/src/flare_kernel/router/kernel_endpoint_handlers_sourcing.py → flare_kernel-0.2.5/src/flare_kernel/router/kernel_endpoint_handlers/sourcing.py +9 -0
- flare_kernel-0.2.3/src/flare_kernel/router/kernel_endpoint_handlers_turn.py → flare_kernel-0.2.5/src/flare_kernel/router/kernel_endpoint_handlers/turn.py +11 -2
- flare_kernel-0.2.5/src/flare_kernel/router/kernel_facade/__init__.py +0 -0
- flare_kernel-0.2.3/src/flare_kernel/router/kernel_facade_canonical_wrapper.py → flare_kernel-0.2.5/src/flare_kernel/router/kernel_facade/canonical_state.py +95 -36
- flare_kernel-0.2.3/src/flare_kernel/router/kernel_facade_dependency_resolution.py → flare_kernel-0.2.5/src/flare_kernel/router/kernel_facade/dependency_resolution.py +3 -0
- flare_kernel-0.2.3/src/flare_kernel/router/kernel_facade_turn_context.py → flare_kernel-0.2.5/src/flare_kernel/router/kernel_facade/flow.py +51 -7
- flare_kernel-0.2.3/src/flare_kernel/router/kernel_facade_orchestration_wrappers.py → flare_kernel-0.2.5/src/flare_kernel/router/kernel_facade/orchestration.py +123 -23
- flare_kernel-0.2.3/src/flare_kernel/router/kernel_facade_payload_wrapper.py → flare_kernel-0.2.5/src/flare_kernel/router/kernel_facade/payload_enrichment.py +80 -19
- flare_kernel-0.2.3/src/flare_kernel/router/kernel_facade_turn_context_wrapper.py → flare_kernel-0.2.5/src/flare_kernel/router/kernel_facade/turn_context.py +48 -46
- flare_kernel-0.2.5/src/flare_kernel/router/kernel_flow_bindings/__init__.py +0 -0
- flare_kernel-0.2.3/src/flare_kernel/router/kernel_intent_query_flow.py → flare_kernel-0.2.5/src/flare_kernel/router/kernel_flow_bindings/intent_query.py +1 -1
- flare_kernel-0.2.3/src/flare_kernel/router/kernel_mode_flow.py → flare_kernel-0.2.5/src/flare_kernel/router/kernel_flow_bindings/mode.py +1 -1
- flare_kernel-0.2.3/src/flare_kernel/router/kernel_session_intent_flow.py → flare_kernel-0.2.5/src/flare_kernel/router/kernel_flow_bindings/session_intent.py +1 -1
- flare_kernel-0.2.5/src/flare_kernel/router/kernel_request_pipeline/__init__.py +0 -0
- flare_kernel-0.2.3/src/flare_kernel/router/kernel_request_flow_action.py → flare_kernel-0.2.5/src/flare_kernel/router/kernel_request_pipeline/action.py +21 -6
- flare_kernel-0.2.3/src/flare_kernel/router/kernel_request_flow_intake.py → flare_kernel-0.2.5/src/flare_kernel/router/kernel_request_pipeline/intake.py +10 -10
- flare_kernel-0.2.3/src/flare_kernel/router/kernel_request_flow_intent_query.py → flare_kernel-0.2.5/src/flare_kernel/router/kernel_request_pipeline/intent_query.py +14 -12
- flare_kernel-0.2.3/src/flare_kernel/router/kernel_request_flow_intent_signal.py → flare_kernel-0.2.5/src/flare_kernel/router/kernel_request_pipeline/intent_signal.py +4 -4
- flare_kernel-0.2.5/src/flare_kernel/router/kernel_route/__init__.py +0 -0
- flare_kernel-0.2.3/src/flare_kernel/router/kernel_route_action.py → flare_kernel-0.2.5/src/flare_kernel/router/kernel_route/action.py +2 -2
- flare_kernel-0.2.3/src/flare_kernel/router/kernel_route_execution.py → flare_kernel-0.2.5/src/flare_kernel/router/kernel_route/execution.py +3 -3
- flare_kernel-0.2.3/src/flare_kernel/router/kernel_route_run.py → flare_kernel-0.2.5/src/flare_kernel/router/kernel_route/run.py +4 -4
- flare_kernel-0.2.3/src/flare_kernel/router/kernel_route_stream.py → flare_kernel-0.2.5/src/flare_kernel/router/kernel_route/stream.py +4 -4
- flare_kernel-0.2.5/src/flare_kernel/router/mode/__init__.py +0 -0
- flare_kernel-0.2.3/src/flare_kernel/router/mode_resolution.py → flare_kernel-0.2.5/src/flare_kernel/router/mode/resolution.py +5 -1
- flare_kernel-0.2.5/src/flare_kernel/router/orchestration/__init__.py +38 -0
- flare_kernel-0.2.5/src/flare_kernel/router/orchestration/status/__init__.py +2 -0
- flare_kernel-0.2.5/src/flare_kernel/router/orchestration/status/actions.py +89 -0
- flare_kernel-0.2.3/src/flare_kernel/router/orchestration/orchestration_status_builder.py → flare_kernel-0.2.5/src/flare_kernel/router/orchestration/status/builder.py +3 -3
- flare_kernel-0.2.3/src/flare_kernel/router/orchestration/orchestration_checkpoint_state.py → flare_kernel-0.2.5/src/flare_kernel/router/orchestration/status/checkpoint_state.py +2 -2
- flare_kernel-0.2.3/src/flare_kernel/router/orchestration/orchestration_status_context.py → flare_kernel-0.2.5/src/flare_kernel/router/orchestration/status/context.py +6 -6
- flare_kernel-0.2.3/src/flare_kernel/router/orchestration/orchestration_status_state.py → flare_kernel-0.2.5/src/flare_kernel/router/orchestration/status/core.py +7 -7
- flare_kernel-0.2.3/src/flare_kernel/router/orchestration/orchestration_status_decision.py → flare_kernel-0.2.5/src/flare_kernel/router/orchestration/status/decision.py +2 -2
- flare_kernel-0.2.3/src/flare_kernel/router/orchestration/orchestration_followup_state.py → flare_kernel-0.2.5/src/flare_kernel/router/orchestration/status/followup_state.py +1 -1
- flare_kernel-0.2.3/src/flare_kernel/router/orchestration/orchestration_status_runtime_state.py → flare_kernel-0.2.5/src/flare_kernel/router/orchestration/status/runtime_state.py +2 -2
- flare_kernel-0.2.5/src/flare_kernel/router/orchestration/status/state/__init__.py +2 -0
- flare_kernel-0.2.3/src/flare_kernel/router/orchestration/orchestration_status_state_flow.py → flare_kernel-0.2.5/src/flare_kernel/router/orchestration/status/state/flow.py +20 -8
- flare_kernel-0.2.5/src/flare_kernel/router/orchestration/trace/__init__.py +1 -0
- flare_kernel-0.2.3/src/flare_kernel/router/orchestration/orchestration_trace.py → flare_kernel-0.2.5/src/flare_kernel/router/orchestration/trace/core.py +2 -2
- flare_kernel-0.2.3/src/flare_kernel/router/orchestration/orchestration_trace_steps.py → flare_kernel-0.2.5/src/flare_kernel/router/orchestration/trace/steps.py +5 -0
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/src/flare_kernel/router/patch_contract.py +3 -1
- flare_kernel-0.2.5/src/flare_kernel/router/payload/__init__.py +0 -0
- flare_kernel-0.2.3/src/flare_kernel/router/action_payload.py → flare_kernel-0.2.5/src/flare_kernel/router/payload/action.py +0 -14
- flare_kernel-0.2.5/src/flare_kernel/router/payload/analysis_canvas.py +74 -0
- flare_kernel-0.2.3/src/flare_kernel/router/payload_enrichment.py → flare_kernel-0.2.5/src/flare_kernel/router/payload/enrichment.py +4 -0
- flare_kernel-0.2.5/src/flare_kernel/router/prompting/__init__.py +5 -0
- flare_kernel-0.2.5/src/flare_kernel/router/prompting/context_blocks.py +129 -0
- flare_kernel-0.2.5/src/flare_kernel/router/prompting/core.py +240 -0
- flare_kernel-0.2.5/src/flare_kernel/router/prompting/response_strategy.py +35 -0
- flare_kernel-0.2.5/src/flare_kernel/router/request/__init__.py +0 -0
- flare_kernel-0.2.3/src/flare_kernel/router/request_intent_resolution.py → flare_kernel-0.2.5/src/flare_kernel/router/request/intent_resolution.py +2 -0
- flare_kernel-0.2.5/src/flare_kernel/router/retrieval/__init__.py +20 -0
- flare_kernel-0.2.3/src/flare_kernel/router/retrieval/retrieval_aliases.py → flare_kernel-0.2.5/src/flare_kernel/router/retrieval/aliases.py +54 -8
- flare_kernel-0.2.3/src/flare_kernel/router/retrieval/retrieval_projection.py → flare_kernel-0.2.5/src/flare_kernel/router/retrieval/projection.py +3 -0
- flare_kernel-0.2.3/src/flare_kernel/router/retrieval/retrieval_query_builder.py → flare_kernel-0.2.5/src/flare_kernel/router/retrieval/query_builder.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/src/flare_kernel/router/source_library.py +34 -1
- flare_kernel-0.2.5/src/flare_kernel/router/streaming/draft/__init__.py +0 -0
- flare_kernel-0.2.3/src/flare_kernel/router/streaming/streaming_draft_completion.py → flare_kernel-0.2.5/src/flare_kernel/router/streaming/draft/completion.py +14 -1
- flare_kernel-0.2.3/src/flare_kernel/router/streaming/streaming_draft_finalize.py → flare_kernel-0.2.5/src/flare_kernel/router/streaming/draft/finalize.py +108 -5
- flare_kernel-0.2.3/src/flare_kernel/router/streaming/streaming_draft_phase.py → flare_kernel-0.2.5/src/flare_kernel/router/streaming/draft/phase.py +6 -6
- flare_kernel-0.2.3/src/flare_kernel/router/streaming/streaming_draft_phase_timing.py → flare_kernel-0.2.5/src/flare_kernel/router/streaming/draft/phase_timing.py +1 -1
- flare_kernel-0.2.3/src/flare_kernel/router/streaming/streaming_draft_post_completion.py → flare_kernel-0.2.5/src/flare_kernel/router/streaming/draft/post_completion.py +13 -15
- flare_kernel-0.2.3/src/flare_kernel/router/streaming/streaming_draft_prologue.py → flare_kernel-0.2.5/src/flare_kernel/router/streaming/draft/prologue.py +1 -1
- flare_kernel-0.2.5/src/flare_kernel/router/streaming/intake/__init__.py +0 -0
- flare_kernel-0.2.3/src/flare_kernel/router/streaming/streaming_intake_phase.py → flare_kernel-0.2.5/src/flare_kernel/router/streaming/intake/phase.py +9 -0
- flare_kernel-0.2.5/src/flare_kernel/router/streaming/mode/__init__.py +0 -0
- flare_kernel-0.2.3/src/flare_kernel/router/streaming/streaming_mode_event_payload.py → flare_kernel-0.2.5/src/flare_kernel/router/streaming/mode/event_payload.py +8 -1
- flare_kernel-0.2.3/src/flare_kernel/router/streaming/streaming_mode_events.py → flare_kernel-0.2.5/src/flare_kernel/router/streaming/mode/events.py +9 -6
- flare_kernel-0.2.5/src/flare_kernel/router/streaming/response/__init__.py +0 -0
- flare_kernel-0.2.3/src/flare_kernel/router/streaming/streaming_response_builder.py → flare_kernel-0.2.5/src/flare_kernel/router/streaming/response/builder.py +3 -3
- flare_kernel-0.2.3/src/flare_kernel/router/streaming/streaming_response_builder_transport.py → flare_kernel-0.2.5/src/flare_kernel/router/streaming/response/builder_transport.py +1 -1
- flare_kernel-0.2.5/src/flare_kernel/router/streaming/response/draft_phase.py +95 -0
- flare_kernel-0.2.3/src/flare_kernel/router/streaming/streaming_response_phases_mode_runtime.py → flare_kernel-0.2.5/src/flare_kernel/router/streaming/response/phase_groups.py +89 -87
- flare_kernel-0.2.3/src/flare_kernel/router/streaming/streaming_response_phases_post_intake.py → flare_kernel-0.2.5/src/flare_kernel/router/streaming/response/phases.py +19 -8
- flare_kernel-0.2.3/src/flare_kernel/router/streaming/streaming_response_runtime.py → flare_kernel-0.2.5/src/flare_kernel/router/streaming/response/runtime.py +4 -1
- flare_kernel-0.2.5/src/flare_kernel/router/streaming/retrieval/__init__.py +0 -0
- flare_kernel-0.2.5/src/flare_kernel/router/streaming/runtime/__init__.py +0 -0
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/src/flare_kernel/runtime/__init__.py +5 -39
- flare_kernel-0.2.5/src/flare_kernel/runtime/context/__init__.py +13 -0
- flare_kernel-0.2.5/src/flare_kernel/runtime/context/document_application.py +66 -0
- flare_kernel-0.2.5/src/flare_kernel/runtime/context/reasoning_application.py +98 -0
- flare_kernel-0.2.5/src/flare_kernel/runtime/context/session_context.py +189 -0
- flare_kernel-0.2.5/src/flare_kernel/runtime/context/track_application.py +44 -0
- flare_kernel-0.2.5/src/flare_kernel/runtime/infrastructure/__init__.py +26 -0
- flare_kernel-0.2.5/src/flare_kernel/runtime/infrastructure/chat_memory.py +129 -0
- flare_kernel-0.2.5/src/flare_kernel/runtime/infrastructure/database.py +26 -0
- flare_kernel-0.2.5/src/flare_kernel/runtime/infrastructure/dependency_status.py +70 -0
- flare_kernel-0.2.5/src/flare_kernel/runtime/infrastructure/infrastructure.py +114 -0
- flare_kernel-0.2.5/src/flare_kernel/runtime/infrastructure/knowledge_ingest.py +239 -0
- flare_kernel-0.2.5/src/flare_kernel/runtime/infrastructure/knowledge_memory.py +82 -0
- flare_kernel-0.2.5/src/flare_kernel/runtime/infrastructure/knowledge_postgres_search.py +251 -0
- flare_kernel-0.2.5/src/flare_kernel/runtime/infrastructure/knowledge_qdrant_search.py +126 -0
- flare_kernel-0.2.5/src/flare_kernel/runtime/infrastructure/knowledge_search.py +93 -0
- flare_kernel-0.2.5/src/flare_kernel/runtime/infrastructure/knowledge_terms.py +83 -0
- flare_kernel-0.2.5/src/flare_kernel/runtime/infrastructure/project_memory_sql.py +66 -0
- flare_kernel-0.2.5/src/flare_kernel/runtime/infrastructure/project_memory_store.py +256 -0
- flare_kernel-0.2.5/src/flare_kernel/runtime/infrastructure/redis_client.py +26 -0
- flare_kernel-0.2.5/src/flare_kernel/runtime/infrastructure/session/__init__.py +1 -0
- flare_kernel-0.2.5/src/flare_kernel/runtime/infrastructure/session/repository.py +23 -0
- flare_kernel-0.2.5/src/flare_kernel/runtime/infrastructure/session/repository_memory.py +64 -0
- flare_kernel-0.2.5/src/flare_kernel/runtime/infrastructure/source/__init__.py +1 -0
- flare_kernel-0.2.5/src/flare_kernel/runtime/infrastructure/sourcing/__init__.py +1 -0
- flare_kernel-0.2.3/src/flare_kernel/runtime/infrastructure/sourcing_provider.py → flare_kernel-0.2.5/src/flare_kernel/runtime/infrastructure/sourcing/provider.py +1 -89
- flare_kernel-0.2.5/src/flare_kernel/runtime/infrastructure/vector_store.py +65 -0
- flare_kernel-0.2.5/src/flare_kernel/runtime/orchestration/__init__.py +30 -0
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/src/flare_kernel/runtime/orchestration/analysis_router_runtime.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/src/flare_kernel/runtime/orchestration/decision_engine.py +0 -76
- flare_kernel-0.2.5/src/flare_kernel/runtime/orchestration/mode/__init__.py +1 -0
- flare_kernel-0.2.3/src/flare_kernel/runtime/orchestration/mode_orchestration.py → flare_kernel-0.2.5/src/flare_kernel/runtime/orchestration/mode/orchestration.py +98 -338
- flare_kernel-0.2.5/src/flare_kernel/runtime/orchestration/mode/plan/__init__.py +1 -0
- flare_kernel-0.2.5/src/flare_kernel/runtime/orchestration/mode/plan/canvas.py +321 -0
- flare_kernel-0.2.5/src/flare_kernel/runtime/orchestration/mode/plan/core.py +399 -0
- flare_kernel-0.2.5/src/flare_kernel/runtime/orchestration/mode/plan/followup.py +137 -0
- flare_kernel-0.2.5/src/flare_kernel/runtime/orchestration/mode/plan/payload.py +125 -0
- flare_kernel-0.2.5/src/flare_kernel/runtime/orchestration/mode/plan/question.py +164 -0
- flare_kernel-0.2.5/src/flare_kernel/runtime/orchestration/mode/plan/question_steps.py +247 -0
- flare_kernel-0.2.5/src/flare_kernel/runtime/orchestration/mode/plan/session.py +134 -0
- flare_kernel-0.2.3/src/flare_kernel/runtime/orchestration/mode_orchestration_plan_stage.py → flare_kernel-0.2.5/src/flare_kernel/runtime/orchestration/mode/plan/stage.py +0 -46
- flare_kernel-0.2.5/src/flare_kernel/runtime/orchestration/mode/plan/summary.py +77 -0
- flare_kernel-0.2.5/src/flare_kernel/runtime/orchestration/mode/plan/trace.py +175 -0
- flare_kernel-0.2.5/src/flare_kernel/runtime/orchestration/mode/reasoning.py +45 -0
- flare_kernel-0.2.3/src/flare_kernel/runtime/orchestration/mode_runtime.py → flare_kernel-0.2.5/src/flare_kernel/runtime/orchestration/mode/runtime.py +42 -1
- flare_kernel-0.2.5/src/flare_kernel/runtime/orchestration/mode_orchestration_plan_question.py +132 -0
- flare_kernel-0.2.5/src/flare_kernel/runtime/orchestration/mode_orchestration_plan_question_steps.py +98 -0
- flare_kernel-0.2.5/src/flare_kernel/runtime/orchestration/observation.py +117 -0
- flare_kernel-0.2.5/src/flare_kernel/runtime/orchestration/response_strategy_runtime.py +52 -0
- flare_kernel-0.2.5/src/flare_kernel/runtime/orchestration/session_context_runtime.py +21 -0
- flare_kernel-0.2.5/src/flare_kernel/runtime/orchestration/sourcing/__init__.py +1 -0
- flare_kernel-0.2.3/src/flare_kernel/runtime/orchestration/sourcing_search_runtime.py → flare_kernel-0.2.5/src/flare_kernel/runtime/orchestration/sourcing/search_runtime.py +66 -2
- flare_kernel-0.2.5/src/flare_kernel/runtime/orchestration/structured_reasoning.py +297 -0
- flare_kernel-0.2.5/src/flare_kernel/runtime/orchestration/track_runtime.py +64 -0
- flare_kernel-0.2.5/src/flare_kernel/runtime/reasoning/intake/__init__.py +38 -0
- flare_kernel-0.2.3/src/flare_kernel/runtime/reasoning/intake_reasoning.py → flare_kernel-0.2.5/src/flare_kernel/runtime/reasoning/intake/api.py +5 -5
- flare_kernel-0.2.5/src/flare_kernel/runtime/reasoning/intake/branching/__init__.py +1 -0
- flare_kernel-0.2.3/src/flare_kernel/runtime/reasoning/intake_reasoning_branching.py → flare_kernel-0.2.5/src/flare_kernel/runtime/reasoning/intake/branching/core.py +3 -8
- flare_kernel-0.2.5/src/flare_kernel/runtime/reasoning/intake/branching/policy.py +72 -0
- flare_kernel-0.2.3/src/flare_kernel/runtime/reasoning/intake_reasoning_context.py → flare_kernel-0.2.5/src/flare_kernel/runtime/reasoning/intake/context.py +20 -39
- flare_kernel-0.2.5/src/flare_kernel/runtime/reasoning/intake/field_selection.py +177 -0
- flare_kernel-0.2.5/src/flare_kernel/runtime/reasoning/intake/gap_detection.py +204 -0
- flare_kernel-0.2.3/src/flare_kernel/runtime/reasoning/intake_reasoning_hypothesis.py → flare_kernel-0.2.5/src/flare_kernel/runtime/reasoning/intake/hypothesis.py +1 -1
- flare_kernel-0.2.5/src/flare_kernel/runtime/reasoning/intake/planning.py +17 -0
- flare_kernel-0.2.3/src/flare_kernel/runtime/reasoning/intake_reasoning_priority.py → flare_kernel-0.2.5/src/flare_kernel/runtime/reasoning/intake/priority.py +1 -1
- flare_kernel-0.2.5/src/flare_kernel/runtime/reasoning/intake/question/__init__.py +1 -0
- flare_kernel-0.2.5/src/flare_kernel/runtime/reasoning/intake/question/builder.py +72 -0
- flare_kernel-0.2.3/src/flare_kernel/runtime/reasoning/intake_reasoning_question_extraction.py → flare_kernel-0.2.5/src/flare_kernel/runtime/reasoning/intake/question/extraction.py +1 -1
- flare_kernel-0.2.5/src/flare_kernel/runtime/reasoning/intake/question/planner.py +301 -0
- flare_kernel-0.2.5/src/flare_kernel/runtime/reasoning/intake/readiness/__init__.py +1 -0
- flare_kernel-0.2.5/src/flare_kernel/runtime/reasoning/intake/readiness/core.py +17 -0
- flare_kernel-0.2.5/src/flare_kernel/runtime/reasoning/intake/readiness/scoring.py +192 -0
- flare_kernel-0.2.5/src/flare_kernel/runtime/reasoning/intake/shared.py +104 -0
- flare_kernel-0.2.5/src/flare_kernel/runtime/reasoning/intake/understanding_state.py +197 -0
- flare_kernel-0.2.5/src/flare_kernel/runtime/reasoning/intake/visible_response.py +66 -0
- flare_kernel-0.2.5/src/flare_kernel/runtime/source_ingestion/__init__.py +7 -0
- flare_kernel-0.2.5/src/flare_kernel/runtime/source_ingestion/artifacts.py +53 -0
- flare_kernel-0.2.5/src/flare_kernel/runtime/source_ingestion/chunk_storage.py +175 -0
- flare_kernel-0.2.5/src/flare_kernel/runtime/source_ingestion/knowledge_storage.py +212 -0
- flare_kernel-0.2.5/src/flare_kernel/runtime/source_ingestion/runtime.py +135 -0
- flare_kernel-0.2.5/src/flare_kernel/runtime/source_ingestion/storage.py +17 -0
- flare_kernel-0.2.5/src/flare_kernel/session_record_policy.py +108 -0
- flare_kernel-0.2.5/src/flare_kernel/session_store.py +279 -0
- flare_kernel-0.2.5/src/flare_kernel/user_store.py +107 -0
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/src/flare_kernel.egg-info/PKG-INFO +3 -2
- flare_kernel-0.2.5/src/flare_kernel.egg-info/SOURCES.txt +471 -0
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_action_payload.py +3 -3
- flare_kernel-0.2.5/tests/test_analysis_canvas_payload.py +54 -0
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_analysis_route_projection.py +8 -8
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_basics.py +14 -0
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_builder_split_modules.py +17 -17
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_business_hardcode_guard.py +8 -8
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_canonical_state_context_analysis.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_canonical_state_context_inputs.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_canonical_state_context_session.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_canonical_state_flow.py +1 -1
- flare_kernel-0.2.5/tests/test_canonical_state_payload.py +306 -0
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_canonical_state_projection.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_canvas_sourcing_contract_meta.py +1 -1
- flare_kernel-0.2.5/tests/test_chat_api_alias.py +24 -0
- flare_kernel-0.2.5/tests/test_command_resolution_analysis_mode.py +24 -0
- flare_kernel-0.2.5/tests/test_completion_response_builder.py +233 -0
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_completion_selection.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_decision_engine.py +0 -30
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_endpoint_context.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_flare_v1_patch_contract.py +46 -0
- flare_kernel-0.2.5/tests/test_guided_completion.py +137 -0
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_intake_amount_quantity.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_intake_answer.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_intake_authority.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_intake_authority_checkpoint.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_intake_authority_hydration.py +25 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_intake_authority_session.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_intake_canonicalization.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_intake_clarification.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_intake_decision_rules.py +1 -38
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_intake_deployment_delivery.py +1 -1
- flare_kernel-0.2.5/tests/test_intake_domain_context_options.py +30 -0
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_intake_entry_policy.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_intake_extraction.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_intake_extraction_extractors.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_intake_extraction_merge.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_intake_field_projection.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_intake_field_projection_entity.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_intake_field_projection_payload.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_intake_field_projection_source.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_intake_field_scope.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_intake_guided_confirmed_updates.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_intake_guided_flags.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_intake_guided_followup.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_intake_guided_followup_work_item.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_intake_guided_open_fields.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_intake_guided_status.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_intake_guided_summary.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_intake_inputs.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_intake_node_state.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_intake_numeric.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_intake_payload_updates.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_intake_readiness.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_intake_reasoning_priority.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_intake_state_persistence.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_intake_status.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_intake_status_guided_session.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_intake_status_projection.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_intake_status_schema.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_intake_status_stage.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_intake_workflow_checkpoint.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_intent_classifier_utils.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_intent_escalation_override.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_intent_escalation_pipeline.py +2 -2
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_intent_escalation_signal.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_intent_resolution.py +93 -14
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_intent_retrieval.py +14 -15
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_intent_routing.py +32 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_kernel_alias_delegation.py +5 -5
- flare_kernel-0.2.5/tests/test_kernel_endpoint_handlers.py +270 -0
- flare_kernel-0.2.5/tests/test_kernel_endpoint_handlers_sourcing.py +53 -0
- flare_kernel-0.2.5/tests/test_kernel_facade_turn_context.py +301 -0
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_kernel_intent_query_flow.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_kernel_mode_flow.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_kernel_route_execution_wrappers.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_kernel_session_intent_flow.py +1 -1
- flare_kernel-0.2.5/tests/test_mode_orchestration_plan_canvas_saved_content.py +28 -0
- flare_kernel-0.2.5/tests/test_mode_orchestration_plan_finalize.py +725 -0
- flare_kernel-0.2.5/tests/test_mode_orchestration_plan_runtime_payload.py +26 -0
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_mode_orchestration_state_bridge.py +4 -5
- flare_kernel-0.2.5/tests/test_mode_reasoning.py +21 -0
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_mode_resolution.py +4 -4
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_mode_switch.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_new_flow_guard.py +3 -3
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_orchestration_checkpoint_state.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_orchestration_followup_state.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_orchestration_status_context.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_orchestration_status_context_helpers.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_orchestration_status_decision.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_orchestration_status_projection.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_orchestration_status_result.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_orchestration_status_runtime_state.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_orchestration_status_state_context.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_orchestration_status_state_decision.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_orchestration_status_state_entry.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_orchestration_status_state_followup.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_orchestration_status_state_intent.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_orchestration_status_state_node.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_orchestration_status_state_payload.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_orchestration_status_state_unpack.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_orchestration_trace.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_orchestration_trace_projection.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_orchestration_trace_steps.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_patch_contract.py +3 -0
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_payload_enrichment.py +1 -1
- flare_kernel-0.2.5/tests/test_project_api.py +87 -0
- flare_kernel-0.2.5/tests/test_project_memory_store.py +137 -0
- flare_kernel-0.2.5/tests/test_prompting_analysis_instruction.py +147 -0
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_request_identity.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_request_intent_resolution.py +1 -1
- flare_kernel-0.2.5/tests/test_response_strategy_runtime.py +46 -0
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_retrieval_aliases.py +29 -2
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_retrieval_field_queries.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_retrieval_projection.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_retrieval_query_builder.py +2 -2
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_retrieval_search.py +2 -2
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_session_api.py +73 -1
- flare_kernel-0.2.5/tests/test_session_context_persistence.py +219 -0
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_session_intent.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_session_intent_fields.py +19 -2
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_session_intent_small_talk.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_source_ingestion_runtime.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_source_ingestion_ssot_acceptance.py +2 -2
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_source_library.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_source_text_extractor.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_sourcing_provider.py +5 -27
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_sourcing_search_runtime.py +2 -2
- flare_kernel-0.2.5/tests/test_streaming_draft_completion.py +150 -0
- flare_kernel-0.2.5/tests/test_streaming_draft_finalize.py +179 -0
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_streaming_draft_phase.py +3 -3
- flare_kernel-0.2.5/tests/test_streaming_draft_post_completion.py +348 -0
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_streaming_draft_prologue.py +2 -2
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_streaming_event_emitter.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_streaming_intake_phase.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_streaming_mode_event_payload.py +27 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_streaming_mode_events.py +35 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_streaming_response_bootstrap.py +2 -2
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_streaming_response_phases.py +2 -2
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_streaming_response_runtime.py +4 -2
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_streaming_retrieval_phase.py +1 -1
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_streaming_runtime_steps.py +1 -1
- flare_kernel-0.2.5/tests/test_track_runtime.py +58 -0
- flare_kernel-0.2.3/src/flare_kernel/contracts/project_contract.py +0 -24
- flare_kernel-0.2.3/src/flare_kernel/project_store.py +0 -84
- flare_kernel-0.2.3/src/flare_kernel/router/__init__.py +0 -48
- flare_kernel-0.2.3/src/flare_kernel/router/canonical/canonical_state_builder.py +0 -82
- flare_kernel-0.2.3/src/flare_kernel/router/guided_completion.py +0 -68
- flare_kernel-0.2.3/src/flare_kernel/router/intake/__init__.py +0 -1
- flare_kernel-0.2.3/src/flare_kernel/router/intake/intake_status_guided_session.py +0 -20
- flare_kernel-0.2.3/src/flare_kernel/router/intent/__init__.py +0 -1
- flare_kernel-0.2.3/src/flare_kernel/router/intent/intent_retrieval.py +0 -107
- flare_kernel-0.2.3/src/flare_kernel/router/kernel.py +0 -122
- flare_kernel-0.2.3/src/flare_kernel/router/kernel_compat_exports.py +0 -18
- flare_kernel-0.2.3/src/flare_kernel/router/kernel_compat_exports_parts/__init__.py +0 -5
- flare_kernel-0.2.3/src/flare_kernel/router/kernel_compat_exports_parts/constants.py +0 -29
- flare_kernel-0.2.3/src/flare_kernel/router/kernel_compat_exports_parts/domain.py +0 -148
- flare_kernel-0.2.3/src/flare_kernel/router/kernel_compat_exports_parts/endpoint.py +0 -50
- flare_kernel-0.2.3/src/flare_kernel/router/kernel_compat_exports_parts/facade.py +0 -21
- flare_kernel-0.2.3/src/flare_kernel/router/kernel_compat_exports_parts/router_flow.py +0 -95
- flare_kernel-0.2.3/src/flare_kernel/router/kernel_compat_exports_parts/runtime.py +0 -30
- flare_kernel-0.2.3/src/flare_kernel/router/kernel_facade_canonical_state.py +0 -82
- flare_kernel-0.2.3/src/flare_kernel/router/kernel_facade_helpers.py +0 -30
- flare_kernel-0.2.3/src/flare_kernel/router/kernel_facade_orchestration.py +0 -121
- flare_kernel-0.2.3/src/flare_kernel/router/kernel_facade_payload_enrichment.py +0 -75
- flare_kernel-0.2.3/src/flare_kernel/router/kernel_request_flow.py +0 -754
- flare_kernel-0.2.3/src/flare_kernel/router/kernel_request_flow_intent.py +0 -45
- flare_kernel-0.2.3/src/flare_kernel/router/orchestration/__init__.py +0 -1
- flare_kernel-0.2.3/src/flare_kernel/router/prompting.py +0 -98
- flare_kernel-0.2.3/src/flare_kernel/router/retrieval/__init__.py +0 -1
- flare_kernel-0.2.3/src/flare_kernel/router/streaming/streaming_response_phases.py +0 -453
- flare_kernel-0.2.3/src/flare_kernel/router/turn_context_builder.py +0 -229
- flare_kernel-0.2.3/src/flare_kernel/runtime/infrastructure/__init__.py +0 -1
- flare_kernel-0.2.3/src/flare_kernel/runtime/infrastructure/infrastructure.py +0 -801
- flare_kernel-0.2.3/src/flare_kernel/runtime/orchestration/__init__.py +0 -1
- flare_kernel-0.2.3/src/flare_kernel/runtime/orchestration/canonical_mode_runtime.py +0 -344
- flare_kernel-0.2.3/src/flare_kernel/runtime/orchestration/decision_engine_mode_flags.py +0 -200
- flare_kernel-0.2.3/src/flare_kernel/runtime/orchestration/mode_orchestration_plan.py +0 -292
- flare_kernel-0.2.3/src/flare_kernel/runtime/orchestration/mode_orchestration_requirement.py +0 -331
- flare_kernel-0.2.3/src/flare_kernel/runtime/orchestration/mode_orchestration_requirement_context.py +0 -114
- flare_kernel-0.2.3/src/flare_kernel/runtime/orchestration/mode_orchestration_requirement_helpers.py +0 -271
- flare_kernel-0.2.3/src/flare_kernel/runtime/orchestration/mode_orchestration_requirement_payloads.py +0 -259
- flare_kernel-0.2.3/src/flare_kernel/runtime/orchestration/mode_orchestration_sourcing.py +0 -265
- flare_kernel-0.2.3/src/flare_kernel/runtime/orchestration/mode_orchestration_sourcing_stage.py +0 -104
- flare_kernel-0.2.3/src/flare_kernel/runtime/orchestration/source_ingestion_runtime.py +0 -340
- flare_kernel-0.2.3/src/flare_kernel/runtime/orchestration/source_ingestion_runtime_artifacts.py +0 -392
- flare_kernel-0.2.3/src/flare_kernel/runtime/orchestration/ssot_mode_runtime.py +0 -31
- flare_kernel-0.2.3/src/flare_kernel/runtime/reasoning/intake_reasoning_branching_policy.py +0 -190
- flare_kernel-0.2.3/src/flare_kernel/runtime/reasoning/intake_reasoning_planning.py +0 -708
- flare_kernel-0.2.3/src/flare_kernel/runtime/reasoning/intake_reasoning_readiness.py +0 -428
- flare_kernel-0.2.3/src/flare_kernel/runtime/reasoning/intake_reasoning_shared.py +0 -189
- flare_kernel-0.2.3/src/flare_kernel/runtime/session/checkpoint_store_sql.py +0 -98
- flare_kernel-0.2.3/src/flare_kernel/runtime/session/intake_session_store_query.py +0 -40
- flare_kernel-0.2.3/src/flare_kernel/runtime/tests/test_checkpoint_manager.py +0 -118
- flare_kernel-0.2.3/src/flare_kernel/runtime/tests/test_intake_reasoning.py +0 -747
- flare_kernel-0.2.3/src/flare_kernel/runtime/tests/test_intake_reasoning_split.py +0 -87
- flare_kernel-0.2.3/src/flare_kernel/runtime/tests/test_intake_session_store.py +0 -98
- flare_kernel-0.2.3/src/flare_kernel/runtime/tests/test_kernel_runtime.py +0 -735
- flare_kernel-0.2.3/src/flare_kernel/runtime/tests/test_mode_runtime_fallback.py +0 -63
- flare_kernel-0.2.3/src/flare_kernel/session_store.py +0 -312
- flare_kernel-0.2.3/src/flare_kernel.egg-info/SOURCES.txt +0 -400
- flare_kernel-0.2.3/tests/test_canonical_state_payload.py +0 -90
- flare_kernel-0.2.3/tests/test_completion_response_builder.py +0 -111
- flare_kernel-0.2.3/tests/test_guided_completion.py +0 -37
- flare_kernel-0.2.3/tests/test_kernel_endpoint_handlers.py +0 -218
- flare_kernel-0.2.3/tests/test_kernel_facade_turn_context.py +0 -60
- flare_kernel-0.2.3/tests/test_project_api.py +0 -23
- flare_kernel-0.2.3/tests/test_ssot_mode_runtime.py +0 -102
- flare_kernel-0.2.3/tests/test_streaming_draft_completion.py +0 -101
- flare_kernel-0.2.3/tests/test_streaming_draft_finalize.py +0 -100
- flare_kernel-0.2.3/tests/test_streaming_draft_post_completion.py +0 -160
- flare_kernel-0.2.3/tests/test_turn_context_builder.py +0 -116
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/setup.cfg +0 -0
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/src/flare_kernel/__init__.py +0 -0
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/src/flare_kernel/contracts/mode.py +0 -0
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/src/flare_kernel/main.py +0 -0
- /flare_kernel-0.2.3/src/flare_kernel/router/api_errors.py → /flare_kernel-0.2.5/src/flare_kernel/router/api/errors.py +0 -0
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/src/flare_kernel/router/canonical/__init__.py +0 -0
- /flare_kernel-0.2.3/src/flare_kernel/router/canonical/canonical_state_analysis.py → /flare_kernel-0.2.5/src/flare_kernel/router/canonical/analysis.py +0 -0
- /flare_kernel-0.2.3/src/flare_kernel/router/canonical/canonical_state_checkpoint.py → /flare_kernel-0.2.5/src/flare_kernel/router/canonical/checkpoint.py +0 -0
- /flare_kernel-0.2.3/src/flare_kernel/router/endpoint_context.py → /flare_kernel-0.2.5/src/flare_kernel/router/context/endpoint.py +0 -0
- /flare_kernel-0.2.3/src/flare_kernel/router/intake/intake_answer.py → /flare_kernel-0.2.5/src/flare_kernel/router/intake/answer.py +0 -0
- /flare_kernel-0.2.3/src/flare_kernel/router/intake/intake_authority_checkpoint.py → /flare_kernel-0.2.5/src/flare_kernel/router/intake/authority/checkpoint.py +0 -0
- /flare_kernel-0.2.3/src/flare_kernel/router/intake/intake_authority_session.py → /flare_kernel-0.2.5/src/flare_kernel/router/intake/authority/session.py +0 -0
- /flare_kernel-0.2.3/src/flare_kernel/router/intake/intake_entry_policy.py → /flare_kernel-0.2.5/src/flare_kernel/router/intake/entry_policy.py +0 -0
- /flare_kernel-0.2.3/src/flare_kernel/router/intake/intake_extraction_merge.py → /flare_kernel-0.2.5/src/flare_kernel/router/intake/extraction/merge.py +0 -0
- /flare_kernel-0.2.3/src/flare_kernel/router/intake/intake_field_projection_source.py → /flare_kernel-0.2.5/src/flare_kernel/router/intake/field_projection/source.py +0 -0
- /flare_kernel-0.2.3/src/flare_kernel/router/intake/intake_field_scope.py → /flare_kernel-0.2.5/src/flare_kernel/router/intake/field_scope.py +0 -0
- /flare_kernel-0.2.3/src/flare_kernel/router/intake/intake_guided_confirmed_updates.py → /flare_kernel-0.2.5/src/flare_kernel/router/intake/guided/confirmed_updates.py +0 -0
- /flare_kernel-0.2.3/src/flare_kernel/router/intake/intake_guided_flags.py → /flare_kernel-0.2.5/src/flare_kernel/router/intake/guided/flags.py +0 -0
- /flare_kernel-0.2.3/src/flare_kernel/router/intake/intake_guided_followup_work_item.py → /flare_kernel-0.2.5/src/flare_kernel/router/intake/guided/followup_work_item.py +0 -0
- /flare_kernel-0.2.3/src/flare_kernel/router/intake/intake_guided_open_fields.py → /flare_kernel-0.2.5/src/flare_kernel/router/intake/guided/open_fields.py +0 -0
- /flare_kernel-0.2.3/src/flare_kernel/router/intake/intake_guided_summary.py → /flare_kernel-0.2.5/src/flare_kernel/router/intake/guided/summary.py +0 -0
- /flare_kernel-0.2.3/src/flare_kernel/router/intake/intake_inputs.py → /flare_kernel-0.2.5/src/flare_kernel/router/intake/inputs.py +0 -0
- /flare_kernel-0.2.3/src/flare_kernel/router/intake/intake_node_state.py → /flare_kernel-0.2.5/src/flare_kernel/router/intake/node_state.py +0 -0
- /flare_kernel-0.2.3/src/flare_kernel/router/intake/intake_numeric.py → /flare_kernel-0.2.5/src/flare_kernel/router/intake/numeric.py +0 -0
- /flare_kernel-0.2.3/src/flare_kernel/router/intake/intake_payload_updates.py → /flare_kernel-0.2.5/src/flare_kernel/router/intake/payload_updates.py +0 -0
- /flare_kernel-0.2.3/src/flare_kernel/router/intake/intake_readiness.py → /flare_kernel-0.2.5/src/flare_kernel/router/intake/readiness.py +0 -0
- /flare_kernel-0.2.3/src/flare_kernel/router/intake/intake_state_persistence.py → /flare_kernel-0.2.5/src/flare_kernel/router/intake/state_persistence.py +0 -0
- /flare_kernel-0.2.3/src/flare_kernel/router/intake/intake_status_chooser_stage.py → /flare_kernel-0.2.5/src/flare_kernel/router/intake/status/chooser_stage.py +0 -0
- /flare_kernel-0.2.3/src/flare_kernel/router/intake/intake_status_schema.py → /flare_kernel-0.2.5/src/flare_kernel/router/intake/status/schema.py +0 -0
- /flare_kernel-0.2.3/src/flare_kernel/router/intake/intake_workflow_checkpoint.py → /flare_kernel-0.2.5/src/flare_kernel/router/intake/workflow_checkpoint.py +0 -0
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/src/flare_kernel/router/intent/compat_aliases.py +0 -0
- /flare_kernel-0.2.3/src/flare_kernel/router/intent/intent_escalation_override.py → /flare_kernel-0.2.5/src/flare_kernel/router/intent/escalation/override.py +0 -0
- /flare_kernel-0.2.3/src/flare_kernel/router/intent/intent_escalation_signal.py → /flare_kernel-0.2.5/src/flare_kernel/router/intent/escalation/signal.py +0 -0
- /flare_kernel-0.2.3/src/flare_kernel/router/intent/session_intent_small_talk.py → /flare_kernel-0.2.5/src/flare_kernel/router/intent/session_intent/small_talk.py +0 -0
- /flare_kernel-0.2.3/src/flare_kernel/router/kernel_constants_intake.py → /flare_kernel-0.2.5/src/flare_kernel/router/kernel_constants/intake.py +0 -0
- /flare_kernel-0.2.3/src/flare_kernel/router/kernel_endpoint_handlers_health.py → /flare_kernel-0.2.5/src/flare_kernel/router/kernel_endpoint_handlers/health.py +0 -0
- /flare_kernel-0.2.3/src/flare_kernel/router/kernel_endpoint_handlers_knowledge.py → /flare_kernel-0.2.5/src/flare_kernel/router/kernel_endpoint_handlers/knowledge.py +0 -0
- /flare_kernel-0.2.3/src/flare_kernel/router/kernel_facade_utils.py → /flare_kernel-0.2.5/src/flare_kernel/router/kernel_facade/utils.py +0 -0
- /flare_kernel-0.2.3/src/flare_kernel/router/mode_switch.py → /flare_kernel-0.2.5/src/flare_kernel/router/mode/switch.py +0 -0
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/src/flare_kernel/router/next_actions_guard.py +0 -0
- /flare_kernel-0.2.3/src/flare_kernel/router/orchestration/orchestration_status_context_helpers.py → /flare_kernel-0.2.5/src/flare_kernel/router/orchestration/status/context_helpers.py +0 -0
- /flare_kernel-0.2.3/src/flare_kernel/router/orchestration/orchestration_status_projection.py → /flare_kernel-0.2.5/src/flare_kernel/router/orchestration/status/projection.py +0 -0
- /flare_kernel-0.2.3/src/flare_kernel/router/orchestration/orchestration_status_result.py → /flare_kernel-0.2.5/src/flare_kernel/router/orchestration/status/result.py +0 -0
- /flare_kernel-0.2.3/src/flare_kernel/router/orchestration/orchestration_status_state_context.py → /flare_kernel-0.2.5/src/flare_kernel/router/orchestration/status/state/context.py +0 -0
- /flare_kernel-0.2.3/src/flare_kernel/router/orchestration/orchestration_status_state_decision.py → /flare_kernel-0.2.5/src/flare_kernel/router/orchestration/status/state/decision.py +0 -0
- /flare_kernel-0.2.3/src/flare_kernel/router/orchestration/orchestration_status_state_entry.py → /flare_kernel-0.2.5/src/flare_kernel/router/orchestration/status/state/entry.py +0 -0
- /flare_kernel-0.2.3/src/flare_kernel/router/orchestration/orchestration_status_state_followup.py → /flare_kernel-0.2.5/src/flare_kernel/router/orchestration/status/state/followup.py +0 -0
- /flare_kernel-0.2.3/src/flare_kernel/router/orchestration/orchestration_status_state_intent.py → /flare_kernel-0.2.5/src/flare_kernel/router/orchestration/status/state/intent.py +0 -0
- /flare_kernel-0.2.3/src/flare_kernel/router/orchestration/orchestration_status_state_node.py → /flare_kernel-0.2.5/src/flare_kernel/router/orchestration/status/state/node.py +0 -0
- /flare_kernel-0.2.3/src/flare_kernel/router/orchestration/orchestration_status_state_payload.py → /flare_kernel-0.2.5/src/flare_kernel/router/orchestration/status/state/payload.py +0 -0
- /flare_kernel-0.2.3/src/flare_kernel/router/orchestration/orchestration_status_state_unpack.py → /flare_kernel-0.2.5/src/flare_kernel/router/orchestration/status/state/unpack.py +0 -0
- /flare_kernel-0.2.3/src/flare_kernel/router/orchestration/orchestration_trace_projection.py → /flare_kernel-0.2.5/src/flare_kernel/router/orchestration/trace/projection.py +0 -0
- /flare_kernel-0.2.3/src/flare_kernel/router/request_identity.py → /flare_kernel-0.2.5/src/flare_kernel/router/request/identity.py +0 -0
- /flare_kernel-0.2.3/src/flare_kernel/router/retrieval/retrieval_field_queries.py → /flare_kernel-0.2.5/src/flare_kernel/router/retrieval/field_queries.py +0 -0
- /flare_kernel-0.2.3/src/flare_kernel/router/retrieval/retrieval_search.py → /flare_kernel-0.2.5/src/flare_kernel/router/retrieval/search.py +0 -0
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/src/flare_kernel/router/streaming/__init__.py +0 -0
- /flare_kernel-0.2.3/src/flare_kernel/router/streaming/streaming_event_emitter.py → /flare_kernel-0.2.5/src/flare_kernel/router/streaming/event_emitter.py +0 -0
- /flare_kernel-0.2.3/src/flare_kernel/router/streaming/streaming_response_bootstrap.py → /flare_kernel-0.2.5/src/flare_kernel/router/streaming/response/bootstrap.py +0 -0
- /flare_kernel-0.2.3/src/flare_kernel/router/streaming/streaming_retrieval_phase.py → /flare_kernel-0.2.5/src/flare_kernel/router/streaming/retrieval/phase.py +0 -0
- /flare_kernel-0.2.3/src/flare_kernel/router/streaming/streaming_runtime_steps.py → /flare_kernel-0.2.5/src/flare_kernel/router/streaming/runtime/steps.py +0 -0
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/src/flare_kernel/router/text_safety.py +0 -0
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/src/flare_kernel/runtime/domain/__init__.py +0 -0
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/src/flare_kernel/runtime/domain/domain_pack_loader.py +0 -0
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/src/flare_kernel/runtime/domain/profile_resolution.py +0 -0
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/src/flare_kernel/runtime/execution/__init__.py +0 -0
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/src/flare_kernel/runtime/execution/agent_runtime.py +0 -0
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/src/flare_kernel/runtime/execution/skill_runtime.py +0 -0
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/src/flare_kernel/runtime/infrastructure/logging.py +0 -0
- /flare_kernel-0.2.3/src/flare_kernel/runtime/infrastructure/source_library_persistence.py → /flare_kernel-0.2.5/src/flare_kernel/runtime/infrastructure/source/library_persistence.py +0 -0
- /flare_kernel-0.2.3/src/flare_kernel/runtime/infrastructure/source_text_extractor.py → /flare_kernel-0.2.5/src/flare_kernel/runtime/infrastructure/source/text_extractor.py +0 -0
- /flare_kernel-0.2.3/src/flare_kernel/runtime/infrastructure/sourcing_persistence.py → /flare_kernel-0.2.5/src/flare_kernel/runtime/infrastructure/sourcing/persistence.py +0 -0
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/src/flare_kernel/runtime/infrastructure/trace.py +0 -0
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/src/flare_kernel/runtime/intent/__init__.py +0 -0
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/src/flare_kernel/runtime/intent/intent_and_escalation/__init__.py +0 -0
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/src/flare_kernel/runtime/intent/intent_and_escalation/decision.py +0 -0
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/src/flare_kernel/runtime/intent/intent_and_escalation/lexicon.py +0 -0
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/src/flare_kernel/runtime/intent/intent_and_escalation/preprocessing.py +0 -0
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/src/flare_kernel/runtime/intent/intent_and_escalation/signals.py +0 -0
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/src/flare_kernel/runtime/intent/intent_and_escalation_classifier.py +0 -0
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/src/flare_kernel/runtime/llm/__init__.py +0 -0
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/src/flare_kernel/runtime/llm/llm_provider.py +0 -0
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/src/flare_kernel/runtime/llm/model_router.py +0 -0
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/src/flare_kernel/runtime/orchestration/canvas_sourcing_contract.py +0 -0
- /flare_kernel-0.2.3/src/flare_kernel/runtime/orchestration/sourcing_event_payloads.py → /flare_kernel-0.2.5/src/flare_kernel/runtime/orchestration/sourcing/event_payloads.py +0 -0
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/src/flare_kernel/runtime/reasoning/__init__.py +0 -0
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/src/flare_kernel/runtime/session/__init__.py +0 -0
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/src/flare_kernel/runtime/session/checkpoint_manager.py +0 -0
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/src/flare_kernel/runtime/session/intake_session_store.py +0 -0
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/src/flare_kernel/runtime/session/models.py +0 -0
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/src/flare_kernel.egg-info/dependency_links.txt +0 -0
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/src/flare_kernel.egg-info/requires.txt +0 -0
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/src/flare_kernel.egg-info/top_level.txt +0 -0
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_compat_aliases.py +0 -0
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_domain_pack_loader.py +0 -0
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_infrastructure_helpers.py +0 -0
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_infrastructure_knowledge.py +0 -0
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_intent_escalation_classifier.py +0 -0
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_intent_type_compat_aliases.py +0 -0
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_kernel_facade_helpers.py +0 -0
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_llm_provider.py +0 -0
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_model_router.py +0 -0
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_source_library_persistence_scope.py +0 -0
- {flare_kernel-0.2.3 → flare_kernel-0.2.5}/tests/test_text_safety.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: flare-kernel
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.5
|
|
4
4
|
Summary: FLARE kernel runtime package
|
|
5
5
|
License: Proprietary
|
|
6
6
|
Classifier: Development Status :: 3 - Alpha
|
|
@@ -27,7 +27,8 @@ Requires-Dist: qdrant-client<2,>=1.9
|
|
|
27
27
|
边界文档:
|
|
28
28
|
|
|
29
29
|
1. `packages/flare-kernel/docs/KERNEL-BOUNDARY.md`
|
|
30
|
-
2. `docs/contracts/agent
|
|
30
|
+
2. `docs/contracts/core/agent.md`
|
|
31
|
+
3. `packages/flare-kernel/docs/replay-snapshot-technical-spec.md`
|
|
31
32
|
|
|
32
33
|
职责:
|
|
33
34
|
|
|
@@ -5,13 +5,13 @@ from __future__ import annotations
|
|
|
5
5
|
from fastapi import FastAPI, HTTPException
|
|
6
6
|
from fastapi.middleware.cors import CORSMiddleware
|
|
7
7
|
|
|
8
|
-
from flare_kernel.router.
|
|
8
|
+
from flare_kernel.router.api.errors import (
|
|
9
9
|
ApiError,
|
|
10
10
|
api_error_exception_handler,
|
|
11
11
|
http_exception_handler,
|
|
12
12
|
unhandled_exception_handler,
|
|
13
13
|
)
|
|
14
|
-
from flare_kernel.router import kernel_router, project_api_router, session_api_router, source_library_router
|
|
14
|
+
from flare_kernel.router import chat_api_router, kernel_router, project_api_router, session_api_router, source_library_router
|
|
15
15
|
|
|
16
16
|
|
|
17
17
|
def create_app() -> FastAPI:
|
|
@@ -30,6 +30,7 @@ def create_app() -> FastAPI:
|
|
|
30
30
|
)
|
|
31
31
|
|
|
32
32
|
app.include_router(kernel_router)
|
|
33
|
+
app.include_router(chat_api_router)
|
|
33
34
|
app.include_router(project_api_router)
|
|
34
35
|
app.include_router(session_api_router)
|
|
35
36
|
app.include_router(source_library_router)
|
|
@@ -2,9 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
from flare_kernel.contracts.context import (
|
|
4
4
|
ContextAnalysisResult,
|
|
5
|
+
ContextClaimItem,
|
|
5
6
|
ContextContract,
|
|
6
7
|
ContextEvidenceItem,
|
|
7
8
|
ContextSourcingResult,
|
|
9
|
+
ContextTurnItem,
|
|
8
10
|
create_empty_context,
|
|
9
11
|
)
|
|
10
12
|
from flare_kernel.contracts.kernel_contract import (
|
|
@@ -57,9 +59,11 @@ __all__ = [
|
|
|
57
59
|
"SourcingSearchRequest",
|
|
58
60
|
"SourcingSearchResponse",
|
|
59
61
|
"ContextContract",
|
|
62
|
+
"ContextClaimItem",
|
|
60
63
|
"ContextAnalysisResult",
|
|
61
64
|
"ContextEvidenceItem",
|
|
62
65
|
"ContextSourcingResult",
|
|
66
|
+
"ContextTurnItem",
|
|
63
67
|
"create_empty_context",
|
|
64
68
|
"Mode",
|
|
65
69
|
"ModeHandler",
|
|
@@ -9,11 +9,29 @@ from pydantic import BaseModel, Field
|
|
|
9
9
|
|
|
10
10
|
class ContextEvidenceItem(BaseModel):
|
|
11
11
|
id: str
|
|
12
|
-
|
|
12
|
+
source_id: str = ""
|
|
13
|
+
source: str = ""
|
|
13
14
|
snippet: str = ""
|
|
14
15
|
meta: dict[str, Any] = Field(default_factory=dict)
|
|
15
16
|
|
|
16
17
|
|
|
18
|
+
class ContextClaimItem(BaseModel):
|
|
19
|
+
id: str
|
|
20
|
+
text: str
|
|
21
|
+
source_id: str = ""
|
|
22
|
+
evidence_ids: list[str] = Field(default_factory=list)
|
|
23
|
+
confidence: float | None = None
|
|
24
|
+
meta: dict[str, Any] = Field(default_factory=dict)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class ContextTurnItem(BaseModel):
|
|
28
|
+
turn_id: str
|
|
29
|
+
user_message: str = ""
|
|
30
|
+
assistant_message: str = ""
|
|
31
|
+
source_ids: list[str] = Field(default_factory=list)
|
|
32
|
+
created_at: str = ""
|
|
33
|
+
|
|
34
|
+
|
|
17
35
|
class ContextSourcingResult(BaseModel):
|
|
18
36
|
round: int
|
|
19
37
|
items: list[dict[str, Any]] = Field(default_factory=list)
|
|
@@ -28,14 +46,25 @@ class ContextAnalysisResult(BaseModel):
|
|
|
28
46
|
|
|
29
47
|
class ContextContract(BaseModel):
|
|
30
48
|
context_revision_id: str = ""
|
|
49
|
+
session_summary: str = ""
|
|
50
|
+
user_focus: list[str] = Field(default_factory=list)
|
|
51
|
+
response_priorities: list[str] = Field(default_factory=list)
|
|
31
52
|
confirmed_fields: dict[str, Any] = Field(default_factory=dict)
|
|
32
53
|
missing_fields: list[str] = Field(default_factory=list)
|
|
33
54
|
notes: list[str] = Field(default_factory=list)
|
|
55
|
+
turns: list[ContextTurnItem] = Field(default_factory=list)
|
|
34
56
|
evidence: list[ContextEvidenceItem] = Field(default_factory=list)
|
|
57
|
+
facts: list[ContextClaimItem] = Field(default_factory=list)
|
|
58
|
+
inferences: list[ContextClaimItem] = Field(default_factory=list)
|
|
59
|
+
unknowns: list[ContextClaimItem] = Field(default_factory=list)
|
|
60
|
+
source_attributions: list[dict[str, Any]] = Field(default_factory=list)
|
|
61
|
+
artifact_context: list[dict[str, Any]] = Field(default_factory=list)
|
|
62
|
+
track: dict[str, Any] = Field(default_factory=dict)
|
|
35
63
|
sourcing_results: list[ContextSourcingResult] = Field(default_factory=list)
|
|
36
64
|
analysis_results: list[ContextAnalysisResult] = Field(default_factory=list)
|
|
37
65
|
rank_profile: dict[str, Any] = Field(default_factory=dict)
|
|
38
66
|
rank_feedback_log: list[dict[str, Any]] = Field(default_factory=list)
|
|
67
|
+
updated_at: str = ""
|
|
39
68
|
|
|
40
69
|
|
|
41
70
|
def create_empty_context() -> ContextContract:
|
|
@@ -39,6 +39,7 @@ class IntakeFieldValue(BaseModel):
|
|
|
39
39
|
|
|
40
40
|
class KernelRequest(BaseModel):
|
|
41
41
|
contract_version: str = "flare.v1"
|
|
42
|
+
content: str | None = None
|
|
42
43
|
client_request_id: str | None = None
|
|
43
44
|
tenant_id: str = "default"
|
|
44
45
|
instance_id: str = "default"
|
|
@@ -60,7 +61,7 @@ class KernelRequest(BaseModel):
|
|
|
60
61
|
entities: list[dict[str, Any] | str] = Field(default_factory=list)
|
|
61
62
|
entity_query_mode: Literal["off", "prefer", "only"] = "prefer"
|
|
62
63
|
context_refs: list[Any] = Field(default_factory=list)
|
|
63
|
-
knowledge_refs: list[
|
|
64
|
+
knowledge_refs: list[Any] = Field(default_factory=list)
|
|
64
65
|
action_key: str | None = None
|
|
65
66
|
target_mode: str | None = None
|
|
66
67
|
action_status: str | None = None
|
|
@@ -70,10 +71,22 @@ class KernelRequest(BaseModel):
|
|
|
70
71
|
field_key: str | None = None
|
|
71
72
|
field_value: IntakeFieldValue | None = None
|
|
72
73
|
|
|
74
|
+
@model_validator(mode="after")
|
|
75
|
+
def normalize_top_level_content_into_payload(self) -> "KernelRequest":
|
|
76
|
+
content = str(self.content or "").strip()
|
|
77
|
+
if not content:
|
|
78
|
+
return self
|
|
79
|
+
payload = dict(self.payload or {})
|
|
80
|
+
message = str(payload.get("message") or "").strip()
|
|
81
|
+
if not message:
|
|
82
|
+
payload["message"] = content
|
|
83
|
+
self.payload = payload
|
|
84
|
+
return self
|
|
85
|
+
|
|
73
86
|
|
|
74
87
|
class AnalysisRouteDecision(BaseModel):
|
|
75
88
|
analysis_type: Literal["requirement", "sourcing"] = "requirement"
|
|
76
|
-
template_id: str = "
|
|
89
|
+
template_id: str = "flare.requirement.rfx.v1"
|
|
77
90
|
reason_codes: list[str] = Field(default_factory=list)
|
|
78
91
|
confidence: float = 0.0
|
|
79
92
|
|
|
@@ -150,7 +163,7 @@ class SourcingSearchRequest(BaseModel):
|
|
|
150
163
|
source_scope: Literal["local", "web", "hybrid"] = "hybrid"
|
|
151
164
|
sourcing_enabled: bool = False
|
|
152
165
|
context_refs: list[Any] = Field(default_factory=list)
|
|
153
|
-
knowledge_refs: list[
|
|
166
|
+
knowledge_refs: list[Any] = Field(default_factory=list)
|
|
154
167
|
source_ids: list[str] = Field(default_factory=list)
|
|
155
168
|
entities: list[dict[str, Any] | str] = Field(default_factory=list)
|
|
156
169
|
entity_query_mode: Literal["off", "prefer", "only"] = "prefer"
|
|
@@ -165,6 +178,8 @@ class SourcingSearchResponse(BaseModel):
|
|
|
165
178
|
query: str
|
|
166
179
|
effective_query: str = ""
|
|
167
180
|
intent: str = ""
|
|
181
|
+
sourcing_task_kind: str = "mixed"
|
|
182
|
+
response_label: str = "候选条目"
|
|
168
183
|
source_scope: Literal["local", "web", "hybrid"]
|
|
169
184
|
sourcing_enabled: bool
|
|
170
185
|
requested_top_k: int = 8
|
|
@@ -176,6 +191,7 @@ class SourcingSearchResponse(BaseModel):
|
|
|
176
191
|
all_results: list[dict[str, Any]] = Field(default_factory=list)
|
|
177
192
|
results: list[dict[str, Any]] = Field(default_factory=list)
|
|
178
193
|
shortlist: list[dict[str, Any]] = Field(default_factory=list)
|
|
194
|
+
canvas_state: dict[str, Any] = Field(default_factory=dict)
|
|
179
195
|
blocked: bool = False
|
|
180
196
|
reason: str = ""
|
|
181
197
|
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"""Project API contracts."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from pydantic import BaseModel, Field
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class ProjectRecord(BaseModel):
|
|
9
|
+
"""Persisted Project row returned by the Project API.
|
|
10
|
+
|
|
11
|
+
Attributes:
|
|
12
|
+
project_id: Stable Project identifier used by frontend and backend routes.
|
|
13
|
+
project_name: Human-readable Project name shown in the UI.
|
|
14
|
+
status: Project lifecycle state, for example "active" or "archived".
|
|
15
|
+
session_count: Number of sessions currently linked to this Project.
|
|
16
|
+
created_at: ISO timestamp for Project creation when available.
|
|
17
|
+
updated_at: ISO timestamp for the stored Project row update when available.
|
|
18
|
+
latest_updated_at: Most recent Project activity timestamp, including sessions.
|
|
19
|
+
"""
|
|
20
|
+
|
|
21
|
+
project_id: str
|
|
22
|
+
project_name: str
|
|
23
|
+
status: str = "active"
|
|
24
|
+
session_count: int = 0
|
|
25
|
+
created_at: str | None = None
|
|
26
|
+
updated_at: str | None = None
|
|
27
|
+
latest_updated_at: str | None = None
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class ProjectUpsertRequest(BaseModel):
|
|
31
|
+
"""Request body for creating or updating a Project.
|
|
32
|
+
|
|
33
|
+
Attributes:
|
|
34
|
+
project_name: Optional replacement Project display name.
|
|
35
|
+
status: Project lifecycle state to persist; defaults to "active".
|
|
36
|
+
"""
|
|
37
|
+
|
|
38
|
+
project_name: str | None = None
|
|
39
|
+
status: str = "active"
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
class ProjectsResponse(BaseModel):
|
|
43
|
+
"""Response body for listing Projects.
|
|
44
|
+
|
|
45
|
+
Attributes:
|
|
46
|
+
projects: Persisted Project records visible in the current user scope.
|
|
47
|
+
"""
|
|
48
|
+
|
|
49
|
+
projects: list[ProjectRecord] = Field(default_factory=list)
|
|
@@ -6,6 +6,8 @@ from typing import Any, Literal
|
|
|
6
6
|
|
|
7
7
|
from pydantic import BaseModel, Field
|
|
8
8
|
|
|
9
|
+
from flare_kernel.contracts.context import ContextContract, create_empty_context
|
|
10
|
+
|
|
9
11
|
|
|
10
12
|
class SessionRecord(BaseModel):
|
|
11
13
|
session_id: str
|
|
@@ -16,6 +18,7 @@ class SessionRecord(BaseModel):
|
|
|
16
18
|
status: str = "active"
|
|
17
19
|
user_id: str | None = None
|
|
18
20
|
function_type: str | None = None
|
|
21
|
+
context: ContextContract = Field(default_factory=create_empty_context)
|
|
19
22
|
created_at: str
|
|
20
23
|
updated_at: str
|
|
21
24
|
|
|
@@ -54,6 +57,7 @@ class SessionMessageRecord(BaseModel):
|
|
|
54
57
|
sourcing_candidates: dict[str, Any] | None = None
|
|
55
58
|
knowledge_citation: dict[str, Any] | None = None
|
|
56
59
|
context_usage: dict[str, Any] | None = None
|
|
60
|
+
plan_payload: dict[str, Any] | None = None
|
|
57
61
|
created_at: str
|
|
58
62
|
|
|
59
63
|
|
|
@@ -74,3 +78,9 @@ class SessionAppendExchangeRequest(BaseModel):
|
|
|
74
78
|
sourcing_candidates: dict[str, Any] | None = None
|
|
75
79
|
knowledge_citation: dict[str, Any] | None = None
|
|
76
80
|
context_usage: dict[str, Any] | None = None
|
|
81
|
+
plan_payload: dict[str, Any] | None = None
|
|
82
|
+
reasoning_result: dict[str, Any] | None = None
|
|
83
|
+
document_result: dict[str, Any] | None = None
|
|
84
|
+
track_result: dict[str, Any] | None = None
|
|
85
|
+
context_patch: dict[str, Any] | None = None
|
|
86
|
+
context_snapshot: dict[str, Any] | None = None
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
"""Project repository backed by FLARE SQL storage."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from datetime import UTC, datetime
|
|
6
|
+
from typing import Any
|
|
7
|
+
|
|
8
|
+
from flare_kernel.runtime.infrastructure.database import build_sqlalchemy_engine
|
|
9
|
+
from flare_kernel.session_store import list_sessions
|
|
10
|
+
from flare_kernel.user_store import get_current_user_id
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def _now_iso() -> str:
|
|
14
|
+
"""Build the current UTC timestamp for persisted Project records.
|
|
15
|
+
|
|
16
|
+
Returns:
|
|
17
|
+
ISO-formatted UTC timestamp string.
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
return datetime.now(UTC).isoformat()
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def _normalize_text(value: Any) -> str:
|
|
24
|
+
"""Normalize a Project text value before storage or response projection.
|
|
25
|
+
|
|
26
|
+
Args:
|
|
27
|
+
value: Raw text-like value from API input or persisted storage.
|
|
28
|
+
|
|
29
|
+
Returns:
|
|
30
|
+
Whitespace-collapsed string, or an empty string when value is missing.
|
|
31
|
+
"""
|
|
32
|
+
|
|
33
|
+
return " ".join(str(value or "").split()).strip()
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def _ensure_project_table(conn: Any, text_fn: Any) -> None:
|
|
37
|
+
"""Create the durable Project table when it does not exist.
|
|
38
|
+
|
|
39
|
+
Args:
|
|
40
|
+
conn: Active SQLAlchemy connection or transaction connection.
|
|
41
|
+
text_fn: SQLAlchemy text factory used by the caller's SQL boundary.
|
|
42
|
+
|
|
43
|
+
Returns:
|
|
44
|
+
None. The table is created as a database side effect.
|
|
45
|
+
"""
|
|
46
|
+
|
|
47
|
+
conn.execute(
|
|
48
|
+
text_fn(
|
|
49
|
+
"""
|
|
50
|
+
CREATE TABLE IF NOT EXISTS flare_projects (
|
|
51
|
+
project_id TEXT NOT NULL,
|
|
52
|
+
user_id TEXT NOT NULL,
|
|
53
|
+
project_name TEXT NOT NULL,
|
|
54
|
+
status TEXT NOT NULL,
|
|
55
|
+
created_at TEXT,
|
|
56
|
+
updated_at TEXT,
|
|
57
|
+
PRIMARY KEY (user_id, project_id)
|
|
58
|
+
)
|
|
59
|
+
"""
|
|
60
|
+
)
|
|
61
|
+
)
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
def _build_project_view(record: dict[str, Any]) -> dict[str, Any]:
|
|
65
|
+
"""Project a stored Project row into the Project API response shape.
|
|
66
|
+
|
|
67
|
+
Args:
|
|
68
|
+
record: Persisted Project row with project_id, project_name, status, and timestamps.
|
|
69
|
+
|
|
70
|
+
Returns:
|
|
71
|
+
Dictionary matching ProjectRecord fields, including derived session_count and latest_updated_at.
|
|
72
|
+
"""
|
|
73
|
+
|
|
74
|
+
project_id = _normalize_text(record.get("project_id"))
|
|
75
|
+
session_rows = list_sessions(project_id=project_id)
|
|
76
|
+
latest_updated_at = ""
|
|
77
|
+
if session_rows:
|
|
78
|
+
latest_updated_at = str(session_rows[0].get("updated_at") or "").strip()
|
|
79
|
+
updated_at = _normalize_text(record.get("updated_at")) or latest_updated_at or _normalize_text(record.get("created_at"))
|
|
80
|
+
return {
|
|
81
|
+
"project_id": project_id,
|
|
82
|
+
"project_name": _normalize_text(record.get("project_name")) or project_id,
|
|
83
|
+
"status": _normalize_text(record.get("status")) or "active",
|
|
84
|
+
"session_count": len(session_rows),
|
|
85
|
+
"created_at": _normalize_text(record.get("created_at")) or None,
|
|
86
|
+
"updated_at": updated_at or None,
|
|
87
|
+
"latest_updated_at": latest_updated_at or updated_at or None,
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
def _project_engine() -> Any:
|
|
92
|
+
"""Resolve the SQLAlchemy engine required by Project persistence.
|
|
93
|
+
|
|
94
|
+
Returns:
|
|
95
|
+
SQLAlchemy Engine configured from FLARE_POSTGRES_DSN.
|
|
96
|
+
|
|
97
|
+
Raises:
|
|
98
|
+
RuntimeError: When SQLAlchemy or the configured engine is unavailable.
|
|
99
|
+
"""
|
|
100
|
+
|
|
101
|
+
engine = build_sqlalchemy_engine()
|
|
102
|
+
if engine is None:
|
|
103
|
+
raise RuntimeError("SQLAlchemy engine is unavailable for project storage")
|
|
104
|
+
return engine
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
def list_projects() -> list[dict[str, Any]]:
|
|
108
|
+
"""List durable Projects for the current database user scope.
|
|
109
|
+
|
|
110
|
+
Returns:
|
|
111
|
+
Project view dictionaries sorted by persisted updated_at descending.
|
|
112
|
+
"""
|
|
113
|
+
|
|
114
|
+
from sqlalchemy import text
|
|
115
|
+
|
|
116
|
+
with _project_engine().begin() as conn:
|
|
117
|
+
_ensure_project_table(conn, text)
|
|
118
|
+
user_id = get_current_user_id(conn, text)
|
|
119
|
+
rows = conn.execute(
|
|
120
|
+
text(
|
|
121
|
+
"""
|
|
122
|
+
SELECT project_id, user_id, project_name, status, created_at, updated_at
|
|
123
|
+
FROM flare_projects
|
|
124
|
+
WHERE user_id = :user_id
|
|
125
|
+
ORDER BY updated_at DESC
|
|
126
|
+
"""
|
|
127
|
+
),
|
|
128
|
+
{"user_id": user_id},
|
|
129
|
+
).mappings().all()
|
|
130
|
+
return [_build_project_view(dict(row)) for row in rows]
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
def get_project(*, project_id: str) -> dict[str, Any] | None:
|
|
134
|
+
"""Fetch one durable Project by id in the current database user scope.
|
|
135
|
+
|
|
136
|
+
Args:
|
|
137
|
+
project_id: Stable Project identifier to load.
|
|
138
|
+
|
|
139
|
+
Returns:
|
|
140
|
+
Project view dictionary when found, otherwise None.
|
|
141
|
+
"""
|
|
142
|
+
|
|
143
|
+
resolved_project_id = _normalize_text(project_id)
|
|
144
|
+
if not resolved_project_id:
|
|
145
|
+
return None
|
|
146
|
+
|
|
147
|
+
from sqlalchemy import text
|
|
148
|
+
|
|
149
|
+
with _project_engine().begin() as conn:
|
|
150
|
+
_ensure_project_table(conn, text)
|
|
151
|
+
user_id = get_current_user_id(conn, text)
|
|
152
|
+
row = conn.execute(
|
|
153
|
+
text(
|
|
154
|
+
"""
|
|
155
|
+
SELECT project_id, user_id, project_name, status, created_at, updated_at
|
|
156
|
+
FROM flare_projects
|
|
157
|
+
WHERE user_id = :user_id AND project_id = :project_id
|
|
158
|
+
LIMIT 1
|
|
159
|
+
"""
|
|
160
|
+
),
|
|
161
|
+
{"user_id": user_id, "project_id": resolved_project_id},
|
|
162
|
+
).mappings().first()
|
|
163
|
+
return _build_project_view(dict(row)) if row else None
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
def upsert_project(*, project_id: str, project_name: str | None, status: str | None = None) -> dict[str, Any]:
|
|
167
|
+
"""Create or update a durable Project name and status.
|
|
168
|
+
|
|
169
|
+
Args:
|
|
170
|
+
project_id: Stable Project identifier to create or update.
|
|
171
|
+
project_name: Optional Project display name; existing name is preserved when blank on update.
|
|
172
|
+
status: Optional lifecycle status; existing status is preserved when blank on update.
|
|
173
|
+
|
|
174
|
+
Returns:
|
|
175
|
+
Project view dictionary after persistence.
|
|
176
|
+
|
|
177
|
+
Raises:
|
|
178
|
+
ValueError: When project_id is empty.
|
|
179
|
+
RuntimeError: When the upsert does not produce a stored Project record.
|
|
180
|
+
"""
|
|
181
|
+
|
|
182
|
+
resolved_project_id = _normalize_text(project_id)
|
|
183
|
+
if not resolved_project_id:
|
|
184
|
+
raise ValueError("project_id is required")
|
|
185
|
+
|
|
186
|
+
now = _now_iso()
|
|
187
|
+
next_project_name = _normalize_text(project_name)
|
|
188
|
+
next_status = _normalize_text(status)
|
|
189
|
+
|
|
190
|
+
from sqlalchemy import text
|
|
191
|
+
|
|
192
|
+
with _project_engine().begin() as conn:
|
|
193
|
+
_ensure_project_table(conn, text)
|
|
194
|
+
user_id = get_current_user_id(conn, text)
|
|
195
|
+
existing = conn.execute(
|
|
196
|
+
text(
|
|
197
|
+
"""
|
|
198
|
+
SELECT project_id, user_id, project_name, status, created_at, updated_at
|
|
199
|
+
FROM flare_projects
|
|
200
|
+
WHERE user_id = :user_id AND project_id = :project_id
|
|
201
|
+
LIMIT 1
|
|
202
|
+
"""
|
|
203
|
+
),
|
|
204
|
+
{"user_id": user_id, "project_id": resolved_project_id},
|
|
205
|
+
).mappings().first()
|
|
206
|
+
if existing is None:
|
|
207
|
+
conn.execute(
|
|
208
|
+
text(
|
|
209
|
+
"""
|
|
210
|
+
INSERT INTO flare_projects (
|
|
211
|
+
project_id, user_id, project_name, status, created_at, updated_at
|
|
212
|
+
) VALUES (
|
|
213
|
+
:project_id, :user_id, :project_name, :status, :created_at, :updated_at
|
|
214
|
+
)
|
|
215
|
+
"""
|
|
216
|
+
),
|
|
217
|
+
{
|
|
218
|
+
"project_id": resolved_project_id,
|
|
219
|
+
"user_id": user_id,
|
|
220
|
+
"project_name": next_project_name or resolved_project_id,
|
|
221
|
+
"status": next_status or "active",
|
|
222
|
+
"created_at": now,
|
|
223
|
+
"updated_at": now,
|
|
224
|
+
},
|
|
225
|
+
)
|
|
226
|
+
else:
|
|
227
|
+
current = dict(existing)
|
|
228
|
+
conn.execute(
|
|
229
|
+
text(
|
|
230
|
+
"""
|
|
231
|
+
UPDATE flare_projects
|
|
232
|
+
SET project_name = :project_name,
|
|
233
|
+
status = :status,
|
|
234
|
+
updated_at = :updated_at
|
|
235
|
+
WHERE user_id = :user_id AND project_id = :project_id
|
|
236
|
+
"""
|
|
237
|
+
),
|
|
238
|
+
{
|
|
239
|
+
"project_id": resolved_project_id,
|
|
240
|
+
"user_id": user_id,
|
|
241
|
+
"project_name": next_project_name or _normalize_text(current.get("project_name")) or resolved_project_id,
|
|
242
|
+
"status": next_status or _normalize_text(current.get("status")) or "active",
|
|
243
|
+
"updated_at": now,
|
|
244
|
+
},
|
|
245
|
+
)
|
|
246
|
+
stored = get_project(project_id=resolved_project_id)
|
|
247
|
+
if stored is None:
|
|
248
|
+
raise RuntimeError("project upsert did not persist a project record")
|
|
249
|
+
return stored
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"""Kernel router public exports."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from flare_kernel.router.api.project import router as project_api_router
|
|
6
|
+
from flare_kernel.router.api.session import router as session_api_router
|
|
7
|
+
from flare_kernel.router.api.chat import router as chat_api_router
|
|
8
|
+
from flare_kernel.router.kernel import router as kernel_router
|
|
9
|
+
from flare_kernel.router.source_library import router as source_library_router
|
|
10
|
+
|
|
11
|
+
__all__ = [
|
|
12
|
+
"kernel_router",
|
|
13
|
+
"chat_api_router",
|
|
14
|
+
"project_api_router",
|
|
15
|
+
"session_api_router",
|
|
16
|
+
"source_library_router",
|
|
17
|
+
]
|
|
File without changes
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"""Chat API aliases backed by kernel runtime endpoints."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from fastapi import APIRouter
|
|
6
|
+
from fastapi.responses import StreamingResponse
|
|
7
|
+
|
|
8
|
+
from flare_kernel.contracts import KernelRequest, KernelResponse
|
|
9
|
+
from flare_kernel.router.kernel import kernel_action, kernel_run, kernel_stream
|
|
10
|
+
|
|
11
|
+
router = APIRouter(tags=["chat"])
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
@router.post("/chat/run", response_model=KernelResponse)
|
|
15
|
+
async def chat_run(req: KernelRequest) -> KernelResponse:
|
|
16
|
+
return await kernel_run(req)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
@router.post("/chat/action", response_model=KernelResponse)
|
|
20
|
+
async def chat_action(req: KernelRequest) -> KernelResponse:
|
|
21
|
+
return await kernel_action(req)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
@router.post("/chat/stream")
|
|
25
|
+
async def chat_stream(req: KernelRequest) -> StreamingResponse:
|
|
26
|
+
return await kernel_stream(req)
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
__all__ = ["router"]
|
|
@@ -12,12 +12,28 @@ router = APIRouter(tags=["projects"])
|
|
|
12
12
|
|
|
13
13
|
@router.get("/projects", response_model=ProjectsResponse)
|
|
14
14
|
async def list_project_records() -> ProjectsResponse:
|
|
15
|
+
"""List persisted Projects visible to the current Project scope.
|
|
16
|
+
|
|
17
|
+
Returns:
|
|
18
|
+
ProjectsResponse containing Project records normalized through ProjectRecord.
|
|
19
|
+
"""
|
|
20
|
+
|
|
15
21
|
rows = list_projects()
|
|
16
22
|
return ProjectsResponse(projects=[ProjectRecord.model_validate(row) for row in rows])
|
|
17
23
|
|
|
18
24
|
|
|
19
25
|
@router.put("/projects/{project_id}", response_model=ProjectRecord)
|
|
20
26
|
async def upsert_project_record(project_id: str, req: ProjectUpsertRequest) -> ProjectRecord:
|
|
27
|
+
"""Create or update a persisted Project record.
|
|
28
|
+
|
|
29
|
+
Args:
|
|
30
|
+
project_id: Stable Project identifier from the route path.
|
|
31
|
+
req: Request body carrying the Project name and lifecycle status.
|
|
32
|
+
|
|
33
|
+
Returns:
|
|
34
|
+
ProjectRecord containing the stored Project row after the upsert.
|
|
35
|
+
"""
|
|
36
|
+
|
|
21
37
|
row = upsert_project(
|
|
22
38
|
project_id=project_id,
|
|
23
39
|
project_name=req.project_name,
|
|
@@ -12,7 +12,7 @@ from flare_kernel.contracts import (
|
|
|
12
12
|
SessionRecord,
|
|
13
13
|
SessionUpdateRequest,
|
|
14
14
|
)
|
|
15
|
-
from flare_kernel.router.
|
|
15
|
+
from flare_kernel.router.api.errors import ApiError
|
|
16
16
|
from flare_kernel.session_store import (
|
|
17
17
|
append_exchange,
|
|
18
18
|
create_session,
|
|
@@ -116,6 +116,12 @@ async def append_chat_session_exchange(session_id: str, req: SessionAppendExchan
|
|
|
116
116
|
sourcing_candidates=req.sourcing_candidates,
|
|
117
117
|
knowledge_citation=req.knowledge_citation,
|
|
118
118
|
context_usage=req.context_usage,
|
|
119
|
+
plan_payload=req.plan_payload,
|
|
120
|
+
reasoning_result=req.reasoning_result,
|
|
121
|
+
document_result=req.document_result,
|
|
122
|
+
track_result=req.track_result,
|
|
123
|
+
context_patch=req.context_patch,
|
|
124
|
+
context_snapshot=req.context_snapshot,
|
|
119
125
|
)
|
|
120
126
|
return SessionRecord.model_validate(row or _require_session_or_404(session_id))
|
|
121
127
|
|
|
@@ -15,13 +15,13 @@ from __future__ import annotations
|
|
|
15
15
|
from typing import Any, Callable
|
|
16
16
|
|
|
17
17
|
from flare_kernel.contracts import KernelRequest
|
|
18
|
-
from flare_kernel.router.canonical.
|
|
18
|
+
from flare_kernel.router.canonical.context.analysis import (
|
|
19
19
|
build_canonical_state_context_output,
|
|
20
20
|
)
|
|
21
|
-
from flare_kernel.router.canonical.
|
|
21
|
+
from flare_kernel.router.canonical.context.inputs import (
|
|
22
22
|
resolve_canonical_state_context_inputs,
|
|
23
23
|
)
|
|
24
|
-
from flare_kernel.router.canonical.
|
|
24
|
+
from flare_kernel.router.canonical.context.session import (
|
|
25
25
|
resolve_canonical_state_context_session,
|
|
26
26
|
)
|
|
27
27
|
|
|
@@ -5,10 +5,10 @@ from __future__ import annotations
|
|
|
5
5
|
from typing import Any, Callable
|
|
6
6
|
|
|
7
7
|
from flare_kernel.contracts import KernelRequest
|
|
8
|
-
from flare_kernel.router.canonical.
|
|
8
|
+
from flare_kernel.router.canonical.flow import (
|
|
9
9
|
resolve_analysis_generation_state,
|
|
10
10
|
)
|
|
11
|
-
from flare_kernel.router.canonical.
|
|
11
|
+
from flare_kernel.router.canonical.projection import (
|
|
12
12
|
build_checkpoint_projection,
|
|
13
13
|
build_next_actions_projection,
|
|
14
14
|
resolve_analysis_readiness_metrics,
|