flare-kernel 0.2.6__tar.gz → 0.2.7__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 (480) hide show
  1. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/PKG-INFO +1 -1
  2. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/pyproject.toml +1 -1
  3. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/kernel_facade/dependency_resolution.py +3 -0
  4. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/kernel_facade/flow.py +12 -0
  5. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/kernel_facade/turn_context.py +5 -0
  6. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/kernel_route/run.py +9 -0
  7. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/prompting/context_blocks.py +45 -0
  8. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/prompting/core.py +2 -0
  9. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/streaming/draft/completion.py +9 -0
  10. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/project_memory/__init__.py +6 -0
  11. flare_kernel-0.2.7/src/flare_kernel/runtime/project_memory/runtime.py +144 -0
  12. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel.egg-info/PKG-INFO +1 -1
  13. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel.egg-info/SOURCES.txt +1 -0
  14. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_kernel_facade_turn_context.py +51 -0
  15. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_project_memory_runtime.py +47 -0
  16. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_prompting_analysis_instruction.py +21 -0
  17. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/README.md +0 -0
  18. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/setup.cfg +0 -0
  19. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/__init__.py +0 -0
  20. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/app.py +0 -0
  21. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/contracts/__init__.py +0 -0
  22. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/contracts/context.py +0 -0
  23. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/contracts/kernel_contract.py +0 -0
  24. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/contracts/mode.py +0 -0
  25. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/contracts/project_contract.py +0 -0
  26. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/contracts/project_memory_contract.py +0 -0
  27. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/contracts/session_contract.py +0 -0
  28. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/main.py +0 -0
  29. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/project_store.py +0 -0
  30. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/__init__.py +0 -0
  31. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/api/__init__.py +0 -0
  32. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/api/chat.py +0 -0
  33. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/api/errors.py +0 -0
  34. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/api/project.py +0 -0
  35. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/api/session.py +0 -0
  36. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/canonical/__init__.py +0 -0
  37. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/canonical/analysis.py +0 -0
  38. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/canonical/checkpoint.py +0 -0
  39. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/canonical/context/__init__.py +0 -0
  40. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/canonical/context/analysis.py +0 -0
  41. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/canonical/context/inputs.py +0 -0
  42. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/canonical/context/session.py +0 -0
  43. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/canonical/contract_support.py +0 -0
  44. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/canonical/flow.py +0 -0
  45. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/canonical/payload.py +0 -0
  46. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/canonical/projection.py +0 -0
  47. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/completion/__init__.py +0 -0
  48. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/completion/guided.py +0 -0
  49. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/completion/response_builder.py +0 -0
  50. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/completion/selection.py +0 -0
  51. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/context/__init__.py +0 -0
  52. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/context/endpoint.py +0 -0
  53. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/context/sourcing_preview.py +0 -0
  54. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/__init__.py +0 -0
  55. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/amount_quantity.py +0 -0
  56. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/answer.py +0 -0
  57. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/authority/__init__.py +0 -0
  58. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/authority/checkpoint.py +0 -0
  59. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/authority/core.py +0 -0
  60. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/authority/hydration.py +0 -0
  61. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/authority/session.py +0 -0
  62. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/canonicalization.py +0 -0
  63. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/clarification.py +0 -0
  64. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/decision_rules.py +0 -0
  65. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/deployment_delivery.py +0 -0
  66. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/entry_policy.py +0 -0
  67. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/extraction/__init__.py +0 -0
  68. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/extraction/core.py +0 -0
  69. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/extraction/extractors.py +0 -0
  70. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/extraction/merge.py +0 -0
  71. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/field_projection/__init__.py +0 -0
  72. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/field_projection/core.py +0 -0
  73. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/field_projection/entity.py +0 -0
  74. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/field_projection/payload.py +0 -0
  75. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/field_projection/source.py +0 -0
  76. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/field_scope.py +0 -0
  77. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/guided/__init__.py +0 -0
  78. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/guided/confirmed_updates.py +0 -0
  79. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/guided/flags.py +0 -0
  80. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/guided/followup.py +0 -0
  81. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/guided/followup_work_item.py +0 -0
  82. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/guided/open_fields.py +0 -0
  83. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/guided/status.py +0 -0
  84. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/guided/summary.py +0 -0
  85. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/inputs.py +0 -0
  86. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/node_state.py +0 -0
  87. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/numeric.py +0 -0
  88. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/payload_updates.py +0 -0
  89. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/readiness.py +0 -0
  90. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/state_persistence.py +0 -0
  91. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/status/__init__.py +0 -0
  92. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/status/chooser_stage.py +0 -0
  93. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/status/core.py +0 -0
  94. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/status/guided_session.py +0 -0
  95. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/status/projection.py +0 -0
  96. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/status/schema.py +0 -0
  97. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/workflow_checkpoint.py +0 -0
  98. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/intent/__init__.py +0 -0
  99. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/intent/classifier_utils.py +0 -0
  100. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/intent/compat_aliases.py +0 -0
  101. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/intent/escalation/__init__.py +0 -0
  102. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/intent/escalation/override.py +0 -0
  103. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/intent/escalation/pipeline.py +0 -0
  104. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/intent/escalation/signal.py +0 -0
  105. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/intent/routing.py +0 -0
  106. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/intent/session_intent/__init__.py +0 -0
  107. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/intent/session_intent/core.py +0 -0
  108. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/intent/session_intent/fields.py +0 -0
  109. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/intent/session_intent/small_talk.py +0 -0
  110. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/kernel.py +0 -0
  111. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/kernel_constants/__init__.py +0 -0
  112. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/kernel_constants/intake.py +0 -0
  113. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/kernel_constants/intent.py +0 -0
  114. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/kernel_constants/patch.py +0 -0
  115. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/kernel_endpoint_handlers/__init__.py +0 -0
  116. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/kernel_endpoint_handlers/health.py +0 -0
  117. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/kernel_endpoint_handlers/knowledge.py +0 -0
  118. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/kernel_endpoint_handlers/sourcing.py +0 -0
  119. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/kernel_endpoint_handlers/turn.py +0 -0
  120. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/kernel_facade/__init__.py +0 -0
  121. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/kernel_facade/canonical_state.py +0 -0
  122. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/kernel_facade/orchestration.py +0 -0
  123. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/kernel_facade/payload_enrichment.py +0 -0
  124. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/kernel_facade/utils.py +0 -0
  125. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/kernel_flow_bindings/__init__.py +0 -0
  126. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/kernel_flow_bindings/intent_query.py +0 -0
  127. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/kernel_flow_bindings/mode.py +0 -0
  128. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/kernel_flow_bindings/session_intent.py +0 -0
  129. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/kernel_request_pipeline/__init__.py +0 -0
  130. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/kernel_request_pipeline/action.py +0 -0
  131. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/kernel_request_pipeline/intake.py +0 -0
  132. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/kernel_request_pipeline/intent_query.py +0 -0
  133. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/kernel_request_pipeline/intent_signal.py +0 -0
  134. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/kernel_route/__init__.py +0 -0
  135. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/kernel_route/action.py +0 -0
  136. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/kernel_route/execution.py +0 -0
  137. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/kernel_route/stream.py +0 -0
  138. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/mode/__init__.py +0 -0
  139. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/mode/resolution.py +0 -0
  140. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/mode/switch.py +0 -0
  141. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/next_actions_guard.py +0 -0
  142. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/orchestration/__init__.py +0 -0
  143. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/orchestration/status/__init__.py +0 -0
  144. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/orchestration/status/actions.py +0 -0
  145. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/orchestration/status/builder.py +0 -0
  146. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/orchestration/status/checkpoint_state.py +0 -0
  147. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/orchestration/status/context.py +0 -0
  148. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/orchestration/status/context_helpers.py +0 -0
  149. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/orchestration/status/core.py +0 -0
  150. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/orchestration/status/decision.py +0 -0
  151. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/orchestration/status/followup_state.py +0 -0
  152. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/orchestration/status/projection.py +0 -0
  153. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/orchestration/status/result.py +0 -0
  154. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/orchestration/status/runtime_state.py +0 -0
  155. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/orchestration/status/state/__init__.py +0 -0
  156. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/orchestration/status/state/context.py +0 -0
  157. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/orchestration/status/state/decision.py +0 -0
  158. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/orchestration/status/state/entry.py +0 -0
  159. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/orchestration/status/state/flow.py +0 -0
  160. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/orchestration/status/state/followup.py +0 -0
  161. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/orchestration/status/state/intent.py +0 -0
  162. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/orchestration/status/state/node.py +0 -0
  163. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/orchestration/status/state/payload.py +0 -0
  164. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/orchestration/status/state/unpack.py +0 -0
  165. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/orchestration/trace/__init__.py +0 -0
  166. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/orchestration/trace/core.py +0 -0
  167. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/orchestration/trace/projection.py +0 -0
  168. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/orchestration/trace/steps.py +0 -0
  169. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/patch_contract.py +0 -0
  170. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/payload/__init__.py +0 -0
  171. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/payload/action.py +0 -0
  172. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/payload/analysis_canvas.py +0 -0
  173. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/payload/enrichment.py +0 -0
  174. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/prompting/__init__.py +0 -0
  175. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/prompting/response_strategy.py +0 -0
  176. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/request/__init__.py +0 -0
  177. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/request/identity.py +0 -0
  178. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/request/intent_resolution.py +0 -0
  179. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/retrieval/__init__.py +0 -0
  180. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/retrieval/aliases.py +0 -0
  181. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/retrieval/field_queries.py +0 -0
  182. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/retrieval/projection.py +0 -0
  183. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/retrieval/query_builder.py +0 -0
  184. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/retrieval/search.py +0 -0
  185. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/source_library.py +0 -0
  186. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/streaming/__init__.py +0 -0
  187. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/streaming/draft/__init__.py +0 -0
  188. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/streaming/draft/finalize.py +0 -0
  189. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/streaming/draft/phase.py +0 -0
  190. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/streaming/draft/phase_timing.py +0 -0
  191. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/streaming/draft/post_completion.py +0 -0
  192. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/streaming/draft/prologue.py +0 -0
  193. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/streaming/event_emitter.py +0 -0
  194. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/streaming/intake/__init__.py +0 -0
  195. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/streaming/intake/phase.py +0 -0
  196. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/streaming/mode/__init__.py +0 -0
  197. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/streaming/mode/event_payload.py +0 -0
  198. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/streaming/mode/events.py +0 -0
  199. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/streaming/response/__init__.py +0 -0
  200. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/streaming/response/bootstrap.py +0 -0
  201. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/streaming/response/builder.py +0 -0
  202. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/streaming/response/builder_transport.py +0 -0
  203. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/streaming/response/draft_phase.py +0 -0
  204. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/streaming/response/phase_groups.py +0 -0
  205. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/streaming/response/phases.py +0 -0
  206. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/streaming/response/runtime.py +0 -0
  207. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/streaming/retrieval/__init__.py +0 -0
  208. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/streaming/retrieval/phase.py +0 -0
  209. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/streaming/runtime/__init__.py +0 -0
  210. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/streaming/runtime/steps.py +0 -0
  211. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/router/text_safety.py +0 -0
  212. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/__init__.py +0 -0
  213. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/context/__init__.py +0 -0
  214. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/context/document_application.py +0 -0
  215. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/context/reasoning_application.py +0 -0
  216. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/context/session_context.py +0 -0
  217. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/context/track_application.py +0 -0
  218. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/domain/__init__.py +0 -0
  219. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/domain/domain_pack_loader.py +0 -0
  220. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/domain/profile_resolution.py +0 -0
  221. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/execution/__init__.py +0 -0
  222. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/execution/agent_runtime.py +0 -0
  223. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/execution/skill_runtime.py +0 -0
  224. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/infrastructure/__init__.py +0 -0
  225. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/infrastructure/chat_memory.py +0 -0
  226. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/infrastructure/database.py +0 -0
  227. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/infrastructure/dependency_status.py +0 -0
  228. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/infrastructure/infrastructure.py +0 -0
  229. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/infrastructure/knowledge_ingest.py +0 -0
  230. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/infrastructure/knowledge_memory.py +0 -0
  231. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/infrastructure/knowledge_postgres_search.py +0 -0
  232. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/infrastructure/knowledge_qdrant_search.py +0 -0
  233. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/infrastructure/knowledge_search.py +0 -0
  234. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/infrastructure/knowledge_terms.py +0 -0
  235. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/infrastructure/logging.py +0 -0
  236. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/infrastructure/project_memory_codec.py +0 -0
  237. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/infrastructure/project_memory_sql.py +0 -0
  238. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/infrastructure/project_memory_store.py +0 -0
  239. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/infrastructure/redis_client.py +0 -0
  240. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/infrastructure/session/__init__.py +0 -0
  241. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/infrastructure/session/repository.py +0 -0
  242. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/infrastructure/session/repository_memory.py +0 -0
  243. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/infrastructure/source/__init__.py +0 -0
  244. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/infrastructure/source/library_persistence.py +0 -0
  245. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/infrastructure/source/text_extractor.py +0 -0
  246. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/infrastructure/sourcing/__init__.py +0 -0
  247. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/infrastructure/sourcing/persistence.py +0 -0
  248. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/infrastructure/sourcing/provider.py +0 -0
  249. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/infrastructure/trace.py +0 -0
  250. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/infrastructure/vector_store.py +0 -0
  251. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/intent/__init__.py +0 -0
  252. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/intent/intent_and_escalation/__init__.py +0 -0
  253. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/intent/intent_and_escalation/decision.py +0 -0
  254. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/intent/intent_and_escalation/lexicon.py +0 -0
  255. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/intent/intent_and_escalation/preprocessing.py +0 -0
  256. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/intent/intent_and_escalation/signals.py +0 -0
  257. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/intent/intent_and_escalation_classifier.py +0 -0
  258. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/llm/__init__.py +0 -0
  259. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/llm/llm_provider.py +0 -0
  260. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/llm/model_router.py +0 -0
  261. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/orchestration/__init__.py +0 -0
  262. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/orchestration/analysis_router_runtime.py +0 -0
  263. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/orchestration/canvas_sourcing_contract.py +0 -0
  264. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/orchestration/decision_engine.py +0 -0
  265. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/orchestration/mode/__init__.py +0 -0
  266. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/orchestration/mode/orchestration.py +0 -0
  267. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/orchestration/mode/plan/__init__.py +0 -0
  268. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/orchestration/mode/plan/canvas.py +0 -0
  269. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/orchestration/mode/plan/core.py +0 -0
  270. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/orchestration/mode/plan/followup.py +0 -0
  271. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/orchestration/mode/plan/payload.py +0 -0
  272. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/orchestration/mode/plan/question.py +0 -0
  273. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/orchestration/mode/plan/question_steps.py +0 -0
  274. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/orchestration/mode/plan/session.py +0 -0
  275. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/orchestration/mode/plan/stage.py +0 -0
  276. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/orchestration/mode/plan/summary.py +0 -0
  277. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/orchestration/mode/plan/trace.py +0 -0
  278. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/orchestration/mode/reasoning.py +0 -0
  279. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/orchestration/mode/runtime.py +0 -0
  280. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/orchestration/mode_orchestration_plan_question.py +0 -0
  281. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/orchestration/mode_orchestration_plan_question_steps.py +0 -0
  282. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/orchestration/observation.py +0 -0
  283. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/orchestration/response_strategy_runtime.py +0 -0
  284. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/orchestration/session_context_runtime.py +0 -0
  285. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/orchestration/sourcing/__init__.py +0 -0
  286. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/orchestration/sourcing/event_payloads.py +0 -0
  287. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/orchestration/sourcing/search_runtime.py +0 -0
  288. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/orchestration/structured_reasoning.py +0 -0
  289. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/orchestration/track_runtime.py +0 -0
  290. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/project_memory/extraction.py +0 -0
  291. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/project_memory/recall.py +0 -0
  292. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/reasoning/__init__.py +0 -0
  293. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/reasoning/intake/__init__.py +0 -0
  294. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/reasoning/intake/api.py +0 -0
  295. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/reasoning/intake/branching/__init__.py +0 -0
  296. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/reasoning/intake/branching/core.py +0 -0
  297. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/reasoning/intake/branching/policy.py +0 -0
  298. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/reasoning/intake/context.py +0 -0
  299. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/reasoning/intake/field_selection.py +0 -0
  300. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/reasoning/intake/gap_detection.py +0 -0
  301. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/reasoning/intake/hypothesis.py +0 -0
  302. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/reasoning/intake/planning.py +0 -0
  303. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/reasoning/intake/priority.py +0 -0
  304. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/reasoning/intake/question/__init__.py +0 -0
  305. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/reasoning/intake/question/builder.py +0 -0
  306. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/reasoning/intake/question/extraction.py +0 -0
  307. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/reasoning/intake/question/planner.py +0 -0
  308. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/reasoning/intake/readiness/__init__.py +0 -0
  309. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/reasoning/intake/readiness/core.py +0 -0
  310. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/reasoning/intake/readiness/scoring.py +0 -0
  311. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/reasoning/intake/shared.py +0 -0
  312. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/reasoning/intake/understanding_state.py +0 -0
  313. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/reasoning/intake/visible_response.py +0 -0
  314. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/session/__init__.py +0 -0
  315. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/session/checkpoint_manager.py +0 -0
  316. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/session/intake_session_store.py +0 -0
  317. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/session/models.py +0 -0
  318. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/source_ingestion/__init__.py +0 -0
  319. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/source_ingestion/artifacts.py +0 -0
  320. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/source_ingestion/chunk_storage.py +0 -0
  321. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/source_ingestion/knowledge_storage.py +0 -0
  322. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/source_ingestion/runtime.py +0 -0
  323. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/runtime/source_ingestion/storage.py +0 -0
  324. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/session_record_policy.py +0 -0
  325. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/session_store.py +0 -0
  326. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel/user_store.py +0 -0
  327. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel.egg-info/dependency_links.txt +0 -0
  328. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel.egg-info/requires.txt +0 -0
  329. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/src/flare_kernel.egg-info/top_level.txt +0 -0
  330. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_action_payload.py +0 -0
  331. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_analysis_canvas_payload.py +0 -0
  332. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_analysis_route_projection.py +0 -0
  333. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_basics.py +0 -0
  334. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_builder_split_modules.py +0 -0
  335. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_business_hardcode_guard.py +0 -0
  336. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_canonical_state_context_analysis.py +0 -0
  337. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_canonical_state_context_inputs.py +0 -0
  338. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_canonical_state_context_session.py +0 -0
  339. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_canonical_state_flow.py +0 -0
  340. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_canonical_state_payload.py +0 -0
  341. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_canonical_state_projection.py +0 -0
  342. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_canvas_sourcing_contract_meta.py +0 -0
  343. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_chat_api_alias.py +0 -0
  344. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_command_resolution_analysis_mode.py +0 -0
  345. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_compat_aliases.py +0 -0
  346. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_completion_response_builder.py +0 -0
  347. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_completion_selection.py +0 -0
  348. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_decision_engine.py +0 -0
  349. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_domain_pack_loader.py +0 -0
  350. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_endpoint_context.py +0 -0
  351. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_flare_v1_patch_contract.py +0 -0
  352. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_guided_completion.py +0 -0
  353. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_infrastructure_helpers.py +0 -0
  354. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_infrastructure_knowledge.py +0 -0
  355. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_intake_amount_quantity.py +0 -0
  356. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_intake_answer.py +0 -0
  357. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_intake_authority.py +0 -0
  358. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_intake_authority_checkpoint.py +0 -0
  359. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_intake_authority_hydration.py +0 -0
  360. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_intake_authority_session.py +0 -0
  361. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_intake_canonicalization.py +0 -0
  362. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_intake_clarification.py +0 -0
  363. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_intake_decision_rules.py +0 -0
  364. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_intake_deployment_delivery.py +0 -0
  365. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_intake_domain_context_options.py +0 -0
  366. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_intake_entry_policy.py +0 -0
  367. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_intake_extraction.py +0 -0
  368. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_intake_extraction_extractors.py +0 -0
  369. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_intake_extraction_merge.py +0 -0
  370. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_intake_field_projection.py +0 -0
  371. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_intake_field_projection_entity.py +0 -0
  372. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_intake_field_projection_payload.py +0 -0
  373. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_intake_field_projection_source.py +0 -0
  374. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_intake_field_scope.py +0 -0
  375. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_intake_guided_confirmed_updates.py +0 -0
  376. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_intake_guided_flags.py +0 -0
  377. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_intake_guided_followup.py +0 -0
  378. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_intake_guided_followup_work_item.py +0 -0
  379. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_intake_guided_open_fields.py +0 -0
  380. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_intake_guided_status.py +0 -0
  381. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_intake_guided_summary.py +0 -0
  382. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_intake_inputs.py +0 -0
  383. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_intake_node_state.py +0 -0
  384. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_intake_numeric.py +0 -0
  385. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_intake_payload_updates.py +0 -0
  386. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_intake_readiness.py +0 -0
  387. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_intake_reasoning_priority.py +0 -0
  388. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_intake_state_persistence.py +0 -0
  389. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_intake_status.py +0 -0
  390. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_intake_status_guided_session.py +0 -0
  391. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_intake_status_projection.py +0 -0
  392. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_intake_status_schema.py +0 -0
  393. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_intake_status_stage.py +0 -0
  394. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_intake_workflow_checkpoint.py +0 -0
  395. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_intent_classifier_utils.py +0 -0
  396. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_intent_escalation_classifier.py +0 -0
  397. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_intent_escalation_override.py +0 -0
  398. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_intent_escalation_pipeline.py +0 -0
  399. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_intent_escalation_signal.py +0 -0
  400. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_intent_resolution.py +0 -0
  401. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_intent_retrieval.py +0 -0
  402. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_intent_routing.py +0 -0
  403. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_intent_type_compat_aliases.py +0 -0
  404. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_kernel_alias_delegation.py +0 -0
  405. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_kernel_endpoint_handlers.py +0 -0
  406. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_kernel_endpoint_handlers_sourcing.py +0 -0
  407. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_kernel_facade_helpers.py +0 -0
  408. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_kernel_intent_query_flow.py +0 -0
  409. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_kernel_mode_flow.py +0 -0
  410. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_kernel_route_execution_wrappers.py +0 -0
  411. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_kernel_session_intent_flow.py +0 -0
  412. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_llm_provider.py +0 -0
  413. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_mode_orchestration_plan_canvas_saved_content.py +0 -0
  414. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_mode_orchestration_plan_finalize.py +0 -0
  415. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_mode_orchestration_plan_runtime_payload.py +0 -0
  416. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_mode_orchestration_state_bridge.py +0 -0
  417. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_mode_reasoning.py +0 -0
  418. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_mode_resolution.py +0 -0
  419. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_mode_switch.py +0 -0
  420. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_model_router.py +0 -0
  421. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_new_flow_guard.py +0 -0
  422. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_orchestration_checkpoint_state.py +0 -0
  423. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_orchestration_followup_state.py +0 -0
  424. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_orchestration_status_context.py +0 -0
  425. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_orchestration_status_context_helpers.py +0 -0
  426. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_orchestration_status_decision.py +0 -0
  427. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_orchestration_status_projection.py +0 -0
  428. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_orchestration_status_result.py +0 -0
  429. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_orchestration_status_runtime_state.py +0 -0
  430. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_orchestration_status_state_context.py +0 -0
  431. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_orchestration_status_state_decision.py +0 -0
  432. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_orchestration_status_state_entry.py +0 -0
  433. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_orchestration_status_state_followup.py +0 -0
  434. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_orchestration_status_state_intent.py +0 -0
  435. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_orchestration_status_state_node.py +0 -0
  436. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_orchestration_status_state_payload.py +0 -0
  437. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_orchestration_status_state_unpack.py +0 -0
  438. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_orchestration_trace.py +0 -0
  439. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_orchestration_trace_projection.py +0 -0
  440. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_orchestration_trace_steps.py +0 -0
  441. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_patch_contract.py +0 -0
  442. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_payload_enrichment.py +0 -0
  443. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_project_api.py +0 -0
  444. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_project_memory_store.py +0 -0
  445. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_request_identity.py +0 -0
  446. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_request_intent_resolution.py +0 -0
  447. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_response_strategy_runtime.py +0 -0
  448. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_retrieval_aliases.py +0 -0
  449. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_retrieval_field_queries.py +0 -0
  450. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_retrieval_projection.py +0 -0
  451. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_retrieval_query_builder.py +0 -0
  452. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_retrieval_search.py +0 -0
  453. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_session_api.py +0 -0
  454. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_session_context_persistence.py +0 -0
  455. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_session_intent.py +0 -0
  456. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_session_intent_fields.py +0 -0
  457. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_session_intent_small_talk.py +0 -0
  458. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_source_ingestion_runtime.py +0 -0
  459. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_source_ingestion_ssot_acceptance.py +0 -0
  460. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_source_library.py +0 -0
  461. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_source_library_persistence_scope.py +0 -0
  462. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_source_text_extractor.py +0 -0
  463. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_sourcing_provider.py +0 -0
  464. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_sourcing_search_runtime.py +0 -0
  465. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_streaming_draft_completion.py +0 -0
  466. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_streaming_draft_finalize.py +0 -0
  467. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_streaming_draft_phase.py +0 -0
  468. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_streaming_draft_post_completion.py +0 -0
  469. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_streaming_draft_prologue.py +0 -0
  470. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_streaming_event_emitter.py +0 -0
  471. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_streaming_intake_phase.py +0 -0
  472. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_streaming_mode_event_payload.py +0 -0
  473. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_streaming_mode_events.py +0 -0
  474. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_streaming_response_bootstrap.py +0 -0
  475. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_streaming_response_phases.py +0 -0
  476. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_streaming_response_runtime.py +0 -0
  477. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_streaming_retrieval_phase.py +0 -0
  478. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_streaming_runtime_steps.py +0 -0
  479. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_text_safety.py +0 -0
  480. {flare_kernel-0.2.6 → flare_kernel-0.2.7}/tests/test_track_runtime.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: flare-kernel
