flare-kernel 0.2.5__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.
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/PKG-INFO +1 -1
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/pyproject.toml +1 -1
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/contracts/__init__.py +8 -0
- flare_kernel-0.2.7/src/flare_kernel/contracts/project_memory_contract.py +85 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/kernel_facade/dependency_resolution.py +3 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/kernel_facade/flow.py +12 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/kernel_facade/turn_context.py +5 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/kernel_route/run.py +9 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/prompting/context_blocks.py +45 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/prompting/core.py +2 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/streaming/draft/completion.py +9 -0
- flare_kernel-0.2.7/src/flare_kernel/runtime/infrastructure/project_memory_codec.py +231 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/infrastructure/project_memory_store.py +93 -117
- flare_kernel-0.2.7/src/flare_kernel/runtime/project_memory/__init__.py +16 -0
- flare_kernel-0.2.7/src/flare_kernel/runtime/project_memory/extraction.py +273 -0
- flare_kernel-0.2.7/src/flare_kernel/runtime/project_memory/recall.py +118 -0
- flare_kernel-0.2.7/src/flare_kernel/runtime/project_memory/runtime.py +144 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel.egg-info/PKG-INFO +1 -1
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel.egg-info/SOURCES.txt +7 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_kernel_facade_turn_context.py +51 -0
- flare_kernel-0.2.7/tests/test_project_memory_runtime.py +149 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_prompting_analysis_instruction.py +21 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/README.md +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/setup.cfg +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/__init__.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/app.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/contracts/context.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/contracts/kernel_contract.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/contracts/mode.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/contracts/project_contract.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/contracts/session_contract.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/main.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/project_store.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/__init__.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/api/__init__.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/api/chat.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/api/errors.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/api/project.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/api/session.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/canonical/__init__.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/canonical/analysis.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/canonical/checkpoint.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/canonical/context/__init__.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/canonical/context/analysis.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/canonical/context/inputs.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/canonical/context/session.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/canonical/contract_support.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/canonical/flow.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/canonical/payload.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/canonical/projection.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/completion/__init__.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/completion/guided.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/completion/response_builder.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/completion/selection.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/context/__init__.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/context/endpoint.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/context/sourcing_preview.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/__init__.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/amount_quantity.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/answer.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/authority/__init__.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/authority/checkpoint.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/authority/core.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/authority/hydration.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/authority/session.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/canonicalization.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/clarification.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/decision_rules.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/deployment_delivery.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/entry_policy.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/extraction/__init__.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/extraction/core.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/extraction/extractors.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/extraction/merge.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/field_projection/__init__.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/field_projection/core.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/field_projection/entity.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/field_projection/payload.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/field_projection/source.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/field_scope.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/guided/__init__.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/guided/confirmed_updates.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/guided/flags.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/guided/followup.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/guided/followup_work_item.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/guided/open_fields.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/guided/status.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/guided/summary.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/inputs.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/node_state.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/numeric.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/payload_updates.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/readiness.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/state_persistence.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/status/__init__.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/status/chooser_stage.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/status/core.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/status/guided_session.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/status/projection.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/status/schema.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/intake/workflow_checkpoint.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/intent/__init__.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/intent/classifier_utils.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/intent/compat_aliases.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/intent/escalation/__init__.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/intent/escalation/override.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/intent/escalation/pipeline.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/intent/escalation/signal.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/intent/routing.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/intent/session_intent/__init__.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/intent/session_intent/core.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/intent/session_intent/fields.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/intent/session_intent/small_talk.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/kernel.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/kernel_constants/__init__.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/kernel_constants/intake.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/kernel_constants/intent.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/kernel_constants/patch.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/kernel_endpoint_handlers/__init__.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/kernel_endpoint_handlers/health.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/kernel_endpoint_handlers/knowledge.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/kernel_endpoint_handlers/sourcing.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/kernel_endpoint_handlers/turn.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/kernel_facade/__init__.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/kernel_facade/canonical_state.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/kernel_facade/orchestration.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/kernel_facade/payload_enrichment.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/kernel_facade/utils.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/kernel_flow_bindings/__init__.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/kernel_flow_bindings/intent_query.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/kernel_flow_bindings/mode.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/kernel_flow_bindings/session_intent.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/kernel_request_pipeline/__init__.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/kernel_request_pipeline/action.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/kernel_request_pipeline/intake.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/kernel_request_pipeline/intent_query.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/kernel_request_pipeline/intent_signal.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/kernel_route/__init__.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/kernel_route/action.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/kernel_route/execution.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/kernel_route/stream.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/mode/__init__.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/mode/resolution.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/mode/switch.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/next_actions_guard.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/orchestration/__init__.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/orchestration/status/__init__.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/orchestration/status/actions.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/orchestration/status/builder.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/orchestration/status/checkpoint_state.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/orchestration/status/context.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/orchestration/status/context_helpers.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/orchestration/status/core.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/orchestration/status/decision.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/orchestration/status/followup_state.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/orchestration/status/projection.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/orchestration/status/result.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/orchestration/status/runtime_state.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/orchestration/status/state/__init__.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/orchestration/status/state/context.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/orchestration/status/state/decision.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/orchestration/status/state/entry.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/orchestration/status/state/flow.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/orchestration/status/state/followup.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/orchestration/status/state/intent.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/orchestration/status/state/node.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/orchestration/status/state/payload.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/orchestration/status/state/unpack.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/orchestration/trace/__init__.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/orchestration/trace/core.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/orchestration/trace/projection.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/orchestration/trace/steps.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/patch_contract.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/payload/__init__.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/payload/action.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/payload/analysis_canvas.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/payload/enrichment.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/prompting/__init__.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/prompting/response_strategy.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/request/__init__.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/request/identity.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/request/intent_resolution.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/retrieval/__init__.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/retrieval/aliases.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/retrieval/field_queries.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/retrieval/projection.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/retrieval/query_builder.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/retrieval/search.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/source_library.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/streaming/__init__.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/streaming/draft/__init__.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/streaming/draft/finalize.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/streaming/draft/phase.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/streaming/draft/phase_timing.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/streaming/draft/post_completion.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/streaming/draft/prologue.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/streaming/event_emitter.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/streaming/intake/__init__.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/streaming/intake/phase.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/streaming/mode/__init__.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/streaming/mode/event_payload.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/streaming/mode/events.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/streaming/response/__init__.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/streaming/response/bootstrap.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/streaming/response/builder.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/streaming/response/builder_transport.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/streaming/response/draft_phase.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/streaming/response/phase_groups.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/streaming/response/phases.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/streaming/response/runtime.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/streaming/retrieval/__init__.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/streaming/retrieval/phase.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/streaming/runtime/__init__.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/streaming/runtime/steps.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/text_safety.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/__init__.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/context/__init__.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/context/document_application.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/context/reasoning_application.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/context/session_context.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/context/track_application.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/domain/__init__.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/domain/domain_pack_loader.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/domain/profile_resolution.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/execution/__init__.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/execution/agent_runtime.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/execution/skill_runtime.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/infrastructure/__init__.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/infrastructure/chat_memory.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/infrastructure/database.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/infrastructure/dependency_status.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/infrastructure/infrastructure.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/infrastructure/knowledge_ingest.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/infrastructure/knowledge_memory.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/infrastructure/knowledge_postgres_search.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/infrastructure/knowledge_qdrant_search.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/infrastructure/knowledge_search.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/infrastructure/knowledge_terms.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/infrastructure/logging.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/infrastructure/project_memory_sql.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/infrastructure/redis_client.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/infrastructure/session/__init__.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/infrastructure/session/repository.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/infrastructure/session/repository_memory.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/infrastructure/source/__init__.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/infrastructure/source/library_persistence.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/infrastructure/source/text_extractor.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/infrastructure/sourcing/__init__.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/infrastructure/sourcing/persistence.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/infrastructure/sourcing/provider.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/infrastructure/trace.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/infrastructure/vector_store.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/intent/__init__.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/intent/intent_and_escalation/__init__.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/intent/intent_and_escalation/decision.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/intent/intent_and_escalation/lexicon.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/intent/intent_and_escalation/preprocessing.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/intent/intent_and_escalation/signals.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/intent/intent_and_escalation_classifier.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/llm/__init__.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/llm/llm_provider.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/llm/model_router.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/orchestration/__init__.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/orchestration/analysis_router_runtime.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/orchestration/canvas_sourcing_contract.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/orchestration/decision_engine.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/orchestration/mode/__init__.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/orchestration/mode/orchestration.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/orchestration/mode/plan/__init__.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/orchestration/mode/plan/canvas.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/orchestration/mode/plan/core.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/orchestration/mode/plan/followup.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/orchestration/mode/plan/payload.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/orchestration/mode/plan/question.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/orchestration/mode/plan/question_steps.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/orchestration/mode/plan/session.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/orchestration/mode/plan/stage.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/orchestration/mode/plan/summary.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/orchestration/mode/plan/trace.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/orchestration/mode/reasoning.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/orchestration/mode/runtime.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/orchestration/mode_orchestration_plan_question.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/orchestration/mode_orchestration_plan_question_steps.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/orchestration/observation.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/orchestration/response_strategy_runtime.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/orchestration/session_context_runtime.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/orchestration/sourcing/__init__.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/orchestration/sourcing/event_payloads.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/orchestration/sourcing/search_runtime.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/orchestration/structured_reasoning.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/orchestration/track_runtime.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/reasoning/__init__.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/reasoning/intake/__init__.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/reasoning/intake/api.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/reasoning/intake/branching/__init__.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/reasoning/intake/branching/core.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/reasoning/intake/branching/policy.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/reasoning/intake/context.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/reasoning/intake/field_selection.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/reasoning/intake/gap_detection.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/reasoning/intake/hypothesis.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/reasoning/intake/planning.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/reasoning/intake/priority.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/reasoning/intake/question/__init__.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/reasoning/intake/question/builder.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/reasoning/intake/question/extraction.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/reasoning/intake/question/planner.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/reasoning/intake/readiness/__init__.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/reasoning/intake/readiness/core.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/reasoning/intake/readiness/scoring.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/reasoning/intake/shared.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/reasoning/intake/understanding_state.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/reasoning/intake/visible_response.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/session/__init__.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/session/checkpoint_manager.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/session/intake_session_store.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/session/models.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/source_ingestion/__init__.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/source_ingestion/artifacts.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/source_ingestion/chunk_storage.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/source_ingestion/knowledge_storage.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/source_ingestion/runtime.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/runtime/source_ingestion/storage.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/session_record_policy.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/session_store.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/user_store.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel.egg-info/dependency_links.txt +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel.egg-info/requires.txt +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel.egg-info/top_level.txt +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_action_payload.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_analysis_canvas_payload.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_analysis_route_projection.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_basics.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_builder_split_modules.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_business_hardcode_guard.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_canonical_state_context_analysis.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_canonical_state_context_inputs.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_canonical_state_context_session.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_canonical_state_flow.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_canonical_state_payload.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_canonical_state_projection.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_canvas_sourcing_contract_meta.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_chat_api_alias.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_command_resolution_analysis_mode.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_compat_aliases.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_completion_response_builder.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_completion_selection.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_decision_engine.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_domain_pack_loader.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_endpoint_context.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_flare_v1_patch_contract.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_guided_completion.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_infrastructure_helpers.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_infrastructure_knowledge.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_intake_amount_quantity.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_intake_answer.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_intake_authority.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_intake_authority_checkpoint.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_intake_authority_hydration.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_intake_authority_session.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_intake_canonicalization.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_intake_clarification.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_intake_decision_rules.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_intake_deployment_delivery.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_intake_domain_context_options.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_intake_entry_policy.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_intake_extraction.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_intake_extraction_extractors.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_intake_extraction_merge.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_intake_field_projection.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_intake_field_projection_entity.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_intake_field_projection_payload.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_intake_field_projection_source.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_intake_field_scope.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_intake_guided_confirmed_updates.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_intake_guided_flags.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_intake_guided_followup.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_intake_guided_followup_work_item.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_intake_guided_open_fields.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_intake_guided_status.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_intake_guided_summary.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_intake_inputs.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_intake_node_state.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_intake_numeric.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_intake_payload_updates.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_intake_readiness.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_intake_reasoning_priority.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_intake_state_persistence.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_intake_status.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_intake_status_guided_session.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_intake_status_projection.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_intake_status_schema.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_intake_status_stage.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_intake_workflow_checkpoint.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_intent_classifier_utils.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_intent_escalation_classifier.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_intent_escalation_override.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_intent_escalation_pipeline.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_intent_escalation_signal.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_intent_resolution.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_intent_retrieval.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_intent_routing.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_intent_type_compat_aliases.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_kernel_alias_delegation.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_kernel_endpoint_handlers.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_kernel_endpoint_handlers_sourcing.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_kernel_facade_helpers.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_kernel_intent_query_flow.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_kernel_mode_flow.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_kernel_route_execution_wrappers.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_kernel_session_intent_flow.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_llm_provider.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_mode_orchestration_plan_canvas_saved_content.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_mode_orchestration_plan_finalize.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_mode_orchestration_plan_runtime_payload.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_mode_orchestration_state_bridge.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_mode_reasoning.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_mode_resolution.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_mode_switch.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_model_router.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_new_flow_guard.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_orchestration_checkpoint_state.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_orchestration_followup_state.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_orchestration_status_context.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_orchestration_status_context_helpers.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_orchestration_status_decision.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_orchestration_status_projection.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_orchestration_status_result.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_orchestration_status_runtime_state.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_orchestration_status_state_context.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_orchestration_status_state_decision.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_orchestration_status_state_entry.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_orchestration_status_state_followup.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_orchestration_status_state_intent.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_orchestration_status_state_node.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_orchestration_status_state_payload.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_orchestration_status_state_unpack.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_orchestration_trace.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_orchestration_trace_projection.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_orchestration_trace_steps.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_patch_contract.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_payload_enrichment.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_project_api.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_project_memory_store.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_request_identity.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_request_intent_resolution.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_response_strategy_runtime.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_retrieval_aliases.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_retrieval_field_queries.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_retrieval_projection.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_retrieval_query_builder.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_retrieval_search.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_session_api.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_session_context_persistence.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_session_intent.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_session_intent_fields.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_session_intent_small_talk.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_source_ingestion_runtime.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_source_ingestion_ssot_acceptance.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_source_library.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_source_library_persistence_scope.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_source_text_extractor.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_sourcing_provider.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_sourcing_search_runtime.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_streaming_draft_completion.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_streaming_draft_finalize.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_streaming_draft_phase.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_streaming_draft_post_completion.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_streaming_draft_prologue.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_streaming_event_emitter.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_streaming_intake_phase.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_streaming_mode_event_payload.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_streaming_mode_events.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_streaming_response_bootstrap.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_streaming_response_phases.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_streaming_response_runtime.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_streaming_retrieval_phase.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_streaming_runtime_steps.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_text_safety.py +0 -0
- {flare_kernel-0.2.5 → flare_kernel-0.2.7}/tests/test_track_runtime.py +0 -0
|
@@ -32,6 +32,11 @@ from flare_kernel.contracts.project_contract import (
|
|
|
32
32
|
ProjectsResponse,
|
|
33
33
|
ProjectUpsertRequest,
|
|
34
34
|
)
|
|
35
|
+
from flare_kernel.contracts.project_memory_contract import (
|
|
36
|
+
ProjectMemoryCandidate,
|
|
37
|
+
ProjectMemoryRecall,
|
|
38
|
+
ProjectMemoryRecord,
|
|
39
|
+
)
|
|
35
40
|
from flare_kernel.contracts.session_contract import (
|
|
36
41
|
SessionAppendExchangeRequest,
|
|
37
42
|
SessionCreateRequest,
|
|
@@ -72,6 +77,9 @@ __all__ = [
|
|
|
72
77
|
"ProjectRecord",
|
|
73
78
|
"ProjectUpsertRequest",
|
|
74
79
|
"ProjectsResponse",
|
|
80
|
+
"ProjectMemoryCandidate",
|
|
81
|
+
"ProjectMemoryRecord",
|
|
82
|
+
"ProjectMemoryRecall",
|
|
75
83
|
"SessionRecord",
|
|
76
84
|
"SessionCreateRequest",
|
|
77
85
|
"SessionUpdateRequest",
|
|
@@ -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
|
|
@@ -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
|
|
{flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/kernel_facade/turn_context.py
RENAMED
|
@@ -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,
|
{flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/prompting/context_blocks.py
RENAMED
|
@@ -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)
|
{flare_kernel-0.2.5 → flare_kernel-0.2.7}/src/flare_kernel/router/streaming/draft/completion.py
RENAMED
|
@@ -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,
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
"""Project Memory storage codecs and validation helpers."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import json
|
|
6
|
+
import uuid
|
|
7
|
+
from datetime import UTC, datetime
|
|
8
|
+
from typing import Any
|
|
9
|
+
|
|
10
|
+
from flare_kernel.contracts.project_memory_contract import ProjectMemoryRecord
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def utcnow_iso() -> str:
|
|
14
|
+
"""Return the current UTC timestamp for durable rows.
|
|
15
|
+
|
|
16
|
+
Returns:
|
|
17
|
+
ISO formatted UTC datetime string.
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
return datetime.now(UTC).isoformat()
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def normalize_project_memory_text(value: Any) -> str:
|
|
24
|
+
"""Normalize arbitrary input into compact text.
|
|
25
|
+
|
|
26
|
+
Args:
|
|
27
|
+
value: Raw value from caller or database row.
|
|
28
|
+
|
|
29
|
+
Returns:
|
|
30
|
+
Whitespace-normalized string.
|
|
31
|
+
"""
|
|
32
|
+
|
|
33
|
+
return " ".join(str(value or "").split()).strip()
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def normalize_project_memory_status(value: Any) -> str:
|
|
37
|
+
"""Normalize memory lifecycle status.
|
|
38
|
+
|
|
39
|
+
Args:
|
|
40
|
+
value: Raw status value.
|
|
41
|
+
|
|
42
|
+
Returns:
|
|
43
|
+
Non-empty status string, defaulting to active.
|
|
44
|
+
"""
|
|
45
|
+
|
|
46
|
+
return normalize_project_memory_text(value) or "active"
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def normalize_project_memory_confidence(value: Any) -> float | None:
|
|
50
|
+
"""Normalize confidence to a float when possible.
|
|
51
|
+
|
|
52
|
+
Args:
|
|
53
|
+
value: Raw confidence value.
|
|
54
|
+
|
|
55
|
+
Returns:
|
|
56
|
+
Float confidence, or None when unavailable/invalid.
|
|
57
|
+
"""
|
|
58
|
+
|
|
59
|
+
if value is None:
|
|
60
|
+
return None
|
|
61
|
+
try:
|
|
62
|
+
return float(value)
|
|
63
|
+
except (TypeError, ValueError):
|
|
64
|
+
return None
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
def json_dumps_evidence(value: Any) -> str:
|
|
68
|
+
"""Serialize evidence-like values for SQL storage.
|
|
69
|
+
|
|
70
|
+
Args:
|
|
71
|
+
value: Evidence value supplied by caller.
|
|
72
|
+
|
|
73
|
+
Returns:
|
|
74
|
+
JSON string persisted in evidence_json.
|
|
75
|
+
"""
|
|
76
|
+
|
|
77
|
+
return json.dumps(value if value is not None else [], ensure_ascii=False, sort_keys=True)
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
def json_loads_evidence(value: Any) -> Any:
|
|
81
|
+
"""Deserialize evidence_json from SQL storage.
|
|
82
|
+
|
|
83
|
+
Args:
|
|
84
|
+
value: Raw JSON string from database.
|
|
85
|
+
|
|
86
|
+
Returns:
|
|
87
|
+
Parsed JSON value, or an empty list on missing/invalid input.
|
|
88
|
+
"""
|
|
89
|
+
|
|
90
|
+
if not value:
|
|
91
|
+
return []
|
|
92
|
+
try:
|
|
93
|
+
return json.loads(str(value))
|
|
94
|
+
except json.JSONDecodeError:
|
|
95
|
+
return []
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
def build_project_memory_id() -> str:
|
|
99
|
+
"""Create a local Project Memory identifier.
|
|
100
|
+
|
|
101
|
+
Returns:
|
|
102
|
+
Stable id string with pmem_ prefix.
|
|
103
|
+
"""
|
|
104
|
+
|
|
105
|
+
return f"pmem_{uuid.uuid4().hex[:16]}"
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
def build_project_memory_params(
|
|
109
|
+
*,
|
|
110
|
+
memory_id: str | None,
|
|
111
|
+
project_id: str,
|
|
112
|
+
user_id: str,
|
|
113
|
+
source_session_id: str | None,
|
|
114
|
+
source_message_id: str | None,
|
|
115
|
+
source_id: str | None,
|
|
116
|
+
memory_type: str,
|
|
117
|
+
content: str,
|
|
118
|
+
evidence: list[dict[str, Any]] | None,
|
|
119
|
+
confidence: float | None,
|
|
120
|
+
status: str,
|
|
121
|
+
) -> dict[str, Any]:
|
|
122
|
+
"""Build normalized SQL parameters for an upsert.
|
|
123
|
+
|
|
124
|
+
Args:
|
|
125
|
+
memory_id: Optional existing memory id.
|
|
126
|
+
project_id: Owning project id.
|
|
127
|
+
user_id: Owning user id.
|
|
128
|
+
source_session_id: Producing session id, when available.
|
|
129
|
+
source_message_id: Producing message id, when available.
|
|
130
|
+
source_id: Producing source id, when available.
|
|
131
|
+
memory_type: Memory category.
|
|
132
|
+
content: Durable memory text.
|
|
133
|
+
evidence: Optional supporting snippets.
|
|
134
|
+
confidence: Optional confidence score.
|
|
135
|
+
status: Lifecycle status.
|
|
136
|
+
|
|
137
|
+
Returns:
|
|
138
|
+
SQL parameter dict for insert/update statements.
|
|
139
|
+
"""
|
|
140
|
+
|
|
141
|
+
now = utcnow_iso()
|
|
142
|
+
return {
|
|
143
|
+
"memory_id": normalize_project_memory_text(memory_id) or build_project_memory_id(),
|
|
144
|
+
"project_id": normalize_project_memory_text(project_id),
|
|
145
|
+
"user_id": normalize_project_memory_text(user_id),
|
|
146
|
+
"source_session_id": normalize_project_memory_text(source_session_id),
|
|
147
|
+
"source_message_id": normalize_project_memory_text(source_message_id),
|
|
148
|
+
"source_id": normalize_project_memory_text(source_id),
|
|
149
|
+
"memory_type": normalize_project_memory_text(memory_type) or "fact",
|
|
150
|
+
"content": str(content or "").strip(),
|
|
151
|
+
"evidence_json": json_dumps_evidence(evidence),
|
|
152
|
+
"confidence": confidence,
|
|
153
|
+
"status": normalize_project_memory_status(status),
|
|
154
|
+
"created_at": now,
|
|
155
|
+
"updated_at": now,
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
def row_to_project_memory_record(row: Any) -> dict[str, Any]:
|
|
160
|
+
"""Convert a SQL row into the public Project Memory record contract.
|
|
161
|
+
|
|
162
|
+
Args:
|
|
163
|
+
row: SQLAlchemy row mapping containing evidence_json.
|
|
164
|
+
|
|
165
|
+
Returns:
|
|
166
|
+
ProjectMemoryRecord as a dict.
|
|
167
|
+
"""
|
|
168
|
+
|
|
169
|
+
record = dict(row)
|
|
170
|
+
record["evidence"] = json_loads_evidence(record.pop("evidence_json", ""))
|
|
171
|
+
record["confidence"] = normalize_project_memory_confidence(record.get("confidence"))
|
|
172
|
+
return ProjectMemoryRecord.model_validate(record).model_dump()
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
def require_project_memory_scope(project_id: str, user_id: str) -> tuple[str, str]:
|
|
176
|
+
"""Validate and normalize required project/user scope.
|
|
177
|
+
|
|
178
|
+
Args:
|
|
179
|
+
project_id: Project id supplied by caller.
|
|
180
|
+
user_id: User id supplied by caller.
|
|
181
|
+
|
|
182
|
+
Returns:
|
|
183
|
+
Tuple of normalized project_id and user_id.
|
|
184
|
+
|
|
185
|
+
Raises:
|
|
186
|
+
ValueError: If either scope value is empty.
|
|
187
|
+
"""
|
|
188
|
+
|
|
189
|
+
resolved_project_id = normalize_project_memory_text(project_id)
|
|
190
|
+
resolved_user_id = normalize_project_memory_text(user_id)
|
|
191
|
+
if not resolved_project_id:
|
|
192
|
+
raise ValueError("project_id is required")
|
|
193
|
+
if not resolved_user_id:
|
|
194
|
+
raise ValueError("user_id is required")
|
|
195
|
+
return resolved_project_id, resolved_user_id
|
|
196
|
+
|
|
197
|
+
|
|
198
|
+
def require_project_memory_content(content: str) -> str:
|
|
199
|
+
"""Validate and normalize required memory content.
|
|
200
|
+
|
|
201
|
+
Args:
|
|
202
|
+
content: Memory text supplied by caller.
|
|
203
|
+
|
|
204
|
+
Returns:
|
|
205
|
+
Non-empty memory content.
|
|
206
|
+
|
|
207
|
+
Raises:
|
|
208
|
+
ValueError: If content is empty.
|
|
209
|
+
"""
|
|
210
|
+
|
|
211
|
+
resolved = str(content or "").strip()
|
|
212
|
+
if not resolved:
|
|
213
|
+
raise ValueError("content is required")
|
|
214
|
+
return resolved
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
def score_project_memory_record(record: dict[str, Any], query_terms: list[str]) -> tuple[int, dict[str, Any]]:
|
|
218
|
+
"""Score one memory record using lexical query-term overlap.
|
|
219
|
+
|
|
220
|
+
Args:
|
|
221
|
+
record: ProjectMemoryRecord-compatible dict.
|
|
222
|
+
query_terms: Lowercase query tokens.
|
|
223
|
+
|
|
224
|
+
Returns:
|
|
225
|
+
Tuple of integer score and original record.
|
|
226
|
+
"""
|
|
227
|
+
|
|
228
|
+
content = str(record.get("content") or "").lower()
|
|
229
|
+
memory_type = str(record.get("memory_type") or "").lower()
|
|
230
|
+
haystack = f"{memory_type} {content}"
|
|
231
|
+
return sum(1 for term in query_terms if term in haystack), record
|