flare-kernel 0.2.4__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.
Files changed (541) hide show
  1. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/PKG-INFO +3 -2
  2. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/README.md +2 -1
  3. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/pyproject.toml +1 -1
  4. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/src/flare_kernel/app.py +3 -2
  5. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/src/flare_kernel/contracts/__init__.py +4 -0
  6. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/src/flare_kernel/contracts/context.py +30 -1
  7. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/src/flare_kernel/contracts/kernel_contract.py +17 -2
  8. flare_kernel-0.2.5/src/flare_kernel/contracts/project_contract.py +49 -0
  9. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/src/flare_kernel/contracts/session_contract.py +10 -0
  10. flare_kernel-0.2.5/src/flare_kernel/project_store.py +249 -0
  11. flare_kernel-0.2.5/src/flare_kernel/router/__init__.py +17 -0
  12. flare_kernel-0.2.5/src/flare_kernel/router/api/__init__.py +0 -0
  13. flare_kernel-0.2.5/src/flare_kernel/router/api/chat.py +29 -0
  14. flare_kernel-0.2.4/src/flare_kernel/router/project_api.py → flare_kernel-0.2.5/src/flare_kernel/router/api/project.py +16 -0
  15. flare_kernel-0.2.4/src/flare_kernel/router/session_api.py → flare_kernel-0.2.5/src/flare_kernel/router/api/session.py +7 -1
  16. flare_kernel-0.2.4/src/flare_kernel/router/canonical/canonical_state_context.py → flare_kernel-0.2.5/src/flare_kernel/router/canonical/context/__init__.py +3 -3
  17. flare_kernel-0.2.4/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
  18. flare_kernel-0.2.4/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
  19. flare_kernel-0.2.4/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
  20. flare_kernel-0.2.5/src/flare_kernel/router/canonical/contract_support.py +102 -0
  21. flare_kernel-0.2.4/src/flare_kernel/router/canonical/canonical_state_flow.py → flare_kernel-0.2.5/src/flare_kernel/router/canonical/flow.py +4 -4
  22. flare_kernel-0.2.4/src/flare_kernel/router/canonical/canonical_state_payload.py → flare_kernel-0.2.5/src/flare_kernel/router/canonical/payload.py +127 -35
  23. flare_kernel-0.2.4/src/flare_kernel/router/canonical/canonical_state_projection.py → flare_kernel-0.2.5/src/flare_kernel/router/canonical/projection.py +2 -2
  24. flare_kernel-0.2.5/src/flare_kernel/router/completion/__init__.py +0 -0
  25. flare_kernel-0.2.5/src/flare_kernel/router/completion/guided.py +249 -0
  26. flare_kernel-0.2.4/src/flare_kernel/router/completion_response_builder.py → flare_kernel-0.2.5/src/flare_kernel/router/completion/response_builder.py +33 -3
  27. flare_kernel-0.2.4/src/flare_kernel/router/completion_selection.py → flare_kernel-0.2.5/src/flare_kernel/router/completion/selection.py +13 -7
  28. flare_kernel-0.2.5/src/flare_kernel/router/context/__init__.py +0 -0
  29. flare_kernel-0.2.5/src/flare_kernel/router/intake/__init__.py +54 -0
  30. flare_kernel-0.2.4/src/flare_kernel/router/intake/intake_amount_quantity.py → flare_kernel-0.2.5/src/flare_kernel/router/intake/amount_quantity.py +1 -1
  31. flare_kernel-0.2.5/src/flare_kernel/router/intake/authority/__init__.py +19 -0
  32. flare_kernel-0.2.4/src/flare_kernel/router/intake/intake_authority.py → flare_kernel-0.2.5/src/flare_kernel/router/intake/authority/core.py +8 -4
  33. flare_kernel-0.2.4/src/flare_kernel/router/intake/intake_authority_hydration.py → flare_kernel-0.2.5/src/flare_kernel/router/intake/authority/hydration.py +11 -3
  34. flare_kernel-0.2.4/src/flare_kernel/router/intake/intake_canonicalization.py → flare_kernel-0.2.5/src/flare_kernel/router/intake/canonicalization.py +4 -4
  35. flare_kernel-0.2.4/src/flare_kernel/router/intake/intake_clarification.py → flare_kernel-0.2.5/src/flare_kernel/router/intake/clarification.py +1 -1
  36. flare_kernel-0.2.4/src/flare_kernel/router/intake/intake_decision_rules.py → flare_kernel-0.2.5/src/flare_kernel/router/intake/decision_rules.py +0 -56
  37. flare_kernel-0.2.4/src/flare_kernel/router/intake/intake_deployment_delivery.py → flare_kernel-0.2.5/src/flare_kernel/router/intake/deployment_delivery.py +1 -1
  38. flare_kernel-0.2.5/src/flare_kernel/router/intake/extraction/__init__.py +31 -0
  39. flare_kernel-0.2.4/src/flare_kernel/router/intake/intake_extraction.py → flare_kernel-0.2.5/src/flare_kernel/router/intake/extraction/core.py +2 -2
  40. flare_kernel-0.2.4/src/flare_kernel/router/intake/intake_extraction_extractors.py → flare_kernel-0.2.5/src/flare_kernel/router/intake/extraction/extractors.py +1 -1
  41. flare_kernel-0.2.5/src/flare_kernel/router/intake/field_projection/__init__.py +21 -0
  42. flare_kernel-0.2.4/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
  43. flare_kernel-0.2.4/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
  44. flare_kernel-0.2.4/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
  45. flare_kernel-0.2.5/src/flare_kernel/router/intake/guided/__init__.py +27 -0
  46. flare_kernel-0.2.4/src/flare_kernel/router/intake/intake_guided_followup.py → flare_kernel-0.2.5/src/flare_kernel/router/intake/guided/followup.py +1 -1
  47. flare_kernel-0.2.4/src/flare_kernel/router/intake/intake_guided_status.py → flare_kernel-0.2.5/src/flare_kernel/router/intake/guided/status.py +1 -1
  48. flare_kernel-0.2.5/src/flare_kernel/router/intake/status/__init__.py +43 -0
  49. flare_kernel-0.2.4/src/flare_kernel/router/intake/intake_status.py → flare_kernel-0.2.5/src/flare_kernel/router/intake/status/core.py +3 -3
  50. flare_kernel-0.2.5/src/flare_kernel/router/intake/status/guided_session.py +20 -0
  51. flare_kernel-0.2.4/src/flare_kernel/router/intake/intake_status_projection.py → flare_kernel-0.2.5/src/flare_kernel/router/intake/status/projection.py +1 -1
  52. flare_kernel-0.2.5/src/flare_kernel/router/intent/__init__.py +23 -0
  53. flare_kernel-0.2.4/src/flare_kernel/router/intent/intent_classifier_utils.py → flare_kernel-0.2.5/src/flare_kernel/router/intent/classifier_utils.py +5 -5
  54. flare_kernel-0.2.5/src/flare_kernel/router/intent/escalation/__init__.py +1 -0
  55. flare_kernel-0.2.4/src/flare_kernel/router/intent/intent_escalation_pipeline.py → flare_kernel-0.2.5/src/flare_kernel/router/intent/escalation/pipeline.py +2 -2
  56. flare_kernel-0.2.4/src/flare_kernel/router/intent/intent_routing.py → flare_kernel-0.2.5/src/flare_kernel/router/intent/routing.py +20 -1
  57. flare_kernel-0.2.5/src/flare_kernel/router/intent/session_intent/__init__.py +23 -0
  58. flare_kernel-0.2.4/src/flare_kernel/router/intent/session_intent.py → flare_kernel-0.2.5/src/flare_kernel/router/intent/session_intent/core.py +2 -2
  59. flare_kernel-0.2.4/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
  60. flare_kernel-0.2.5/src/flare_kernel/router/kernel.py +303 -0
  61. flare_kernel-0.2.4/src/flare_kernel/router/kernel_constants.py → flare_kernel-0.2.5/src/flare_kernel/router/kernel_constants/__init__.py +3 -3
  62. flare_kernel-0.2.4/src/flare_kernel/router/kernel_constants_intent.py → flare_kernel-0.2.5/src/flare_kernel/router/kernel_constants/intent.py +1 -1
  63. flare_kernel-0.2.4/src/flare_kernel/router/kernel_constants_patch.py → flare_kernel-0.2.5/src/flare_kernel/router/kernel_constants/patch.py +4 -0
  64. flare_kernel-0.2.4/src/flare_kernel/router/kernel_endpoint_handlers.py → flare_kernel-0.2.5/src/flare_kernel/router/kernel_endpoint_handlers/__init__.py +4 -4
  65. flare_kernel-0.2.4/src/flare_kernel/router/kernel_endpoint_handlers_sourcing.py → flare_kernel-0.2.5/src/flare_kernel/router/kernel_endpoint_handlers/sourcing.py +2 -0
  66. flare_kernel-0.2.4/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
  67. flare_kernel-0.2.5/src/flare_kernel/router/kernel_facade/__init__.py +0 -0
  68. flare_kernel-0.2.4/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
  69. flare_kernel-0.2.4/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
  70. flare_kernel-0.2.4/src/flare_kernel/router/kernel_facade_turn_context.py → flare_kernel-0.2.5/src/flare_kernel/router/kernel_facade/flow.py +36 -9
  71. flare_kernel-0.2.4/src/flare_kernel/router/kernel_facade_orchestration_wrappers.py → flare_kernel-0.2.5/src/flare_kernel/router/kernel_facade/orchestration.py +123 -23
  72. flare_kernel-0.2.4/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
  73. flare_kernel-0.2.4/src/flare_kernel/router/kernel_facade_turn_context_wrapper.py → flare_kernel-0.2.5/src/flare_kernel/router/kernel_facade/turn_context.py +47 -50
  74. flare_kernel-0.2.5/src/flare_kernel/router/kernel_flow_bindings/__init__.py +0 -0
  75. flare_kernel-0.2.4/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
  76. flare_kernel-0.2.4/src/flare_kernel/router/kernel_mode_flow.py → flare_kernel-0.2.5/src/flare_kernel/router/kernel_flow_bindings/mode.py +1 -1
  77. flare_kernel-0.2.4/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
  78. flare_kernel-0.2.5/src/flare_kernel/router/kernel_request_pipeline/__init__.py +0 -0
  79. flare_kernel-0.2.4/src/flare_kernel/router/kernel_request_flow_action.py → flare_kernel-0.2.5/src/flare_kernel/router/kernel_request_pipeline/action.py +6 -6
  80. flare_kernel-0.2.4/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
  81. flare_kernel-0.2.4/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
  82. flare_kernel-0.2.4/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
  83. flare_kernel-0.2.5/src/flare_kernel/router/kernel_route/__init__.py +0 -0
  84. flare_kernel-0.2.4/src/flare_kernel/router/kernel_route_action.py → flare_kernel-0.2.5/src/flare_kernel/router/kernel_route/action.py +2 -2
  85. flare_kernel-0.2.4/src/flare_kernel/router/kernel_route_execution.py → flare_kernel-0.2.5/src/flare_kernel/router/kernel_route/execution.py +3 -3
  86. flare_kernel-0.2.4/src/flare_kernel/router/kernel_route_run.py → flare_kernel-0.2.5/src/flare_kernel/router/kernel_route/run.py +4 -4
  87. flare_kernel-0.2.4/src/flare_kernel/router/kernel_route_stream.py → flare_kernel-0.2.5/src/flare_kernel/router/kernel_route/stream.py +4 -4
  88. flare_kernel-0.2.5/src/flare_kernel/router/mode/__init__.py +0 -0
  89. flare_kernel-0.2.4/src/flare_kernel/router/mode_resolution.py → flare_kernel-0.2.5/src/flare_kernel/router/mode/resolution.py +3 -0
  90. flare_kernel-0.2.5/src/flare_kernel/router/orchestration/__init__.py +38 -0
  91. flare_kernel-0.2.5/src/flare_kernel/router/orchestration/status/__init__.py +2 -0
  92. flare_kernel-0.2.5/src/flare_kernel/router/orchestration/status/actions.py +89 -0
  93. flare_kernel-0.2.4/src/flare_kernel/router/orchestration/orchestration_status_builder.py → flare_kernel-0.2.5/src/flare_kernel/router/orchestration/status/builder.py +3 -3
  94. flare_kernel-0.2.4/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
  95. flare_kernel-0.2.4/src/flare_kernel/router/orchestration/orchestration_status_context.py → flare_kernel-0.2.5/src/flare_kernel/router/orchestration/status/context.py +6 -6
  96. flare_kernel-0.2.4/src/flare_kernel/router/orchestration/orchestration_status_state.py → flare_kernel-0.2.5/src/flare_kernel/router/orchestration/status/core.py +7 -7
  97. flare_kernel-0.2.4/src/flare_kernel/router/orchestration/orchestration_status_decision.py → flare_kernel-0.2.5/src/flare_kernel/router/orchestration/status/decision.py +2 -2
  98. flare_kernel-0.2.4/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
  99. flare_kernel-0.2.4/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
  100. flare_kernel-0.2.5/src/flare_kernel/router/orchestration/status/state/__init__.py +2 -0
  101. flare_kernel-0.2.4/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
  102. flare_kernel-0.2.5/src/flare_kernel/router/orchestration/trace/__init__.py +1 -0
  103. flare_kernel-0.2.4/src/flare_kernel/router/orchestration/orchestration_trace.py → flare_kernel-0.2.5/src/flare_kernel/router/orchestration/trace/core.py +2 -2
  104. flare_kernel-0.2.4/src/flare_kernel/router/orchestration/orchestration_trace_steps.py → flare_kernel-0.2.5/src/flare_kernel/router/orchestration/trace/steps.py +5 -0
  105. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/src/flare_kernel/router/patch_contract.py +3 -1
  106. flare_kernel-0.2.5/src/flare_kernel/router/payload/__init__.py +0 -0
  107. flare_kernel-0.2.4/src/flare_kernel/router/action_payload.py → flare_kernel-0.2.5/src/flare_kernel/router/payload/action.py +0 -14
  108. flare_kernel-0.2.5/src/flare_kernel/router/prompting/__init__.py +5 -0
  109. flare_kernel-0.2.5/src/flare_kernel/router/prompting/context_blocks.py +129 -0
  110. flare_kernel-0.2.4/src/flare_kernel/router/prompting.py → flare_kernel-0.2.5/src/flare_kernel/router/prompting/core.py +71 -9
  111. flare_kernel-0.2.5/src/flare_kernel/router/prompting/response_strategy.py +35 -0
  112. flare_kernel-0.2.5/src/flare_kernel/router/request/__init__.py +0 -0
  113. flare_kernel-0.2.4/src/flare_kernel/router/request_intent_resolution.py → flare_kernel-0.2.5/src/flare_kernel/router/request/intent_resolution.py +2 -0
  114. flare_kernel-0.2.5/src/flare_kernel/router/retrieval/__init__.py +20 -0
  115. flare_kernel-0.2.4/src/flare_kernel/router/retrieval/retrieval_aliases.py → flare_kernel-0.2.5/src/flare_kernel/router/retrieval/aliases.py +54 -8
  116. flare_kernel-0.2.4/src/flare_kernel/router/retrieval/retrieval_query_builder.py → flare_kernel-0.2.5/src/flare_kernel/router/retrieval/query_builder.py +1 -1
  117. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/src/flare_kernel/router/source_library.py +34 -1
  118. flare_kernel-0.2.5/src/flare_kernel/router/streaming/draft/__init__.py +0 -0
  119. flare_kernel-0.2.4/src/flare_kernel/router/streaming/streaming_draft_completion.py → flare_kernel-0.2.5/src/flare_kernel/router/streaming/draft/completion.py +14 -1
  120. flare_kernel-0.2.4/src/flare_kernel/router/streaming/streaming_draft_finalize.py → flare_kernel-0.2.5/src/flare_kernel/router/streaming/draft/finalize.py +63 -7
  121. flare_kernel-0.2.4/src/flare_kernel/router/streaming/streaming_draft_phase.py → flare_kernel-0.2.5/src/flare_kernel/router/streaming/draft/phase.py +6 -6
  122. flare_kernel-0.2.4/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
  123. flare_kernel-0.2.4/src/flare_kernel/router/streaming/streaming_draft_post_completion.py → flare_kernel-0.2.5/src/flare_kernel/router/streaming/draft/post_completion.py +12 -15
  124. flare_kernel-0.2.4/src/flare_kernel/router/streaming/streaming_draft_prologue.py → flare_kernel-0.2.5/src/flare_kernel/router/streaming/draft/prologue.py +1 -1
  125. flare_kernel-0.2.5/src/flare_kernel/router/streaming/intake/__init__.py +0 -0
  126. flare_kernel-0.2.4/src/flare_kernel/router/streaming/streaming_intake_phase.py → flare_kernel-0.2.5/src/flare_kernel/router/streaming/intake/phase.py +9 -0
  127. flare_kernel-0.2.5/src/flare_kernel/router/streaming/mode/__init__.py +0 -0
  128. flare_kernel-0.2.4/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
  129. flare_kernel-0.2.4/src/flare_kernel/router/streaming/streaming_mode_events.py → flare_kernel-0.2.5/src/flare_kernel/router/streaming/mode/events.py +9 -6
  130. flare_kernel-0.2.5/src/flare_kernel/router/streaming/response/__init__.py +0 -0
  131. flare_kernel-0.2.4/src/flare_kernel/router/streaming/streaming_response_builder.py → flare_kernel-0.2.5/src/flare_kernel/router/streaming/response/builder.py +3 -3
  132. flare_kernel-0.2.4/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
  133. flare_kernel-0.2.5/src/flare_kernel/router/streaming/response/draft_phase.py +95 -0
  134. flare_kernel-0.2.4/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
  135. flare_kernel-0.2.4/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
  136. flare_kernel-0.2.4/src/flare_kernel/router/streaming/streaming_response_runtime.py → flare_kernel-0.2.5/src/flare_kernel/router/streaming/response/runtime.py +4 -1
  137. flare_kernel-0.2.5/src/flare_kernel/router/streaming/retrieval/__init__.py +0 -0
  138. flare_kernel-0.2.5/src/flare_kernel/router/streaming/runtime/__init__.py +0 -0
  139. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/src/flare_kernel/runtime/__init__.py +5 -39
  140. flare_kernel-0.2.5/src/flare_kernel/runtime/context/__init__.py +13 -0
  141. flare_kernel-0.2.5/src/flare_kernel/runtime/context/document_application.py +66 -0
  142. flare_kernel-0.2.5/src/flare_kernel/runtime/context/reasoning_application.py +98 -0
  143. flare_kernel-0.2.5/src/flare_kernel/runtime/context/session_context.py +189 -0
  144. flare_kernel-0.2.5/src/flare_kernel/runtime/context/track_application.py +44 -0
  145. flare_kernel-0.2.5/src/flare_kernel/runtime/infrastructure/__init__.py +26 -0
  146. flare_kernel-0.2.5/src/flare_kernel/runtime/infrastructure/chat_memory.py +129 -0
  147. flare_kernel-0.2.5/src/flare_kernel/runtime/infrastructure/database.py +26 -0
  148. flare_kernel-0.2.5/src/flare_kernel/runtime/infrastructure/dependency_status.py +70 -0
  149. flare_kernel-0.2.5/src/flare_kernel/runtime/infrastructure/infrastructure.py +114 -0
  150. flare_kernel-0.2.5/src/flare_kernel/runtime/infrastructure/knowledge_ingest.py +239 -0
  151. flare_kernel-0.2.5/src/flare_kernel/runtime/infrastructure/knowledge_memory.py +82 -0
  152. flare_kernel-0.2.5/src/flare_kernel/runtime/infrastructure/knowledge_postgres_search.py +251 -0
  153. flare_kernel-0.2.5/src/flare_kernel/runtime/infrastructure/knowledge_qdrant_search.py +126 -0
  154. flare_kernel-0.2.5/src/flare_kernel/runtime/infrastructure/knowledge_search.py +93 -0
  155. flare_kernel-0.2.5/src/flare_kernel/runtime/infrastructure/knowledge_terms.py +83 -0
  156. flare_kernel-0.2.5/src/flare_kernel/runtime/infrastructure/project_memory_sql.py +66 -0
  157. flare_kernel-0.2.5/src/flare_kernel/runtime/infrastructure/project_memory_store.py +256 -0
  158. flare_kernel-0.2.5/src/flare_kernel/runtime/infrastructure/redis_client.py +26 -0
  159. flare_kernel-0.2.5/src/flare_kernel/runtime/infrastructure/session/__init__.py +1 -0
  160. flare_kernel-0.2.5/src/flare_kernel/runtime/infrastructure/session/repository.py +23 -0
  161. flare_kernel-0.2.5/src/flare_kernel/runtime/infrastructure/session/repository_memory.py +64 -0
  162. flare_kernel-0.2.5/src/flare_kernel/runtime/infrastructure/source/__init__.py +1 -0
  163. flare_kernel-0.2.5/src/flare_kernel/runtime/infrastructure/sourcing/__init__.py +1 -0
  164. flare_kernel-0.2.4/src/flare_kernel/runtime/infrastructure/sourcing_provider.py → flare_kernel-0.2.5/src/flare_kernel/runtime/infrastructure/sourcing/provider.py +1 -89
  165. flare_kernel-0.2.5/src/flare_kernel/runtime/infrastructure/vector_store.py +65 -0
  166. flare_kernel-0.2.5/src/flare_kernel/runtime/orchestration/__init__.py +30 -0
  167. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/src/flare_kernel/runtime/orchestration/decision_engine.py +0 -76
  168. flare_kernel-0.2.5/src/flare_kernel/runtime/orchestration/mode/__init__.py +1 -0
  169. flare_kernel-0.2.4/src/flare_kernel/runtime/orchestration/mode_orchestration.py → flare_kernel-0.2.5/src/flare_kernel/runtime/orchestration/mode/orchestration.py +24 -334
  170. flare_kernel-0.2.5/src/flare_kernel/runtime/orchestration/mode/plan/__init__.py +1 -0
  171. flare_kernel-0.2.5/src/flare_kernel/runtime/orchestration/mode/plan/canvas.py +321 -0
  172. flare_kernel-0.2.5/src/flare_kernel/runtime/orchestration/mode/plan/core.py +399 -0
  173. flare_kernel-0.2.5/src/flare_kernel/runtime/orchestration/mode/plan/followup.py +137 -0
  174. flare_kernel-0.2.5/src/flare_kernel/runtime/orchestration/mode/plan/payload.py +125 -0
  175. flare_kernel-0.2.5/src/flare_kernel/runtime/orchestration/mode/plan/question.py +164 -0
  176. flare_kernel-0.2.5/src/flare_kernel/runtime/orchestration/mode/plan/question_steps.py +247 -0
  177. flare_kernel-0.2.5/src/flare_kernel/runtime/orchestration/mode/plan/session.py +134 -0
  178. flare_kernel-0.2.4/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
  179. flare_kernel-0.2.5/src/flare_kernel/runtime/orchestration/mode/plan/summary.py +77 -0
  180. flare_kernel-0.2.5/src/flare_kernel/runtime/orchestration/mode/plan/trace.py +175 -0
  181. flare_kernel-0.2.5/src/flare_kernel/runtime/orchestration/mode/reasoning.py +45 -0
  182. flare_kernel-0.2.4/src/flare_kernel/runtime/orchestration/mode_runtime.py → flare_kernel-0.2.5/src/flare_kernel/runtime/orchestration/mode/runtime.py +42 -1
  183. flare_kernel-0.2.5/src/flare_kernel/runtime/orchestration/mode_orchestration_plan_question.py +132 -0
  184. flare_kernel-0.2.5/src/flare_kernel/runtime/orchestration/mode_orchestration_plan_question_steps.py +98 -0
  185. flare_kernel-0.2.5/src/flare_kernel/runtime/orchestration/observation.py +117 -0
  186. flare_kernel-0.2.5/src/flare_kernel/runtime/orchestration/response_strategy_runtime.py +52 -0
  187. flare_kernel-0.2.5/src/flare_kernel/runtime/orchestration/session_context_runtime.py +21 -0
  188. flare_kernel-0.2.5/src/flare_kernel/runtime/orchestration/sourcing/__init__.py +1 -0
  189. flare_kernel-0.2.4/src/flare_kernel/runtime/orchestration/sourcing_search_runtime.py → flare_kernel-0.2.5/src/flare_kernel/runtime/orchestration/sourcing/search_runtime.py +38 -2
  190. flare_kernel-0.2.5/src/flare_kernel/runtime/orchestration/structured_reasoning.py +297 -0
  191. flare_kernel-0.2.5/src/flare_kernel/runtime/orchestration/track_runtime.py +64 -0
  192. flare_kernel-0.2.5/src/flare_kernel/runtime/reasoning/intake/__init__.py +38 -0
  193. flare_kernel-0.2.4/src/flare_kernel/runtime/reasoning/intake_reasoning.py → flare_kernel-0.2.5/src/flare_kernel/runtime/reasoning/intake/api.py +5 -5
  194. flare_kernel-0.2.5/src/flare_kernel/runtime/reasoning/intake/branching/__init__.py +1 -0
  195. flare_kernel-0.2.4/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
  196. flare_kernel-0.2.5/src/flare_kernel/runtime/reasoning/intake/branching/policy.py +72 -0
  197. flare_kernel-0.2.4/src/flare_kernel/runtime/reasoning/intake_reasoning_context.py → flare_kernel-0.2.5/src/flare_kernel/runtime/reasoning/intake/context.py +20 -39
  198. flare_kernel-0.2.5/src/flare_kernel/runtime/reasoning/intake/field_selection.py +177 -0
  199. flare_kernel-0.2.5/src/flare_kernel/runtime/reasoning/intake/gap_detection.py +204 -0
  200. flare_kernel-0.2.4/src/flare_kernel/runtime/reasoning/intake_reasoning_hypothesis.py → flare_kernel-0.2.5/src/flare_kernel/runtime/reasoning/intake/hypothesis.py +1 -1
  201. flare_kernel-0.2.5/src/flare_kernel/runtime/reasoning/intake/planning.py +17 -0
  202. flare_kernel-0.2.4/src/flare_kernel/runtime/reasoning/intake_reasoning_priority.py → flare_kernel-0.2.5/src/flare_kernel/runtime/reasoning/intake/priority.py +1 -1
  203. flare_kernel-0.2.5/src/flare_kernel/runtime/reasoning/intake/question/__init__.py +1 -0
  204. flare_kernel-0.2.5/src/flare_kernel/runtime/reasoning/intake/question/builder.py +72 -0
  205. flare_kernel-0.2.4/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
  206. flare_kernel-0.2.5/src/flare_kernel/runtime/reasoning/intake/question/planner.py +301 -0
  207. flare_kernel-0.2.5/src/flare_kernel/runtime/reasoning/intake/readiness/__init__.py +1 -0
  208. flare_kernel-0.2.5/src/flare_kernel/runtime/reasoning/intake/readiness/core.py +17 -0
  209. flare_kernel-0.2.5/src/flare_kernel/runtime/reasoning/intake/readiness/scoring.py +192 -0
  210. flare_kernel-0.2.5/src/flare_kernel/runtime/reasoning/intake/shared.py +104 -0
  211. flare_kernel-0.2.5/src/flare_kernel/runtime/reasoning/intake/understanding_state.py +197 -0
  212. flare_kernel-0.2.5/src/flare_kernel/runtime/reasoning/intake/visible_response.py +66 -0
  213. flare_kernel-0.2.5/src/flare_kernel/runtime/source_ingestion/__init__.py +7 -0
  214. flare_kernel-0.2.5/src/flare_kernel/runtime/source_ingestion/artifacts.py +53 -0
  215. flare_kernel-0.2.5/src/flare_kernel/runtime/source_ingestion/chunk_storage.py +175 -0
  216. flare_kernel-0.2.5/src/flare_kernel/runtime/source_ingestion/knowledge_storage.py +212 -0
  217. flare_kernel-0.2.5/src/flare_kernel/runtime/source_ingestion/runtime.py +135 -0
  218. flare_kernel-0.2.5/src/flare_kernel/runtime/source_ingestion/storage.py +17 -0
  219. flare_kernel-0.2.5/src/flare_kernel/session_record_policy.py +108 -0
  220. flare_kernel-0.2.5/src/flare_kernel/session_store.py +279 -0
  221. flare_kernel-0.2.5/src/flare_kernel/user_store.py +107 -0
  222. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/src/flare_kernel.egg-info/PKG-INFO +3 -2
  223. flare_kernel-0.2.5/src/flare_kernel.egg-info/SOURCES.txt +471 -0
  224. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_action_payload.py +3 -3
  225. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_analysis_canvas_payload.py +1 -1
  226. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_analysis_route_projection.py +4 -4
  227. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_basics.py +13 -0
  228. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_builder_split_modules.py +17 -17
  229. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_business_hardcode_guard.py +8 -8
  230. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_canonical_state_context_analysis.py +1 -1
  231. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_canonical_state_context_inputs.py +1 -1
  232. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_canonical_state_context_session.py +1 -1
  233. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_canonical_state_flow.py +1 -1
  234. flare_kernel-0.2.5/tests/test_canonical_state_payload.py +306 -0
  235. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_canonical_state_projection.py +1 -1
  236. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_canvas_sourcing_contract_meta.py +1 -1
  237. flare_kernel-0.2.5/tests/test_chat_api_alias.py +24 -0
  238. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_command_resolution_analysis_mode.py +2 -6
  239. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_completion_response_builder.py +49 -1
  240. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_completion_selection.py +1 -1
  241. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_decision_engine.py +0 -30
  242. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_endpoint_context.py +1 -1
  243. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_flare_v1_patch_contract.py +46 -0
  244. flare_kernel-0.2.5/tests/test_guided_completion.py +137 -0
  245. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_intake_amount_quantity.py +1 -1
  246. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_intake_answer.py +1 -1
  247. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_intake_authority.py +1 -1
  248. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_intake_authority_checkpoint.py +1 -1
  249. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_intake_authority_hydration.py +3 -3
  250. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_intake_authority_session.py +1 -1
  251. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_intake_canonicalization.py +1 -1
  252. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_intake_clarification.py +1 -1
  253. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_intake_decision_rules.py +1 -38
  254. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_intake_deployment_delivery.py +1 -1
  255. flare_kernel-0.2.5/tests/test_intake_domain_context_options.py +30 -0
  256. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_intake_entry_policy.py +1 -1
  257. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_intake_extraction.py +1 -1
  258. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_intake_extraction_extractors.py +1 -1
  259. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_intake_extraction_merge.py +1 -1
  260. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_intake_field_projection.py +1 -1
  261. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_intake_field_projection_entity.py +1 -1
  262. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_intake_field_projection_payload.py +1 -1
  263. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_intake_field_projection_source.py +1 -1
  264. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_intake_field_scope.py +1 -1
  265. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_intake_guided_confirmed_updates.py +1 -1
  266. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_intake_guided_flags.py +1 -1
  267. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_intake_guided_followup.py +1 -1
  268. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_intake_guided_followup_work_item.py +1 -1
  269. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_intake_guided_open_fields.py +1 -1
  270. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_intake_guided_status.py +1 -1
  271. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_intake_guided_summary.py +1 -1
  272. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_intake_inputs.py +1 -1
  273. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_intake_node_state.py +1 -1
  274. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_intake_numeric.py +1 -1
  275. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_intake_payload_updates.py +1 -1
  276. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_intake_readiness.py +1 -1
  277. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_intake_reasoning_priority.py +1 -1
  278. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_intake_state_persistence.py +1 -1
  279. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_intake_status.py +1 -1
  280. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_intake_status_guided_session.py +1 -1
  281. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_intake_status_projection.py +1 -1
  282. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_intake_status_schema.py +1 -1
  283. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_intake_status_stage.py +1 -1
  284. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_intake_workflow_checkpoint.py +1 -1
  285. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_intent_classifier_utils.py +1 -1
  286. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_intent_escalation_override.py +1 -1
  287. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_intent_escalation_pipeline.py +2 -2
  288. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_intent_escalation_signal.py +1 -1
  289. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_intent_resolution.py +70 -16
  290. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_intent_retrieval.py +14 -15
  291. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_intent_routing.py +32 -1
  292. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_kernel_alias_delegation.py +5 -5
  293. flare_kernel-0.2.5/tests/test_kernel_endpoint_handlers.py +270 -0
  294. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_kernel_endpoint_handlers_sourcing.py +1 -1
  295. flare_kernel-0.2.5/tests/test_kernel_facade_turn_context.py +301 -0
  296. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_kernel_intent_query_flow.py +1 -1
  297. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_kernel_mode_flow.py +1 -1
  298. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_kernel_route_execution_wrappers.py +1 -1
  299. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_kernel_session_intent_flow.py +1 -1
  300. flare_kernel-0.2.5/tests/test_mode_orchestration_plan_canvas_saved_content.py +28 -0
  301. flare_kernel-0.2.5/tests/test_mode_orchestration_plan_finalize.py +725 -0
  302. flare_kernel-0.2.5/tests/test_mode_orchestration_plan_runtime_payload.py +26 -0
  303. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_mode_orchestration_state_bridge.py +4 -5
  304. flare_kernel-0.2.5/tests/test_mode_reasoning.py +21 -0
  305. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_mode_resolution.py +1 -1
  306. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_mode_switch.py +1 -1
  307. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_new_flow_guard.py +3 -3
  308. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_orchestration_checkpoint_state.py +1 -1
  309. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_orchestration_followup_state.py +1 -1
  310. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_orchestration_status_context.py +1 -1
  311. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_orchestration_status_context_helpers.py +1 -1
  312. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_orchestration_status_decision.py +1 -1
  313. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_orchestration_status_projection.py +1 -1
  314. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_orchestration_status_result.py +1 -1
  315. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_orchestration_status_runtime_state.py +1 -1
  316. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_orchestration_status_state_context.py +1 -1
  317. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_orchestration_status_state_decision.py +1 -1
  318. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_orchestration_status_state_entry.py +1 -1
  319. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_orchestration_status_state_followup.py +1 -1
  320. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_orchestration_status_state_intent.py +1 -1
  321. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_orchestration_status_state_node.py +1 -1
  322. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_orchestration_status_state_payload.py +1 -1
  323. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_orchestration_status_state_unpack.py +1 -1
  324. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_orchestration_trace.py +1 -1
  325. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_orchestration_trace_projection.py +1 -1
  326. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_orchestration_trace_steps.py +1 -1
  327. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_patch_contract.py +3 -0
  328. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_payload_enrichment.py +1 -1
  329. flare_kernel-0.2.5/tests/test_project_api.py +87 -0
  330. flare_kernel-0.2.5/tests/test_project_memory_store.py +137 -0
  331. flare_kernel-0.2.5/tests/test_prompting_analysis_instruction.py +147 -0
  332. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_request_identity.py +1 -1
  333. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_request_intent_resolution.py +1 -1
  334. flare_kernel-0.2.5/tests/test_response_strategy_runtime.py +46 -0
  335. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_retrieval_aliases.py +29 -2
  336. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_retrieval_field_queries.py +1 -1
  337. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_retrieval_projection.py +1 -1
  338. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_retrieval_query_builder.py +2 -2
  339. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_retrieval_search.py +2 -2
  340. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_session_api.py +73 -1
  341. flare_kernel-0.2.5/tests/test_session_context_persistence.py +219 -0
  342. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_session_intent.py +1 -1
  343. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_session_intent_fields.py +19 -2
  344. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_session_intent_small_talk.py +1 -1
  345. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_source_ingestion_runtime.py +1 -1
  346. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_source_ingestion_ssot_acceptance.py +2 -2
  347. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_source_library.py +1 -1
  348. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_source_text_extractor.py +1 -1
  349. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_sourcing_provider.py +5 -27
  350. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_sourcing_search_runtime.py +2 -2
  351. flare_kernel-0.2.5/tests/test_streaming_draft_completion.py +150 -0
  352. flare_kernel-0.2.5/tests/test_streaming_draft_finalize.py +179 -0
  353. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_streaming_draft_phase.py +3 -3
  354. flare_kernel-0.2.5/tests/test_streaming_draft_post_completion.py +348 -0
  355. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_streaming_draft_prologue.py +2 -2
  356. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_streaming_event_emitter.py +1 -1
  357. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_streaming_intake_phase.py +1 -1
  358. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_streaming_mode_event_payload.py +27 -1
  359. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_streaming_mode_events.py +35 -1
  360. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_streaming_response_bootstrap.py +2 -2
  361. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_streaming_response_phases.py +2 -2
  362. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_streaming_response_runtime.py +4 -2
  363. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_streaming_retrieval_phase.py +1 -1
  364. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_streaming_runtime_steps.py +1 -1
  365. flare_kernel-0.2.5/tests/test_track_runtime.py +58 -0
  366. flare_kernel-0.2.4/src/flare_kernel/contracts/project_contract.py +0 -24
  367. flare_kernel-0.2.4/src/flare_kernel/project_store.py +0 -84
  368. flare_kernel-0.2.4/src/flare_kernel/router/__init__.py +0 -48
  369. flare_kernel-0.2.4/src/flare_kernel/router/canonical/canonical_state_builder.py +0 -82
  370. flare_kernel-0.2.4/src/flare_kernel/router/guided_completion.py +0 -105
  371. flare_kernel-0.2.4/src/flare_kernel/router/intake/__init__.py +0 -1
  372. flare_kernel-0.2.4/src/flare_kernel/router/intake/intake_status_guided_session.py +0 -20
  373. flare_kernel-0.2.4/src/flare_kernel/router/intent/__init__.py +0 -1
  374. flare_kernel-0.2.4/src/flare_kernel/router/intent/intent_retrieval.py +0 -107
  375. flare_kernel-0.2.4/src/flare_kernel/router/kernel.py +0 -146
  376. flare_kernel-0.2.4/src/flare_kernel/router/kernel_compat_exports.py +0 -18
  377. flare_kernel-0.2.4/src/flare_kernel/router/kernel_compat_exports_parts/__init__.py +0 -5
  378. flare_kernel-0.2.4/src/flare_kernel/router/kernel_compat_exports_parts/constants.py +0 -29
  379. flare_kernel-0.2.4/src/flare_kernel/router/kernel_compat_exports_parts/domain.py +0 -148
  380. flare_kernel-0.2.4/src/flare_kernel/router/kernel_compat_exports_parts/endpoint.py +0 -51
  381. flare_kernel-0.2.4/src/flare_kernel/router/kernel_compat_exports_parts/facade.py +0 -21
  382. flare_kernel-0.2.4/src/flare_kernel/router/kernel_compat_exports_parts/router_flow.py +0 -95
  383. flare_kernel-0.2.4/src/flare_kernel/router/kernel_compat_exports_parts/runtime.py +0 -30
  384. flare_kernel-0.2.4/src/flare_kernel/router/kernel_facade_canonical_state.py +0 -82
  385. flare_kernel-0.2.4/src/flare_kernel/router/kernel_facade_helpers.py +0 -30
  386. flare_kernel-0.2.4/src/flare_kernel/router/kernel_facade_orchestration.py +0 -121
  387. flare_kernel-0.2.4/src/flare_kernel/router/kernel_facade_payload_enrichment.py +0 -75
  388. flare_kernel-0.2.4/src/flare_kernel/router/kernel_request_flow.py +0 -769
  389. flare_kernel-0.2.4/src/flare_kernel/router/kernel_request_flow_intent.py +0 -45
  390. flare_kernel-0.2.4/src/flare_kernel/router/orchestration/__init__.py +0 -1
  391. flare_kernel-0.2.4/src/flare_kernel/router/retrieval/__init__.py +0 -1
  392. flare_kernel-0.2.4/src/flare_kernel/router/streaming/streaming_response_phases.py +0 -453
  393. flare_kernel-0.2.4/src/flare_kernel/router/turn_context_builder.py +0 -246
  394. flare_kernel-0.2.4/src/flare_kernel/runtime/infrastructure/__init__.py +0 -1
  395. flare_kernel-0.2.4/src/flare_kernel/runtime/infrastructure/infrastructure.py +0 -803
  396. flare_kernel-0.2.4/src/flare_kernel/runtime/orchestration/__init__.py +0 -1
  397. flare_kernel-0.2.4/src/flare_kernel/runtime/orchestration/canonical_mode_runtime.py +0 -344
  398. flare_kernel-0.2.4/src/flare_kernel/runtime/orchestration/decision_engine_mode_flags.py +0 -200
  399. flare_kernel-0.2.4/src/flare_kernel/runtime/orchestration/mode_orchestration_plan.py +0 -420
  400. flare_kernel-0.2.4/src/flare_kernel/runtime/orchestration/mode_orchestration_requirement.py +0 -331
  401. flare_kernel-0.2.4/src/flare_kernel/runtime/orchestration/mode_orchestration_requirement_context.py +0 -114
  402. flare_kernel-0.2.4/src/flare_kernel/runtime/orchestration/mode_orchestration_requirement_helpers.py +0 -271
  403. flare_kernel-0.2.4/src/flare_kernel/runtime/orchestration/mode_orchestration_requirement_payloads.py +0 -259
  404. flare_kernel-0.2.4/src/flare_kernel/runtime/orchestration/mode_orchestration_sourcing.py +0 -265
  405. flare_kernel-0.2.4/src/flare_kernel/runtime/orchestration/mode_orchestration_sourcing_stage.py +0 -104
  406. flare_kernel-0.2.4/src/flare_kernel/runtime/orchestration/source_ingestion_runtime.py +0 -340
  407. flare_kernel-0.2.4/src/flare_kernel/runtime/orchestration/source_ingestion_runtime_artifacts.py +0 -392
  408. flare_kernel-0.2.4/src/flare_kernel/runtime/orchestration/ssot_mode_runtime.py +0 -31
  409. flare_kernel-0.2.4/src/flare_kernel/runtime/reasoning/intake_reasoning_branching_policy.py +0 -190
  410. flare_kernel-0.2.4/src/flare_kernel/runtime/reasoning/intake_reasoning_planning.py +0 -708
  411. flare_kernel-0.2.4/src/flare_kernel/runtime/reasoning/intake_reasoning_readiness.py +0 -428
  412. flare_kernel-0.2.4/src/flare_kernel/runtime/reasoning/intake_reasoning_shared.py +0 -189
  413. flare_kernel-0.2.4/src/flare_kernel/runtime/session/checkpoint_store_sql.py +0 -98
  414. flare_kernel-0.2.4/src/flare_kernel/runtime/session/intake_session_store_query.py +0 -40
  415. flare_kernel-0.2.4/src/flare_kernel/runtime/tests/test_checkpoint_manager.py +0 -118
  416. flare_kernel-0.2.4/src/flare_kernel/runtime/tests/test_intake_reasoning.py +0 -747
  417. flare_kernel-0.2.4/src/flare_kernel/runtime/tests/test_intake_reasoning_split.py +0 -87
  418. flare_kernel-0.2.4/src/flare_kernel/runtime/tests/test_intake_session_store.py +0 -98
  419. flare_kernel-0.2.4/src/flare_kernel/runtime/tests/test_kernel_runtime.py +0 -776
  420. flare_kernel-0.2.4/src/flare_kernel/runtime/tests/test_mode_runtime_fallback.py +0 -63
  421. flare_kernel-0.2.4/src/flare_kernel/session_store.py +0 -312
  422. flare_kernel-0.2.4/src/flare_kernel.egg-info/SOURCES.txt +0 -406
  423. flare_kernel-0.2.4/tests/test_canonical_state_payload.py +0 -147
  424. flare_kernel-0.2.4/tests/test_guided_completion.py +0 -77
  425. flare_kernel-0.2.4/tests/test_kernel_endpoint_handlers.py +0 -218
  426. flare_kernel-0.2.4/tests/test_kernel_facade_turn_context.py +0 -113
  427. flare_kernel-0.2.4/tests/test_project_api.py +0 -23
  428. flare_kernel-0.2.4/tests/test_prompting_analysis_instruction.py +0 -50
  429. flare_kernel-0.2.4/tests/test_ssot_mode_runtime.py +0 -102
  430. flare_kernel-0.2.4/tests/test_streaming_draft_completion.py +0 -101
  431. flare_kernel-0.2.4/tests/test_streaming_draft_finalize.py +0 -106
  432. flare_kernel-0.2.4/tests/test_streaming_draft_post_completion.py +0 -160
  433. flare_kernel-0.2.4/tests/test_turn_context_builder.py +0 -170
  434. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/setup.cfg +0 -0
  435. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/src/flare_kernel/__init__.py +0 -0
  436. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/src/flare_kernel/contracts/mode.py +0 -0
  437. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/src/flare_kernel/main.py +0 -0
  438. /flare_kernel-0.2.4/src/flare_kernel/router/api_errors.py → /flare_kernel-0.2.5/src/flare_kernel/router/api/errors.py +0 -0
  439. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/src/flare_kernel/router/canonical/__init__.py +0 -0
  440. /flare_kernel-0.2.4/src/flare_kernel/router/canonical/canonical_state_analysis.py → /flare_kernel-0.2.5/src/flare_kernel/router/canonical/analysis.py +0 -0
  441. /flare_kernel-0.2.4/src/flare_kernel/router/canonical/canonical_state_checkpoint.py → /flare_kernel-0.2.5/src/flare_kernel/router/canonical/checkpoint.py +0 -0
  442. /flare_kernel-0.2.4/src/flare_kernel/router/endpoint_context.py → /flare_kernel-0.2.5/src/flare_kernel/router/context/endpoint.py +0 -0
  443. /flare_kernel-0.2.4/src/flare_kernel/router/turn_context_sourcing_preview.py → /flare_kernel-0.2.5/src/flare_kernel/router/context/sourcing_preview.py +0 -0
  444. /flare_kernel-0.2.4/src/flare_kernel/router/intake/intake_answer.py → /flare_kernel-0.2.5/src/flare_kernel/router/intake/answer.py +0 -0
  445. /flare_kernel-0.2.4/src/flare_kernel/router/intake/intake_authority_checkpoint.py → /flare_kernel-0.2.5/src/flare_kernel/router/intake/authority/checkpoint.py +0 -0
  446. /flare_kernel-0.2.4/src/flare_kernel/router/intake/intake_authority_session.py → /flare_kernel-0.2.5/src/flare_kernel/router/intake/authority/session.py +0 -0
  447. /flare_kernel-0.2.4/src/flare_kernel/router/intake/intake_entry_policy.py → /flare_kernel-0.2.5/src/flare_kernel/router/intake/entry_policy.py +0 -0
  448. /flare_kernel-0.2.4/src/flare_kernel/router/intake/intake_extraction_merge.py → /flare_kernel-0.2.5/src/flare_kernel/router/intake/extraction/merge.py +0 -0
  449. /flare_kernel-0.2.4/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
  450. /flare_kernel-0.2.4/src/flare_kernel/router/intake/intake_field_scope.py → /flare_kernel-0.2.5/src/flare_kernel/router/intake/field_scope.py +0 -0
  451. /flare_kernel-0.2.4/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
  452. /flare_kernel-0.2.4/src/flare_kernel/router/intake/intake_guided_flags.py → /flare_kernel-0.2.5/src/flare_kernel/router/intake/guided/flags.py +0 -0
  453. /flare_kernel-0.2.4/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
  454. /flare_kernel-0.2.4/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
  455. /flare_kernel-0.2.4/src/flare_kernel/router/intake/intake_guided_summary.py → /flare_kernel-0.2.5/src/flare_kernel/router/intake/guided/summary.py +0 -0
  456. /flare_kernel-0.2.4/src/flare_kernel/router/intake/intake_inputs.py → /flare_kernel-0.2.5/src/flare_kernel/router/intake/inputs.py +0 -0
  457. /flare_kernel-0.2.4/src/flare_kernel/router/intake/intake_node_state.py → /flare_kernel-0.2.5/src/flare_kernel/router/intake/node_state.py +0 -0
  458. /flare_kernel-0.2.4/src/flare_kernel/router/intake/intake_numeric.py → /flare_kernel-0.2.5/src/flare_kernel/router/intake/numeric.py +0 -0
  459. /flare_kernel-0.2.4/src/flare_kernel/router/intake/intake_payload_updates.py → /flare_kernel-0.2.5/src/flare_kernel/router/intake/payload_updates.py +0 -0
  460. /flare_kernel-0.2.4/src/flare_kernel/router/intake/intake_readiness.py → /flare_kernel-0.2.5/src/flare_kernel/router/intake/readiness.py +0 -0
  461. /flare_kernel-0.2.4/src/flare_kernel/router/intake/intake_state_persistence.py → /flare_kernel-0.2.5/src/flare_kernel/router/intake/state_persistence.py +0 -0
  462. /flare_kernel-0.2.4/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
  463. /flare_kernel-0.2.4/src/flare_kernel/router/intake/intake_status_schema.py → /flare_kernel-0.2.5/src/flare_kernel/router/intake/status/schema.py +0 -0
  464. /flare_kernel-0.2.4/src/flare_kernel/router/intake/intake_workflow_checkpoint.py → /flare_kernel-0.2.5/src/flare_kernel/router/intake/workflow_checkpoint.py +0 -0
  465. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/src/flare_kernel/router/intent/compat_aliases.py +0 -0
  466. /flare_kernel-0.2.4/src/flare_kernel/router/intent/intent_escalation_override.py → /flare_kernel-0.2.5/src/flare_kernel/router/intent/escalation/override.py +0 -0
  467. /flare_kernel-0.2.4/src/flare_kernel/router/intent/intent_escalation_signal.py → /flare_kernel-0.2.5/src/flare_kernel/router/intent/escalation/signal.py +0 -0
  468. /flare_kernel-0.2.4/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
  469. /flare_kernel-0.2.4/src/flare_kernel/router/kernel_constants_intake.py → /flare_kernel-0.2.5/src/flare_kernel/router/kernel_constants/intake.py +0 -0
  470. /flare_kernel-0.2.4/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
  471. /flare_kernel-0.2.4/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
  472. /flare_kernel-0.2.4/src/flare_kernel/router/kernel_facade_utils.py → /flare_kernel-0.2.5/src/flare_kernel/router/kernel_facade/utils.py +0 -0
  473. /flare_kernel-0.2.4/src/flare_kernel/router/mode_switch.py → /flare_kernel-0.2.5/src/flare_kernel/router/mode/switch.py +0 -0
  474. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/src/flare_kernel/router/next_actions_guard.py +0 -0
  475. /flare_kernel-0.2.4/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
  476. /flare_kernel-0.2.4/src/flare_kernel/router/orchestration/orchestration_status_projection.py → /flare_kernel-0.2.5/src/flare_kernel/router/orchestration/status/projection.py +0 -0
  477. /flare_kernel-0.2.4/src/flare_kernel/router/orchestration/orchestration_status_result.py → /flare_kernel-0.2.5/src/flare_kernel/router/orchestration/status/result.py +0 -0
  478. /flare_kernel-0.2.4/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
  479. /flare_kernel-0.2.4/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
  480. /flare_kernel-0.2.4/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
  481. /flare_kernel-0.2.4/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
  482. /flare_kernel-0.2.4/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
  483. /flare_kernel-0.2.4/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
  484. /flare_kernel-0.2.4/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
  485. /flare_kernel-0.2.4/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
  486. /flare_kernel-0.2.4/src/flare_kernel/router/orchestration/orchestration_trace_projection.py → /flare_kernel-0.2.5/src/flare_kernel/router/orchestration/trace/projection.py +0 -0
  487. /flare_kernel-0.2.4/src/flare_kernel/router/analysis_canvas_payload.py → /flare_kernel-0.2.5/src/flare_kernel/router/payload/analysis_canvas.py +0 -0
  488. /flare_kernel-0.2.4/src/flare_kernel/router/payload_enrichment.py → /flare_kernel-0.2.5/src/flare_kernel/router/payload/enrichment.py +0 -0
  489. /flare_kernel-0.2.4/src/flare_kernel/router/request_identity.py → /flare_kernel-0.2.5/src/flare_kernel/router/request/identity.py +0 -0
  490. /flare_kernel-0.2.4/src/flare_kernel/router/retrieval/retrieval_field_queries.py → /flare_kernel-0.2.5/src/flare_kernel/router/retrieval/field_queries.py +0 -0
  491. /flare_kernel-0.2.4/src/flare_kernel/router/retrieval/retrieval_projection.py → /flare_kernel-0.2.5/src/flare_kernel/router/retrieval/projection.py +0 -0
  492. /flare_kernel-0.2.4/src/flare_kernel/router/retrieval/retrieval_search.py → /flare_kernel-0.2.5/src/flare_kernel/router/retrieval/search.py +0 -0
  493. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/src/flare_kernel/router/streaming/__init__.py +0 -0
  494. /flare_kernel-0.2.4/src/flare_kernel/router/streaming/streaming_event_emitter.py → /flare_kernel-0.2.5/src/flare_kernel/router/streaming/event_emitter.py +0 -0
  495. /flare_kernel-0.2.4/src/flare_kernel/router/streaming/streaming_response_bootstrap.py → /flare_kernel-0.2.5/src/flare_kernel/router/streaming/response/bootstrap.py +0 -0
  496. /flare_kernel-0.2.4/src/flare_kernel/router/streaming/streaming_retrieval_phase.py → /flare_kernel-0.2.5/src/flare_kernel/router/streaming/retrieval/phase.py +0 -0
  497. /flare_kernel-0.2.4/src/flare_kernel/router/streaming/streaming_runtime_steps.py → /flare_kernel-0.2.5/src/flare_kernel/router/streaming/runtime/steps.py +0 -0
  498. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/src/flare_kernel/router/text_safety.py +0 -0
  499. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/src/flare_kernel/runtime/domain/__init__.py +0 -0
  500. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/src/flare_kernel/runtime/domain/domain_pack_loader.py +0 -0
  501. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/src/flare_kernel/runtime/domain/profile_resolution.py +0 -0
  502. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/src/flare_kernel/runtime/execution/__init__.py +0 -0
  503. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/src/flare_kernel/runtime/execution/agent_runtime.py +0 -0
  504. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/src/flare_kernel/runtime/execution/skill_runtime.py +0 -0
  505. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/src/flare_kernel/runtime/infrastructure/logging.py +0 -0
  506. /flare_kernel-0.2.4/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
  507. /flare_kernel-0.2.4/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
  508. /flare_kernel-0.2.4/src/flare_kernel/runtime/infrastructure/sourcing_persistence.py → /flare_kernel-0.2.5/src/flare_kernel/runtime/infrastructure/sourcing/persistence.py +0 -0
  509. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/src/flare_kernel/runtime/infrastructure/trace.py +0 -0
  510. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/src/flare_kernel/runtime/intent/__init__.py +0 -0
  511. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/src/flare_kernel/runtime/intent/intent_and_escalation/__init__.py +0 -0
  512. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/src/flare_kernel/runtime/intent/intent_and_escalation/decision.py +0 -0
  513. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/src/flare_kernel/runtime/intent/intent_and_escalation/lexicon.py +0 -0
  514. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/src/flare_kernel/runtime/intent/intent_and_escalation/preprocessing.py +0 -0
  515. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/src/flare_kernel/runtime/intent/intent_and_escalation/signals.py +0 -0
  516. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/src/flare_kernel/runtime/intent/intent_and_escalation_classifier.py +0 -0
  517. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/src/flare_kernel/runtime/llm/__init__.py +0 -0
  518. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/src/flare_kernel/runtime/llm/llm_provider.py +0 -0
  519. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/src/flare_kernel/runtime/llm/model_router.py +0 -0
  520. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/src/flare_kernel/runtime/orchestration/analysis_router_runtime.py +0 -0
  521. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/src/flare_kernel/runtime/orchestration/canvas_sourcing_contract.py +0 -0
  522. /flare_kernel-0.2.4/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
  523. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/src/flare_kernel/runtime/reasoning/__init__.py +0 -0
  524. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/src/flare_kernel/runtime/session/__init__.py +0 -0
  525. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/src/flare_kernel/runtime/session/checkpoint_manager.py +0 -0
  526. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/src/flare_kernel/runtime/session/intake_session_store.py +0 -0
  527. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/src/flare_kernel/runtime/session/models.py +0 -0
  528. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/src/flare_kernel.egg-info/dependency_links.txt +0 -0
  529. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/src/flare_kernel.egg-info/requires.txt +0 -0
  530. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/src/flare_kernel.egg-info/top_level.txt +0 -0
  531. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_compat_aliases.py +0 -0
  532. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_domain_pack_loader.py +0 -0
  533. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_infrastructure_helpers.py +0 -0
  534. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_infrastructure_knowledge.py +0 -0
  535. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_intent_escalation_classifier.py +0 -0
  536. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_intent_type_compat_aliases.py +0 -0
  537. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_kernel_facade_helpers.py +0 -0
  538. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_llm_provider.py +0 -0
  539. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_model_router.py +0 -0
  540. {flare_kernel-0.2.4 → flare_kernel-0.2.5}/tests/test_source_library_persistence_scope.py +0 -0
  541. {flare_kernel-0.2.4 → 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.4
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-contract-v1.md`
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,7 +5,8 @@
5
5
  边界文档:
6
6
 
7
7
  1. `packages/flare-kernel/docs/KERNEL-BOUNDARY.md`
8
- 2. `docs/contracts/agent-contract-v1.md`
8
+ 2. `docs/contracts/core/agent.md`
9
+ 3. `packages/flare-kernel/docs/replay-snapshot-technical-spec.md`
9
10
 
10
11
  职责:
11
12
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "flare-kernel"
7
- version = "0.2.4"
7
+ version = "0.2.5"
8
8
  description = "FLARE kernel runtime package"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -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.api_errors import (
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
- source: str
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[str] = Field(default_factory=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,6 +71,18 @@ 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"
@@ -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[str] = Field(default_factory=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
@@ -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
+ ]
@@ -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.api_errors import ApiError
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.canonical_state_context_analysis import (
18
+ from flare_kernel.router.canonical.context.analysis import (
19
19
  build_canonical_state_context_output,
20
20
  )
21
- from flare_kernel.router.canonical.canonical_state_context_inputs import (
21
+ from flare_kernel.router.canonical.context.inputs import (
22
22
  resolve_canonical_state_context_inputs,
23
23
  )
24
- from flare_kernel.router.canonical.canonical_state_context_session import (
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.canonical_state_flow import (
8
+ from flare_kernel.router.canonical.flow import (
9
9
  resolve_analysis_generation_state,
10
10
  )
11
- from flare_kernel.router.canonical.canonical_state_projection import (
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,
@@ -4,7 +4,7 @@ from __future__ import annotations
4
4
 
5
5
  from typing import Any, Callable
6
6
 
7
- from flare_kernel.router.canonical.canonical_state_projection import (
7
+ from flare_kernel.router.canonical.projection import (
8
8
  collect_confirmed_field_values,
9
9
  )
10
10
  from flare_kernel.router.intent.compat_aliases import (