3
- Version: 0.2.6
3
+ Version: 0.2.7
4
4
  Summary: FLARE kernel runtime package
5
5
  License: Proprietary
6
6
  Classifier: Development Status :: 3 - Alpha
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "flare-kernel"
7
- version = "0.2.6"
7
+ version = "0.2.7"
8
8
  description = "FLARE kernel runtime package"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -156,6 +156,7 @@ def resolve_turn_context_dependencies(
156
156
  build_structured_search_results_fn: Any,
157
157
  generate_llm_completion_fn: Any,
158
158
  resolve_analysis_route_fn: Any,
159
+ build_project_memory_context_layer_fn: Any,
159
160
  kernel_attr_fn: Callable[[str, Any], Any],
160
161
  defaults: dict[str, Any],
161
162
  ) -> dict[str, Any]:
@@ -202,6 +203,8 @@ def resolve_turn_context_dependencies(
202
203
  or kernel_attr_fn("generate_llm_completion", defaults["generate_llm_completion_fn"]),
203
204
  "resolve_analysis_route_fn": resolve_analysis_route_fn
204
205
  or kernel_attr_fn("resolve_analysis_route_from_runtime", defaults["resolve_analysis_route_fn"]),
206
+ "build_project_memory_context_layer_fn": build_project_memory_context_layer_fn
207
+ or kernel_attr_fn("build_project_memory_context_layer", defaults["build_project_memory_context_layer_fn"]),
205
208
  }
