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