206
209
 
207
210
 
@@ -51,6 +51,7 @@ async def prepare_kernel_turn_context_flow(
51
51
  generate_llm_completion_fn: Callable[..., Any] | None = None,
52
52
  search_web_sources_fn: Callable[..., list[dict[str, Any]]] | None = None,
53
53
  resolve_analysis_route_fn: Callable[..., dict[str, Any]] | None = None,
54
+ build_project_memory_context_layer_fn: Callable[..., dict[str, Any]] | None = None,
54
55
  ) -> dict[str, Any]:
55
56
  """Assemble the turn context consumed by kernel run/action/stream handlers."""
56
57
  trace_id = resolve_trace_id_fn(req.trace_id)
@@ -143,8 +144,18 @@ async def prepare_kernel_turn_context_flow(
143
144
  "confidence": 0.0,
144
145
  }
145
146
 
147
+ project_memory_recall = {}
148
+ if callable(build_project_memory_context_layer_fn):
149
+ project_memory_recall = build_project_memory_context_layer_fn(
150
+ project_id=project_id,
151
+ user_id=user_id,
152
+ query=raw_message,
153
+ )
154
+
146
155
  enriched_payload = enrich_payload_fn(req, resolved_mode=resolved_mode, retrieved_knowledge=retrieved_knowledge)
147
156
  if isinstance(enriched_payload, dict):
157
+ if isinstance(project_memory_recall, dict) and project_memory_recall:
158
+ enriched_payload["project_memory_recall"] = project_memory_recall
148
159
  enriched_payload["analysis_route"] = analysis_route
149
160
  if not _has_question_answer(enriched_payload):
150
161
  structured_reasoning = await generate_structured_reasoning(
@@ -244,6 +255,7 @@ async def prepare_kernel_turn_context_flow(
244
255
  "effective_command": effective_command,
245
256
  "structured_retrieved_knowledge": structured_retrieved_knowledge,
246
257
  "analysis_route": analysis_route,
258
+ "project_memory_recall": project_memory_recall,
247
259
  }
248
260
 
249
261
 
@@ -57,6 +57,7 @@ from flare_kernel.router.text_safety import (
57
57
  from flare_kernel.runtime.orchestration.analysis_router_runtime import (
58
58
  resolve_analysis_route as resolve_analysis_route_from_runtime,
59
59
  )
60
+ from flare_kernel.runtime.project_memory import build_project_memory_context_layer
60
61
 
61
62
 
62
63
  async def _prepare_kernel_turn_context(
@@ -86,6 +87,7 @@ async def _prepare_kernel_turn_context(
86
87
  generate_llm_completion_fn=None,
87
88
  search_web_sources_fn=None,
88
89
  resolve_analysis_route_fn=None,
90
+ build_project_memory_context_layer_fn=None,
89
91
  ) -> dict[str, Any]:
90
92
  turn_context_deps = resolve_turn_context_dependencies(
91
93
  resolve_trace_id_fn=resolve_trace_id_fn,
@@ -111,6 +113,7 @@ async def _prepare_kernel_turn_context(
111
113
  build_structured_search_results_fn=build_structured_search_results_fn,
112
114
  generate_llm_completion_fn=generate_llm_completion_fn,
113
115
  resolve_analysis_route_fn=resolve_analysis_route_fn,
116
+ build_project_memory_context_layer_fn=build_project_memory_context_layer_fn,
114
117
  kernel_attr_fn=_kernel_attr,
115
118
  defaults={
116
119
  "resolve_trace_id_fn": resolve_trace_id,
@@ -136,6 +139,7 @@ async def _prepare_kernel_turn_context(
136
139
  "build_structured_search_results_fn": build_structured_search_results_from_intake_status,
137
140
  "generate_llm_completion_fn": generate_llm_completion,
138
141
  "resolve_analysis_route_fn": resolve_analysis_route_from_runtime,
142
+ "build_project_memory_context_layer_fn": build_project_memory_context_layer,
139
143
  },
140
144
  )
141
145
  return await prepare_kernel_turn_context_flow(
@@ -164,6 +168,7 @@ async def _prepare_kernel_turn_context(
164
168
  generate_llm_completion_fn=turn_context_deps["generate_llm_completion_fn"],
165
169
  search_web_sources_fn=search_web_sources_fn,
166
170
  resolve_analysis_route_fn=turn_context_deps["resolve_analysis_route_fn"],
171
+ build_project_memory_context_layer_fn=turn_context_deps["build_project_memory_context_layer_fn"],
167
172
  )
168
173
 
169
174
 
@@ -6,6 +6,7 @@ from typing import Any
6
6
 
7
7
  from flare_kernel.contracts import KernelRequest, KernelResponse
8
8
  from flare_kernel.runtime import generate_llm_completion, get_logger, persist_memory_record
9
+ from flare_kernel.runtime.project_memory import persist_project_memory_from_runtime
9
10
  from flare_kernel.router.completion.response_builder import (
10
11
  apply_completion_content_policy as apply_completion_content_policy_from_router,
11
12
  build_kernel_success_response as build_kernel_success_response_from_router,
@@ -117,6 +118,14 @@ async def build_kernel_run_response(
117
118
  model=completion.model,
118
119
  provider_status=completion.status,
119
120
  )
121
+ project_memory_record = persist_project_memory_from_runtime(
122
+ project_id=project_id,
123
+ user_id=user_id,
124
+ source_session_id=session_id,
125
+ runtime_snapshot=runtime_snapshot,
126
+ )
127
+ if project_memory_record:
128
+ memory_record.update(project_memory_record)
120
129
  has_llm_content = bool(str(content_text or "").strip())
121
130
  apply_completion_content_policy_from_router(
122
131
  orchestration_status=orchestration_status,
@@ -69,6 +69,31 @@ def _format_recent_turns(turns: Any, *, limit: int) -> str:
69
69
  return " || ".join(parts)
70
70
 
71
71
 
72
+ def _format_project_memories(memories: Any, *, limit: int) -> str:
73
+ """Format recalled Project Memory records for prompt context.
74
+
75
+ Args:
76
+ memories: Recalled memory records.
77
+ limit: Maximum number of memory records to include.
78
+
79
+ Returns:
80
+ Compact Project Memory text block.
81
+ """
82
+
83
+ if not isinstance(memories, list):
84
+ return ""
85
+ parts: list[str] = []
86
+ for item in memories[:limit]:
87
+ if not isinstance(item, dict):
88
+ continue
89
+ memory_type = _clean_context_text(item.get("memory_type"))
90
+ content = _clean_context_text(item.get("content"))
91
+ if not content:
92
+ continue
93
+ parts.append(f"{memory_type}: {content}" if memory_type else content)
94
+ return "; ".join(parts)
95
+
96
+
72
97
  def _append_session_context_prompt_parts(prompt_parts: list[str], payload: dict[str, Any]) -> None:
73
98
  session_context = payload.get("session_context")
74
99
  if not isinstance(session_context, dict) or not session_context:
@@ -93,6 +118,25 @@ def _append_session_context_prompt_parts(prompt_parts: list[str], payload: dict[
93
118
  prompt_parts.append(f"session_context_recent_turns: {recent_turns}")
94
119
 
95
120
 
121
+ def _append_project_memory_prompt_parts(prompt_parts: list[str], payload: dict[str, Any]) -> None:
122
+ """Append project-level recalled memory to prompt parts.
123
+
124
+ Args:
125
+ prompt_parts: Mutable prompt line list.
126
+ payload: Enriched kernel payload.
127
+
128
+ Returns:
129
+ None.
130
+ """
131
+
132
+ recall = payload.get("project_memory_recall")
133
+ if not isinstance(recall, dict) or not recall:
134
+ return
135
+ memories = _format_project_memories(recall.get("memories"), limit=5)
136
+ if memories:
137
+ prompt_parts.append(f"project_memory: {memories}")
138
+
139
+
96
140
  def _append_track_prompt_parts(prompt_parts: list[str], payload: dict[str, Any]) -> None:
97
141
  track = payload.get("track_result")
98
142
  if not isinstance(track, dict) or not track:
@@ -123,6 +167,7 @@ def _append_understanding_summary_prompt_part(prompt_parts: list[str], payload:
123
167
 
124
168
 
125
169
  __all__ = [
170
+ "_append_project_memory_prompt_parts",
126
171
  "_append_session_context_prompt_parts",
127
172
  "_append_track_prompt_parts",
128
173
  "_append_understanding_summary_prompt_part",
@@ -7,6 +7,7 @@ from typing import Any, Callable
7
7
 
8
8
  from flare_kernel.contracts import KernelRequest
9
9
  from flare_kernel.router.prompting.context_blocks import (
10
+ _append_project_memory_prompt_parts,
10
11
  _append_session_context_prompt_parts,
11
12
  _append_track_prompt_parts,
12
13
  _append_understanding_summary_prompt_part,
@@ -100,6 +101,7 @@ def build_prompt(
100
101
  if product_name:
101
102
  prompt_parts.append(f"product_name: {product_name}")
102
103
  _append_session_context_prompt_parts(prompt_parts, payload)
104
+ _append_project_memory_prompt_parts(prompt_parts, payload)
103
105
  _append_track_prompt_parts(prompt_parts, payload)
104
106
  append_response_strategy_prompt_parts(prompt_parts, payload)
105
107
  _append_understanding_summary_prompt_part(prompt_parts, payload)
@@ -7,6 +7,7 @@ from typing import Any, Callable
7
7
 
8
8
  from flare_kernel.contracts import KernelRequest
9
9
  from flare_kernel.runtime.llm.llm_provider import LLMCompletion
10
+ from flare_kernel.runtime.project_memory import persist_project_memory_from_runtime
10
11
 
11
12
 
12
13
  _PLAN_MODE_FINALIZE_COMMANDS = {"implement", "apply"}
@@ -100,6 +101,14 @@ async def resolve_draft_completion_artifacts(
100
101
  model=completion.model,
101
102
  provider_status=completion.status,
102
103
  )
104
+ project_memory_record = persist_project_memory_from_runtime(
105
+ project_id=project_id,
106
+ user_id=user_id,
107
+ source_session_id=session_id,
108
+ runtime_snapshot=runtime_snapshot,
109
+ )
110
+ if project_memory_record:
111
+ memory_record.update(project_memory_record)
103
112
 
104
113
  observation_runtime_event = {
105
114
  "trace_id": trace_id,
@@ -2,9 +2,15 @@
2
2
 
3
3
  from flare_kernel.runtime.project_memory.extraction import extract_project_memory_candidates
4
4
  from flare_kernel.runtime.project_memory.recall import build_project_memory_recall, recall_project_memory
5
+ from flare_kernel.runtime.project_memory.runtime import (
6
+ build_project_memory_context_layer,
7
+ persist_project_memory_from_runtime,
8
+ )
5
9
 
6
10
  __all__ = [
7
11
  "build_project_memory_recall",
12
+ "build_project_memory_context_layer",
8
13
  "extract_project_memory_candidates",
14
+ "persist_project_memory_from_runtime",
9
15
  "recall_project_memory",
10
16
  ]
@@ -0,0 +1,144 @@
1
+ """Project Memory runtime orchestration helpers."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import Any, Callable
6
+
7
+ from flare_kernel.runtime.infrastructure.project_memory_store import (
8
+ search_project_memory_records,
9
+ upsert_project_memory_record,
10
+ )
11
+ from flare_kernel.runtime.project_memory.extraction import extract_project_memory_candidates
12
+ from flare_kernel.runtime.project_memory.recall import recall_project_memory
13
+
14
+
15
+ def _as_dict(value: Any) -> dict[str, Any]:
16
+ """Return dict-shaped values only.
17
+
18
+ Args:
19
+ value: Candidate runtime value.
20
+
21
+ Returns:
22
+ Original dict or an empty dict.
23
+ """
24
+
25
+ return value if isinstance(value, dict) else {}
26
+
27
+
28
+ def _clean_text(value: Any) -> str:
29
+ """Normalize text-like values.
30
+
31
+ Args:
32
+ value: Raw value.
33
+
34
+ Returns:
35
+ Whitespace-normalized string.
36
+ """
37
+
38
+ return " ".join(str(value or "").split()).strip()
39
+
40
+
41
+ def build_project_memory_context_layer(
42
+ *,
43
+ project_id: str | None,
44
+ user_id: str | None,
45
+ query: str | None,
46
+ top_k: int = 5,
47
+ search_project_memory_records_fn: Callable[..., list[dict[str, Any]]] = search_project_memory_records,
48
+ ) -> dict[str, Any]:
49
+ """Build the Project Memory recall layer for one turn.
50
+
51
+ Args:
52
+ project_id: Project scope used for recall.
53
+ user_id: User scope used for recall.
54
+ query: User/query text used to recall memory.
55
+ top_k: Maximum number of records to request.
56
+ search_project_memory_records_fn: Persistence search boundary.
57
+
58
+ Returns:
59
+ ProjectMemoryRecall dict, or empty dict when scope/query is missing.
60
+ """
61
+
62
+ resolved_project_id = _clean_text(project_id)
63
+ resolved_user_id = _clean_text(user_id)
64
+ resolved_query = _clean_text(query)
65
+ if not resolved_project_id or not resolved_user_id or not resolved_query:
66
+ return {}
67
+ return recall_project_memory(
68
+ project_id=resolved_project_id,
69
+ user_id=resolved_user_id,
70
+ query=resolved_query,
71
+ top_k=top_k,
72
+ search_project_memory_records_fn=search_project_memory_records_fn,
73
+ )
74
+
75
+
76
+ def persist_project_memory_from_runtime(
77
+ *,
78
+ project_id: str | None,
79
+ user_id: str | None,
80
+ source_session_id: str | None,
81
+ runtime_snapshot: dict[str, Any],
82
+ upsert_project_memory_record_fn: Callable[..., dict[str, Any]] = upsert_project_memory_record,
83
+ ) -> dict[str, Any]:
84
+ """Persist Project Memory candidates extracted from runtime outputs.
85
+
86
+ Args:
87
+ project_id: Project scope used for persistence.
88
+ user_id: User scope used for persistence.
89
+ source_session_id: Session that produced the runtime outputs.
90
+ runtime_snapshot: Kernel runtime snapshot containing context outputs.
91
+ upsert_project_memory_record_fn: Persistence upsert boundary.
92
+
93
+ Returns:
94
+ Project Memory persistence status dict, or empty dict when skipped.
95
+ """
96
+
97
+ resolved_project_id = _clean_text(project_id)
98
+ resolved_user_id = _clean_text(user_id)
99
+ if not resolved_project_id or not resolved_user_id:
100
+ return {}
101
+
102
+ candidates = extract_project_memory_candidates(
103
+ context=_as_dict(runtime_snapshot.get("session_context")),
104
+ reasoning_result=_as_dict(runtime_snapshot.get("reasoning_result")),
105
+ document_result=_as_dict(runtime_snapshot.get("document_result")),
106
+ track_result=_as_dict(runtime_snapshot.get("track_result")),
107
+ source_session_id=source_session_id,
108
+ )
109
+ if not candidates:
110
+ return {}
111
+
112
+ memory_ids: list[str] = []
113
+ try:
114
+ for candidate in candidates:
115
+ stored = upsert_project_memory_record_fn(
116
+ project_id=resolved_project_id,
117
+ user_id=resolved_user_id,
118
+ content=str(candidate.get("content") or ""),
119
+ memory_type=str(candidate.get("memory_type") or "fact"),
120
+ source_session_id=str(candidate.get("source_session_id") or ""),
121
+ source_message_id=str(candidate.get("source_message_id") or ""),
122
+ source_id=str(candidate.get("source_id") or ""),
123
+ evidence=candidate.get("evidence") if isinstance(candidate.get("evidence"), list) else [],
124
+ confidence=candidate.get("confidence"),
125
+ status="active",
126
+ )
127
+ memory_id = _clean_text(stored.get("memory_id") if isinstance(stored, dict) else "")
128
+ if memory_id:
129
+ memory_ids.append(memory_id)
130
+ except Exception as exc:
131
+ return {
132
+ "project_memory_stored": False,
133
+ "project_memory_status": "failed",
134
+ "project_memory_error": str(exc),
135
+ "project_memory_count": len(memory_ids),
136
+ "project_memory_ids": memory_ids,
137
+ }
138
+
139
+ return {
140
+ "project_memory_stored": bool(memory_ids),
141
+ "project_memory_status": "stored" if memory_ids else "skipped",
142
+ "project_memory_count": len(memory_ids),
143
+ "project_memory_ids": memory_ids,
144
+ }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: flare-kernel
3
- Version: 0.2.6
3
+ Version: 0.2.7
4
4
  Summary: FLARE kernel runtime package
5
5
  License: Proprietary
6
6
  Classifier: Development Status :: 3 - Alpha
@@ -289,6 +289,7 @@ src/flare_kernel/runtime/orchestration/sourcing/search_runtime.py
289
289
  src/flare_kernel/runtime/project_memory/__init__.py
290
290
  src/flare_kernel/runtime/project_memory/extraction.py
291
291
  src/flare_kernel/runtime/project_memory/recall.py
292
+ src/flare_kernel/runtime/project_memory/runtime.py
292
293
  src/flare_kernel/runtime/reasoning/__init__.py
293
294
  src/flare_kernel/runtime/reasoning/intake/__init__.py
294
295
  src/flare_kernel/runtime/reasoning/intake/api.py
@@ -72,6 +72,57 @@ def test_prepare_kernel_turn_context_flow_builds_expected_shape() -> None:
72
72
  assert isinstance(result["structured_retrieved_knowledge"], list)
73
73
 
74
74
 
75
+ def test_prepare_kernel_turn_context_flow_injects_project_memory_recall() -> None:
76
+ req = KernelRequest(payload={"message": "预算", "project_id": "p1", "user_id": "u1"})
77
+
78
+ async def _run() -> dict:
79
+ return await prepare_kernel_turn_context_flow(
80
+ req=req,
81
+ resolve_trace_id_fn=lambda _t: "trace-memory",
82
+ resolve_command_fn=lambda _r: "send_message",
83
+ safe_session_id_fn=lambda _s: "session-memory",
84
+ load_instance_profile_fn=lambda _i: None,
85
+ resolve_intent_escalation_policy_with_source_fn=lambda **_kwargs: ({}, "default"),
86
+ resolve_request_intent_with_ai_fn=lambda _r, _t: _async_tuple(("default", "fallback", 0.2, "none")),
87
+ extract_user_message_fn=lambda payload: str((payload or {}).get("message") or ""),
88
+ build_intent_and_escalation_signal_fn=lambda **_kwargs: {"signal": "ok"},
89
+ resolve_request_mode_fn=lambda _r, _i: ("default", "fallback"),
90
+ apply_escalation_mode_override_fn=lambda **kwargs: (
91
+ kwargs["resolved_intent"],
92
+ kwargs["intent_source"],
93
+ kwargs["intent_confidence"],
94
+ kwargs["intent_reason"],
95
+ kwargs["resolved_mode"],
96
+ kwargs["mode_source"],
97
+ ),
98
+ resolve_project_id_fn=lambda _r, payload: str(payload.get("project_id") or ""),
99
+ resolve_user_id_fn=lambda _r, payload: str(payload.get("user_id") or ""),
100
+ resolve_retrieval_config_fn=lambda _r, _p: {"enabled": False, "top_k": 3, "min_score": 0.1},
101
+ build_retrieval_queries_fn=lambda _r, **_kwargs: [],
102
+ search_knowledge_by_queries_fn=lambda **_kwargs: [],
103
+ enrich_payload_fn=lambda _r, **_kwargs: {"message": "预算"},
104
+ build_project_memory_context_layer_fn=lambda **_kwargs: {
105
+ "project_id": "p1",
106
+ "user_id": "u1",
107
+ "query": "预算",
108
+ "hit_count": 1,
109
+ "memory_ids": ["pmem-1"],
110
+ "memories": [{"memory_id": "pmem-1", "memory_type": "fact", "content": "预算上限为 20 万。"}],
111
+ "degraded": False,
112
+ },
113
+ build_kernel_runtime_fn=lambda **kwargs: {"payload": kwargs["payload"], "open_fields": []},
114
+ build_orchestration_status_fn=lambda **_kwargs: {"open_fields": [], "status": "ok"},
115
+ merge_intent_and_escalation_signal_fn=lambda **kwargs: kwargs["orchestration_status"],
116
+ resolve_effective_command_fn=lambda **_kwargs: "send_message",
117
+ build_structured_search_results_fn=lambda **_kwargs: [],
118
+ )
119
+
120
+ result = asyncio.run(_run())
121
+ recall = result["enriched_payload"]["project_memory_recall"]
122
+ assert recall["hit_count"] == 1
123
+ assert result["runtime_snapshot"]["payload"]["project_memory_recall"] == recall
124
+
125
+
75
126
  def test_prepare_kernel_turn_context_flow_injects_structured_reasoning_before_runtime() -> None:
76
127
  req = KernelRequest(payload={"message": "我要举办展厅"})
77
128
  captured_runtime_payload = {}
@@ -1,7 +1,9 @@
1
1
  from flare_kernel.contracts import ProjectMemoryCandidate, ProjectMemoryRecall
2
2
  from flare_kernel.runtime.project_memory import (
3
+ build_project_memory_context_layer,
3
4
  build_project_memory_recall,
4
5
  extract_project_memory_candidates,
6
+ persist_project_memory_from_runtime,
5
7
  recall_project_memory,
6
8
  )
7
9
 
@@ -100,3 +102,48 @@ def test_recall_project_memory_returns_degraded_payload_on_search_failure() -> N
100
102
  assert payload["hit_count"] == 0
101
103
  assert payload["memory_ids"] == []
102
104
  assert payload["degraded"] is True
105
+
106
+
107
+ def test_build_project_memory_context_layer_uses_recall_boundary() -> None:
108
+ def _search(**kwargs):
109
+ assert kwargs["project_id"] == "project-1"
110
+ assert kwargs["user_id"] == "user-1"
111
+ assert kwargs["query"] == "预算"
112
+ return [{"memory_id": "pmem-1", "memory_type": "fact", "content": "预算上限为 20 万。"}]
113
+
114
+ payload = build_project_memory_context_layer(
115
+ project_id="project-1",
116
+ user_id="user-1",
117
+ query="预算",
118
+ search_project_memory_records_fn=_search,
119
+ )
120
+
121
+ assert payload["hit_count"] == 1
122
+ assert payload["memory_ids"] == ["pmem-1"]
123
+
124
+
125
+ def test_persist_project_memory_from_runtime_upserts_extracted_candidates() -> None:
126
+ stored = []
127
+
128
+ def _upsert(**kwargs):
129
+ stored.append(kwargs)
130
+ return {"memory_id": f"pmem-{len(stored)}"}
131
+
132
+ result = persist_project_memory_from_runtime(
133
+ project_id="project-1",
134
+ user_id="user-1",
135
+ source_session_id="session-1",
136
+ runtime_snapshot={
137
+ "session_context": {
138
+ "facts": [{"text": "预算上限为 20 万。"}],
139
+ "unknowns": [{"text": "交付周期待确认。"}],
140
+ }
141
+ },
142
+ upsert_project_memory_record_fn=_upsert,
143
+ )
144
+
145
+ assert result["project_memory_stored"] is True
146
+ assert result["project_memory_count"] == 2
147
+ assert result["project_memory_ids"] == ["pmem-1", "pmem-2"]
148
+ assert stored[0]["project_id"] == "project-1"
149
+ assert stored[0]["source_session_id"] == "session-1"
@@ -74,6 +74,27 @@ def test_prompt_includes_session_context_for_model_grounding() -> None:
74
74
  assert "session_context_artifacts: 分析报告模板(template): 用于输出分析报告" in prompt
75
75
 
76
76
 
77
+ def test_prompt_includes_project_memory_for_project_grounding() -> None:
78
+ prompt = _build_prompt_for_test(
79
+ intent="requirement_canvas",
80
+ payload={
81
+ "message": "继续分析预算",
82
+ "project_memory_recall": {
83
+ "hit_count": 1,
84
+ "memories": [
85
+ {
86
+ "memory_id": "pmem-1",
87
+ "memory_type": "fact",
88
+ "content": "预算上限为 20 万。",
89
+ }
90
+ ],
91
+ },
92
+ },
93
+ )
94
+
95
+ assert "project_memory: fact: 预算上限为 20 万。" in prompt
96
+
97
+
77
98
  def test_prompt_includes_confirmed_fields_and_recent_turns_for_followup_grounding() -> None:
78
99
  prompt = _build_prompt_for_test(
79
100
  intent="requirement_canvas",
File without changes
File without changes