flare-kernel 0.2.11__tar.gz → 0.2.12__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.11 → flare_kernel-0.2.12}/PKG-INFO +3 -2
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/README.md +2 -1
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/pyproject.toml +1 -1
- flare_kernel-0.2.12/src/flare_kernel/project_record_memory_store.py +47 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/project_store.py +21 -0
- flare_kernel-0.2.12/src/flare_kernel/router/canonical/mode_projection.py +47 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/canonical/payload.py +15 -4
- flare_kernel-0.2.12/src/flare_kernel/router/completion/capability_boundary.py +165 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/completion/guided.py +42 -6
- flare_kernel-0.2.12/src/flare_kernel/router/completion/intake_commit_contract.py +46 -0
- flare_kernel-0.2.12/src/flare_kernel/router/completion/intake_summary_content.py +147 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/completion/intake_summary_events.py +34 -10
- flare_kernel-0.2.12/src/flare_kernel/router/completion/intake_summary_submission.py +82 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/completion/response_builder.py +17 -3
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/completion/selection.py +45 -6
- flare_kernel-0.2.12/src/flare_kernel/router/hardcode_boundary.py +104 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/intake/entry_policy.py +2 -25
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/intent/classifier_utils.py +4 -4
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/intent/routing.py +15 -12
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/kernel_constants/intent.py +3 -3
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/kernel_facade/domain_pack_payload.py +36 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/kernel_route/run.py +6 -1
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/orchestration/status/action_readiness.py +1 -1
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/orchestration/status/actions.py +2 -2
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/payload/enrichment.py +47 -75
- flare_kernel-0.2.12/src/flare_kernel/router/payload/turn_act_enrichment.py +101 -0
- flare_kernel-0.2.12/src/flare_kernel/router/prompting/capability_boundary.py +29 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/prompting/context_blocks.py +2 -14
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/prompting/core.py +31 -8
- flare_kernel-0.2.12/src/flare_kernel/router/prompting/patch_preview.py +20 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/prompting/requirement_intake.py +61 -3
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/prompting/summary_contract.py +29 -8
- flare_kernel-0.2.12/src/flare_kernel/router/prompting/track_context.py +94 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/response_intent/contracts.py +51 -1
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/response_intent/resolution.py +52 -3
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/retrieval/aliases.py +24 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/streaming/draft/post_completion.py +24 -5
- flare_kernel-0.2.12/src/flare_kernel/router/turn_act.py +209 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/context/__init__.py +2 -0
- flare_kernel-0.2.12/src/flare_kernel/runtime/context/intake_application.py +230 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/domain/domain_pack_loader.py +1 -18
- flare_kernel-0.2.12/src/flare_kernel/runtime/domain/domain_pack_root.py +52 -0
- flare_kernel-0.2.12/src/flare_kernel/runtime/infrastructure/source/ocr_provider.py +58 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/infrastructure/source/text_extractor.py +5 -16
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/orchestration/decision_engine.py +1 -1
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/orchestration/mode/intake_canvas.py +30 -4
- flare_kernel-0.2.12/src/flare_kernel/runtime/orchestration/mode/intake_canvas_content.py +84 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/orchestration/mode/intake_canvas_events.py +13 -1
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/orchestration/mode/intake_events.py +1 -1
- flare_kernel-0.2.12/src/flare_kernel/runtime/orchestration/mode/intake_model_question_plan.py +175 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/orchestration/mode/intake_question.py +62 -0
- flare_kernel-0.2.12/src/flare_kernel/runtime/orchestration/mode/intake_question_plan_carrier.py +77 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/orchestration/mode/intake_summary_artifact.py +8 -5
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/orchestration/module_prompt_registry.py +4 -0
- flare_kernel-0.2.12/src/flare_kernel/runtime/orchestration/patch_preview_runtime.py +84 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/orchestration/structured_prompt_context.py +57 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/orchestration/structured_reasoning.py +9 -4
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/reasoning/intake/question/planner.py +14 -2
- flare_kernel-0.2.12/src/flare_kernel/session_message_policy.py +25 -0
- flare_kernel-0.2.12/src/flare_kernel/session_message_records.py +173 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/session_store.py +24 -38
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel.egg-info/PKG-INFO +3 -2
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel.egg-info/SOURCES.txt +33 -0
- flare_kernel-0.2.12/tests/test_canonical_mode_projection.py +57 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_canonical_state_payload.py +1 -1
- flare_kernel-0.2.12/tests/test_capability_boundary.py +48 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_completion_response_builder.py +69 -7
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_completion_selection.py +149 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_domain_pack_loader.py +6 -6
- flare_kernel-0.2.12/tests/test_generic_domain_pack_options.py +114 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_guided_completion.py +40 -11
- flare_kernel-0.2.12/tests/test_intake_commit_context_patch.py +145 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_intake_entry_policy.py +24 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_intake_question_projection.py +44 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_intent_classifier_utils.py +6 -3
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_intent_retrieval.py +27 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_intent_routing.py +7 -7
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_module_prompt_registry.py +3 -0
- flare_kernel-0.2.12/tests/test_orc15_guided_completion.py +92 -0
- flare_kernel-0.2.12/tests/test_orc15_turn_act_classification.py +266 -0
- flare_kernel-0.2.12/tests/test_orc16_main_chain_hardcode_boundary.py +35 -0
- flare_kernel-0.2.12/tests/test_patch_preview_runtime.py +47 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_project_api.py +22 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_prompting_analysis_instruction.py +157 -0
- flare_kernel-0.2.12/tests/test_requirement_intake_canvas_progress.py +40 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_requirement_intake_canvas_state.py +50 -9
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_requirement_intake_continuation.py +4 -1
- flare_kernel-0.2.12/tests/test_requirement_intake_flow.py +273 -0
- flare_kernel-0.2.12/tests/test_requirement_intake_model_question_plan.py +196 -0
- flare_kernel-0.2.12/tests/test_requirement_intake_summary_route.py +198 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_response_intent_resolution.py +65 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_response_strategy_runtime.py +27 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_session_api.py +44 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_source_text_extractor.py +37 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_streaming_draft_intake_canvas_sync.py +14 -2
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_streaming_draft_post_completion.py +13 -7
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_streaming_intake_phase.py +1 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_streaming_response_phases.py +103 -0
- flare_kernel-0.2.12/tests/test_structured_prompt_context.py +155 -0
- flare_kernel-0.2.12/tests/test_track_prompt_context.py +77 -0
- flare_kernel-0.2.11/src/flare_kernel/runtime/orchestration/mode/intake_canvas_content.py +0 -29
- flare_kernel-0.2.11/tests/test_structured_prompt_context.py +0 -81
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/setup.cfg +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/__init__.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/app.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/contracts/__init__.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/contracts/auth_contract.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/contracts/context.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/contracts/kernel_contract.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/contracts/list_event_contract.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/contracts/mode.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/contracts/project_contract.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/contracts/project_memory_contract.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/contracts/run_contract.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/contracts/session_contract.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/contracts/update_contract.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/list_event_broker.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/main.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/__init__.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/api/__init__.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/api/auth.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/api/auth_guard.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/api/chat.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/api/errors.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/api/list_events.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/api/project.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/api/run.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/api/session.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/api/session_list_events.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/api/update.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/canonical/__init__.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/canonical/analysis.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/canonical/checkpoint.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/canonical/composer_ui.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/canonical/context/__init__.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/canonical/context/analysis.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/canonical/context/inputs.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/canonical/context/session.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/canonical/context_authority.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/canonical/contract_support.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/canonical/flow.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/canonical/projection.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/canonical/track_actions.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/completion/__init__.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/completion/analysis_policy.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/completion/analysis_result_contract.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/completion/stream_collect.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/context/__init__.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/context/endpoint.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/context/sourcing_preview.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/intake/__init__.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/intake/amount_quantity.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/intake/answer.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/intake/authority/__init__.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/intake/authority/checkpoint.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/intake/authority/core.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/intake/authority/hydration.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/intake/authority/session.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/intake/canonicalization.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/intake/clarification.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/intake/decision_rules.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/intake/delivery_time.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/intake/extraction/__init__.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/intake/extraction/core.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/intake/extraction/extractors.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/intake/extraction/merge.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/intake/field_projection/__init__.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/intake/field_projection/core.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/intake/field_projection/entity.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/intake/field_projection/payload.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/intake/field_projection/source.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/intake/field_scope.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/intake/guided/__init__.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/intake/guided/confirmed_updates.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/intake/guided/flags.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/intake/guided/followup.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/intake/guided/followup_work_item.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/intake/guided/open_fields.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/intake/guided/status.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/intake/guided/summary.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/intake/inputs.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/intake/legacy_question.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/intake/node_state.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/intake/numeric.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/intake/payload_updates.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/intake/readiness.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/intake/state_persistence.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/intake/status/__init__.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/intake/status/chooser_stage.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/intake/status/core.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/intake/status/guided_session.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/intake/status/projection.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/intake/status/schema.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/intake/workflow_checkpoint.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/intent/__init__.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/intent/compat_aliases.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/intent/escalation/__init__.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/intent/escalation/override.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/intent/escalation/pipeline.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/intent/escalation/signal.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/intent/session_intent/__init__.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/intent/session_intent/core.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/intent/session_intent/fields.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/intent/session_intent/small_talk.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/kernel.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/kernel_constants/__init__.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/kernel_constants/intake.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/kernel_constants/patch.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/kernel_endpoint_handlers/__init__.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/kernel_endpoint_handlers/health.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/kernel_endpoint_handlers/knowledge.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/kernel_endpoint_handlers/sourcing.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/kernel_endpoint_handlers/turn.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/kernel_facade/__init__.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/kernel_facade/canonical_state.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/kernel_facade/dependency_resolution.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/kernel_facade/flow.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/kernel_facade/orchestration.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/kernel_facade/payload_enrichment.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/kernel_facade/turn_context.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/kernel_facade/utils.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/kernel_flow_bindings/__init__.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/kernel_flow_bindings/intent_query.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/kernel_flow_bindings/mode.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/kernel_flow_bindings/session_intent.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/kernel_request_pipeline/__init__.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/kernel_request_pipeline/action.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/kernel_request_pipeline/intake.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/kernel_request_pipeline/intent_query.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/kernel_request_pipeline/intent_signal.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/kernel_route/__init__.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/kernel_route/action.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/kernel_route/execution.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/kernel_route/stream.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/mode/__init__.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/mode/resolution.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/mode/switch.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/next_actions_guard.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/orchestration/__init__.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/orchestration/status/__init__.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/orchestration/status/analysis_entry_decision.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/orchestration/status/builder.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/orchestration/status/checkpoint_state.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/orchestration/status/context.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/orchestration/status/context_helpers.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/orchestration/status/core.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/orchestration/status/decision.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/orchestration/status/followup_state.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/orchestration/status/projection.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/orchestration/status/result.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/orchestration/status/runtime_state.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/orchestration/status/state/__init__.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/orchestration/status/state/context.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/orchestration/status/state/decision.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/orchestration/status/state/entry.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/orchestration/status/state/flow.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/orchestration/status/state/followup.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/orchestration/status/state/intent.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/orchestration/status/state/node.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/orchestration/status/state/payload.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/orchestration/status/state/unpack.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/orchestration/trace/__init__.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/orchestration/trace/core.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/orchestration/trace/projection.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/orchestration/trace/steps.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/patch_contract.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/payload/__init__.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/payload/action.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/payload/analysis_canvas.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/prompting/__init__.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/prompting/artifact_template.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/prompting/response_strategy.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/request/__init__.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/request/identity.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/request/intent_resolution.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/response_intent/__init__.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/response_intent/document_output.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/retrieval/__init__.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/retrieval/field_queries.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/retrieval/projection.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/retrieval/query_builder.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/retrieval/search.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/source_library.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/streaming/__init__.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/streaming/draft/__init__.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/streaming/draft/completion.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/streaming/draft/finalize.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/streaming/draft/phase.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/streaming/draft/phase_timing.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/streaming/draft/prologue.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/streaming/event_emitter.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/streaming/intake/__init__.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/streaming/intake/phase.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/streaming/mode/__init__.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/streaming/mode/event_payload.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/streaming/mode/events.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/streaming/response/__init__.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/streaming/response/bootstrap.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/streaming/response/builder.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/streaming/response/builder_transport.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/streaming/response/draft_phase.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/streaming/response/phase_groups.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/streaming/response/phases.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/streaming/response/runtime.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/streaming/response/structured_reasoning_phase.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/streaming/retrieval/__init__.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/streaming/retrieval/phase.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/streaming/runtime/__init__.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/streaming/runtime/sourcing_observations.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/streaming/runtime/steps.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/router/text_safety.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/run_store.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/__init__.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/auth/__init__.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/auth/exchange.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/auth/policy.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/auth/scope_guard.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/context/analysis_application.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/context/document_application.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/context/reasoning_application.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/context/session_context.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/context/track_application.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/diagnostics/__init__.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/diagnostics/provider_audit.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/diagnostics/provider_audit_export.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/diagnostics/replay_snapshot.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/diagnostics/replay_snapshot_io.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/diagnostics/replay_snapshot_validation.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/domain/__init__.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/domain/domain_pack_paths.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/domain/profile_resolution.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/execution/__init__.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/execution/agent_runtime.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/execution/skill_runtime.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/infrastructure/__init__.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/infrastructure/chat_memory.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/infrastructure/database.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/infrastructure/dependency_status.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/infrastructure/infrastructure.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/infrastructure/knowledge_ingest.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/infrastructure/knowledge_memory.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/infrastructure/knowledge_postgres_search.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/infrastructure/knowledge_qdrant_search.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/infrastructure/knowledge_search.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/infrastructure/knowledge_terms.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/infrastructure/logging.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/infrastructure/project_memory_codec.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/infrastructure/project_memory_sql.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/infrastructure/project_memory_store.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/infrastructure/redis_client.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/infrastructure/run/__init__.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/infrastructure/run/repository.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/infrastructure/run/repository_memory.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/infrastructure/run/repository_sql.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/infrastructure/session/__init__.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/infrastructure/session/columns.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/infrastructure/session/repository.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/infrastructure/session/repository_memory.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/infrastructure/session/repository_sql.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/infrastructure/source/__init__.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/infrastructure/source/document_understanding_codec.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/infrastructure/source/library_persistence.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/infrastructure/source/schema.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/infrastructure/sourcing/__init__.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/infrastructure/sourcing/instance_profile_adapter.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/infrastructure/sourcing/persistence.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/infrastructure/sourcing/provider.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/infrastructure/sourcing/provider_config.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/infrastructure/sourcing/provider_gateway.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/infrastructure/sourcing/provider_normalize.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/infrastructure/sourcing/provider_public.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/infrastructure/sourcing/provider_result.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/infrastructure/trace.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/infrastructure/vector_store.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/intent/__init__.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/intent/intent_and_escalation/__init__.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/intent/intent_and_escalation/decision.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/intent/intent_and_escalation/lexicon.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/intent/intent_and_escalation/preprocessing.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/intent/intent_and_escalation/signals.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/intent/intent_and_escalation_classifier.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/llm/__init__.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/llm/completion_capture.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/llm/config.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/llm/contracts.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/llm/dashscope_provider.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/llm/dashscope_streaming_provider.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/llm/fallback_policy.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/llm/intent_model_policy.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/llm/llm_provider.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/llm/model_router.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/llm/native_streaming.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/llm/provider_health.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/llm/provider_health_probe.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/llm/provider_health_snapshot.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/llm/provider_health_source.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/llm/provider_quota.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/llm/provider_trace.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/llm/provider_usage.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/llm/replay_provider.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/llm/streaming_provider.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/orchestration/__init__.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/orchestration/analysis_route_policy.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/orchestration/analysis_router_runtime.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/orchestration/artifact_template_runtime.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/orchestration/canvas/__init__.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/orchestration/canvas/toolbar_actions.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/orchestration/canvas_sourcing_contract.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/orchestration/mode/__init__.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/orchestration/mode/canvas_state.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/orchestration/mode/field_definitions.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/orchestration/mode/intake_action_resolution.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/orchestration/mode/intake_actions.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/orchestration/mode/intake_context.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/orchestration/mode/intake_coverage.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/orchestration/mode/intake_draft_payload.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/orchestration/mode/intake_field_projection.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/orchestration/mode/intake_next_actions_payload.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/orchestration/mode/intake_payloads.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/orchestration/mode/intake_progress_payload.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/orchestration/mode/intake_question_lifecycle.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/orchestration/mode/intake_question_progress.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/orchestration/mode/orchestration.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/orchestration/mode/question_selection.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/orchestration/mode/reasoning.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/orchestration/mode/runtime.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/orchestration/mode/shared.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/orchestration/mode/sourcing_actions.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/orchestration/mode/sourcing_events.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/orchestration/mode/sourcing_preview.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/orchestration/mode/sourcing_report.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/orchestration/mode/state_transition.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/orchestration/observation.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/orchestration/response_strategy_runtime.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/orchestration/session_context_runtime.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/orchestration/sourcing/__init__.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/orchestration/sourcing/additive_search.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/orchestration/sourcing/analysis_entry.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/orchestration/sourcing/candidate_explainability.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/orchestration/sourcing/canvas_state.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/orchestration/sourcing/context_round.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/orchestration/sourcing/event_payloads.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/orchestration/sourcing/instance_db_runtime.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/orchestration/sourcing/internal_runtime.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/orchestration/sourcing/mcp_runtime.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/orchestration/sourcing/observation_payloads.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/orchestration/sourcing/observations.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/orchestration/sourcing/parameter_draft.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/orchestration/sourcing/provider_config_loader.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/orchestration/sourcing/provider_health.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/orchestration/sourcing/result_window.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/orchestration/sourcing/search_runtime.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/orchestration/sourcing/source_priority.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/orchestration/sourcing/web_runtime.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/orchestration/track_runtime.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/project_memory/__init__.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/project_memory/extraction.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/project_memory/recall.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/project_memory/runtime.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/reasoning/__init__.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/reasoning/intake/__init__.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/reasoning/intake/api.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/reasoning/intake/branching/__init__.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/reasoning/intake/branching/core.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/reasoning/intake/branching/policy.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/reasoning/intake/context.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/reasoning/intake/field_selection.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/reasoning/intake/gap_detection.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/reasoning/intake/hypothesis.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/reasoning/intake/planning.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/reasoning/intake/priority.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/reasoning/intake/question/__init__.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/reasoning/intake/question/builder.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/reasoning/intake/question/decision.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/reasoning/intake/question/extraction.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/reasoning/intake/question/structured.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/reasoning/intake/readiness/__init__.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/reasoning/intake/readiness/core.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/reasoning/intake/readiness/scoring.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/reasoning/intake/shared.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/reasoning/intake/understanding_state.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/reasoning/intake/visible_response.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/reasoning/intake/visible_summary.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/session/__init__.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/session/checkpoint_manager.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/session/intake_session_store.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/session/models.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/source_ingestion/__init__.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/source_ingestion/artifacts.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/source_ingestion/chunk_storage.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/source_ingestion/knowledge_storage.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/source_ingestion/runtime.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/runtime/source_ingestion/storage.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/session_archive_context.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/session_archive_graph.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/session_archive_metrics.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/session_archive_summary.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/session_lifecycle_policy.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/session_record_policy.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/session_replay.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/update/__init__.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/update/compatibility.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/update/planner.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/update/registry.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/update/versioning.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel/user_store.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel.egg-info/dependency_links.txt +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel.egg-info/requires.txt +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/src/flare_kernel.egg-info/top_level.txt +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_action_payload.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_action_readiness.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_analysis_canvas_payload.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_analysis_context_patch.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_analysis_e2e.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_analysis_entry_decision.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_analysis_route_projection.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_analysis_route_runtime.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_artifact_template_runtime.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_auth_exchange.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_auth_scope_guard.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_basics.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_builder_split_modules.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_business_hardcode_guard.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_canonical_state_context_analysis.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_canonical_state_context_inputs.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_canonical_state_context_session.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_canonical_state_flow.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_canonical_state_projection.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_canvas_sourcing_contract_meta.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_chat_api_alias.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_command_resolution_analysis_mode.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_compat_aliases.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_context_authority_projection.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_dashscope_streaming_provider.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_decision_engine.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_endpoint_context.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_flare_v1_patch_contract.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_infrastructure_helpers.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_infrastructure_knowledge.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_intake_amount_quantity.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_intake_answer.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_intake_authority.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_intake_authority_checkpoint.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_intake_authority_hydration.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_intake_authority_session.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_intake_canonicalization.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_intake_clarification.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_intake_decision_rules.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_intake_delivery_time.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_intake_domain_context_options.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_intake_extraction.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_intake_extraction_extractors.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_intake_extraction_merge.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_intake_field_projection.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_intake_field_projection_entity.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_intake_field_projection_payload.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_intake_field_projection_source.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_intake_field_scope.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_intake_guided_confirmed_updates.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_intake_guided_flags.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_intake_guided_followup.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_intake_guided_followup_work_item.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_intake_guided_open_fields.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_intake_guided_status.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_intake_guided_summary.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_intake_inputs.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_intake_node_state.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_intake_numeric.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_intake_payload_updates.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_intake_question_extraction.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_intake_readiness.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_intake_reasoning_priority.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_intake_state_persistence.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_intake_status.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_intake_status_guided_session.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_intake_status_projection.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_intake_status_schema.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_intake_status_stage.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_intake_visible_response.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_intake_workflow_checkpoint.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_intent_escalation_classifier.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_intent_escalation_override.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_intent_escalation_pipeline.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_intent_escalation_signal.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_intent_resolution.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_intent_type_compat_aliases.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_kernel_alias_delegation.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_kernel_endpoint_handlers.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_kernel_endpoint_handlers_sourcing.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_kernel_facade_helpers.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_kernel_facade_turn_context.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_kernel_intent_query_flow.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_kernel_mode_flow.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_kernel_route_execution_wrappers.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_kernel_session_intent_flow.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_list_events.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_llm_provider.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_llm_provider_fallback_policy.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_llm_provider_health_file.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_llm_provider_health_probe.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_llm_provider_health_snapshot.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_llm_provider_live.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_llm_provider_native_streaming.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_llm_provider_quota.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_llm_provider_streaming.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_llm_replay_provider.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_mode_orchestration_state_bridge.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_mode_reasoning.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_mode_resolution.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_mode_switch.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_model_router.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_new_flow_guard.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_orchestration_checkpoint_state.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_orchestration_followup_state.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_orchestration_status_context.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_orchestration_status_context_helpers.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_orchestration_status_decision.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_orchestration_status_projection.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_orchestration_status_result.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_orchestration_status_runtime_state.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_orchestration_status_state_context.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_orchestration_status_state_decision.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_orchestration_status_state_entry.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_orchestration_status_state_followup.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_orchestration_status_state_intent.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_orchestration_status_state_node.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_orchestration_status_state_payload.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_orchestration_status_state_unpack.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_orchestration_trace.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_orchestration_trace_projection.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_orchestration_trace_steps.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_patch_contract.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_payload_enrichment.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_pln03_question_chooser.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_pln11_question_option_extraction.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_project_memory_runtime.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_project_memory_store.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_prompting_requirement_intake.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_prompting_user_template_instruction.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_provider_audit.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_provider_audit_export.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_replay_snapshot.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_replay_snapshot_validation.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_request_identity.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_request_intent_resolution.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_retrieval_aliases.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_retrieval_field_queries.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_retrieval_projection.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_retrieval_query_builder.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_retrieval_search.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_run_api.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_run_sql_repository.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_run_store.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_session_archive_summary.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_session_context_persistence.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_session_intent.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_session_intent_fields.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_session_intent_small_talk.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_session_lifecycle_api.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_session_replay_api.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_session_sql_columns.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_session_sql_migration.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_session_sql_repository.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_source_ingestion_runtime.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_source_ingestion_ssot_acceptance.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_source_library.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_source_library_persistence_scope.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_sourcing_additive_search.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_sourcing_candidate_explainability.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_sourcing_context_reuse.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_sourcing_e2e.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_sourcing_instance_profile_adapter.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_sourcing_parameter_draft.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_sourcing_preview_context.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_sourcing_provider.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_sourcing_provider_adapters.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_sourcing_provider_config_loader.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_sourcing_provider_health.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_sourcing_runtime_additive_search.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_sourcing_search_runtime.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_sourcing_source_priority.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_stream_collect_completion.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_streaming_draft_completion.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_streaming_draft_finalize.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_streaming_draft_phase.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_streaming_draft_prologue.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_streaming_event_emitter.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_streaming_mode_event_payload.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_streaming_mode_events.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_streaming_response_bootstrap.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_streaming_response_runtime.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_streaming_response_transport.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_streaming_retrieval_phase.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_streaming_runtime_steps.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_text_safety.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_track_runtime.py +0 -0
- {flare_kernel-0.2.11 → flare_kernel-0.2.12}/tests/test_update_plane.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: flare-kernel
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.12
|
|
4
4
|
Summary: FLARE kernel runtime package
|
|
5
5
|
License: Proprietary
|
|
6
6
|
Classifier: Development Status :: 3 - Alpha
|
|
@@ -60,7 +60,8 @@ kernel 现已输出 mode/context 运行时占位事件与字段。
|
|
|
60
60
|
1. kernel 支持从 domain-pack 读取品牌配置:
|
|
61
61
|
`branding/instance-branding.json`
|
|
62
62
|
2. 读取方式:
|
|
63
|
-
-
|
|
63
|
+
- 优先通过环境变量 `FLARE_DOMAIN_PACK_ROOT` 显式指定
|
|
64
|
+
- 本地仓库运行时可回退到仓库根目录下的 `domain-packs/`
|
|
64
65
|
3. 注入位置:
|
|
65
66
|
- `POST /kernel/run` 响应 `result.instance_profile`
|
|
66
67
|
- `POST /kernel/stream` SSE 事件 `instance_profile`
|
|
@@ -38,7 +38,8 @@ kernel 现已输出 mode/context 运行时占位事件与字段。
|
|
|
38
38
|
1. kernel 支持从 domain-pack 读取品牌配置:
|
|
39
39
|
`branding/instance-branding.json`
|
|
40
40
|
2. 读取方式:
|
|
41
|
-
-
|
|
41
|
+
- 优先通过环境变量 `FLARE_DOMAIN_PACK_ROOT` 显式指定
|
|
42
|
+
- 本地仓库运行时可回退到仓库根目录下的 `domain-packs/`
|
|
42
43
|
3. 注入位置:
|
|
43
44
|
- `POST /kernel/run` 响应 `result.instance_profile`
|
|
44
45
|
- `POST /kernel/stream` SSE 事件 `instance_profile`
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"""In-memory Project record storage for local runs without SQL DSN."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from datetime import UTC, datetime
|
|
6
|
+
from typing import Any
|
|
7
|
+
|
|
8
|
+
_PROJECT_RECORDS: dict[str, dict[str, Any]] = {}
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def _now_iso() -> str:
|
|
12
|
+
return datetime.now(UTC).isoformat()
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def _normalize_text(value: Any) -> str:
|
|
16
|
+
return " ".join(str(value or "").split()).strip()
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def list_project_records() -> list[dict[str, Any]]:
|
|
20
|
+
return [
|
|
21
|
+
dict(record)
|
|
22
|
+
for record in sorted(
|
|
23
|
+
_PROJECT_RECORDS.values(),
|
|
24
|
+
key=lambda item: str(item.get("updated_at") or ""),
|
|
25
|
+
reverse=True,
|
|
26
|
+
)
|
|
27
|
+
]
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def get_project_record(*, project_id: str) -> dict[str, Any] | None:
|
|
31
|
+
record = _PROJECT_RECORDS.get(_normalize_text(project_id))
|
|
32
|
+
return dict(record) if record else None
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def upsert_project_record(*, project_id: str, project_name: str | None, status: str | None) -> dict[str, Any]:
|
|
36
|
+
resolved_project_id = _normalize_text(project_id)
|
|
37
|
+
now = _now_iso()
|
|
38
|
+
existing = dict(_PROJECT_RECORDS.get(resolved_project_id) or {})
|
|
39
|
+
record = {
|
|
40
|
+
"project_id": resolved_project_id,
|
|
41
|
+
"project_name": _normalize_text(project_name) or _normalize_text(existing.get("project_name")) or resolved_project_id,
|
|
42
|
+
"status": _normalize_text(status) or _normalize_text(existing.get("status")) or "active",
|
|
43
|
+
"created_at": _normalize_text(existing.get("created_at")) or now,
|
|
44
|
+
"updated_at": now,
|
|
45
|
+
}
|
|
46
|
+
_PROJECT_RECORDS[resolved_project_id] = record
|
|
47
|
+
return dict(record)
|
|
@@ -2,9 +2,15 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
+
import os
|
|
5
6
|
from datetime import UTC, datetime
|
|
6
7
|
from typing import Any
|
|
7
8
|
|
|
9
|
+
from flare_kernel.project_record_memory_store import (
|
|
10
|
+
get_project_record,
|
|
11
|
+
list_project_records,
|
|
12
|
+
upsert_project_record,
|
|
13
|
+
)
|
|
8
14
|
from flare_kernel.runtime.infrastructure.database import build_sqlalchemy_engine
|
|
9
15
|
from flare_kernel.session_store import list_sessions
|
|
10
16
|
from flare_kernel.user_store import get_current_user_id
|
|
@@ -33,6 +39,10 @@ def _normalize_text(value: Any) -> str:
|
|
|
33
39
|
return " ".join(str(value or "").split()).strip()
|
|
34
40
|
|
|
35
41
|
|
|
42
|
+
def _use_in_memory_project_store() -> bool:
|
|
43
|
+
return not str(os.getenv("FLARE_POSTGRES_DSN") or "").strip()
|
|
44
|
+
|
|
45
|
+
|
|
36
46
|
def _ensure_project_table(conn: Any, text_fn: Any) -> None:
|
|
37
47
|
"""Create the durable Project table when it does not exist.
|
|
38
48
|
|
|
@@ -111,6 +121,9 @@ def list_projects() -> list[dict[str, Any]]:
|
|
|
111
121
|
Project view dictionaries sorted by persisted updated_at descending.
|
|
112
122
|
"""
|
|
113
123
|
|
|
124
|
+
if _use_in_memory_project_store():
|
|
125
|
+
return [_build_project_view(row) for row in list_project_records()]
|
|
126
|
+
|
|
114
127
|
from sqlalchemy import text
|
|
115
128
|
|
|
116
129
|
with _project_engine().begin() as conn:
|
|
@@ -144,6 +157,10 @@ def get_project(*, project_id: str) -> dict[str, Any] | None:
|
|
|
144
157
|
if not resolved_project_id:
|
|
145
158
|
return None
|
|
146
159
|
|
|
160
|
+
if _use_in_memory_project_store():
|
|
161
|
+
record = get_project_record(project_id=resolved_project_id)
|
|
162
|
+
return _build_project_view(record) if record else None
|
|
163
|
+
|
|
147
164
|
from sqlalchemy import text
|
|
148
165
|
|
|
149
166
|
with _project_engine().begin() as conn:
|
|
@@ -183,6 +200,10 @@ def upsert_project(*, project_id: str, project_name: str | None, status: str | N
|
|
|
183
200
|
if not resolved_project_id:
|
|
184
201
|
raise ValueError("project_id is required")
|
|
185
202
|
|
|
203
|
+
if _use_in_memory_project_store():
|
|
204
|
+
record = upsert_project_record(project_id=resolved_project_id, project_name=project_name, status=status)
|
|
205
|
+
return _build_project_view(record)
|
|
206
|
+
|
|
186
207
|
now = _now_iso()
|
|
187
208
|
next_project_name = _normalize_text(project_name)
|
|
188
209
|
next_status = _normalize_text(status)
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"""Frontend-facing mode projection rules.
|
|
2
|
+
|
|
3
|
+
This module owns round-end mode reset projection. It does not decide workflow
|
|
4
|
+
state; it only maps canonical workflow state to composer-facing mode state.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
from typing import Any
|
|
10
|
+
|
|
11
|
+
_ROUND_SCOPED_MODE_SOURCES = {"manual_hint", "current_hint"}
|
|
12
|
+
_ROUND_SCOPED_COMMANDS = {
|
|
13
|
+
"activate_requirement_intake",
|
|
14
|
+
"submit_intake_answer",
|
|
15
|
+
"implement",
|
|
16
|
+
"apply",
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def _clean_text(value: Any) -> str:
|
|
21
|
+
return str(value or "").strip()
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def resolve_round_end_mode_projection(
|
|
25
|
+
*,
|
|
26
|
+
activated_mode: str,
|
|
27
|
+
suggested_mode: Any,
|
|
28
|
+
mode_source: str,
|
|
29
|
+
command: str,
|
|
30
|
+
intake_session_completed: bool,
|
|
31
|
+
) -> dict[str, Any]:
|
|
32
|
+
"""Return frontend-facing mode projection for a completed round.
|
|
33
|
+
|
|
34
|
+
Manual mode hints and command activations are round-scoped. The workflow can
|
|
35
|
+
still expose stage/status/question separately, but composer active mode must
|
|
36
|
+
return to auto so the frontend does not persist manual mode locally.
|
|
37
|
+
"""
|
|
38
|
+
|
|
39
|
+
reset_to_auto = bool(intake_session_completed) or _clean_text(mode_source) in _ROUND_SCOPED_MODE_SOURCES
|
|
40
|
+
if not reset_to_auto:
|
|
41
|
+
reset_to_auto = _clean_text(command).lower() in _ROUND_SCOPED_COMMANDS
|
|
42
|
+
if reset_to_auto:
|
|
43
|
+
return {"activated_mode": "auto", "suggested_mode": None}
|
|
44
|
+
return {"activated_mode": _clean_text(activated_mode) or "auto", "suggested_mode": suggested_mode}
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
__all__ = ["resolve_round_end_mode_projection"]
|
|
@@ -18,6 +18,7 @@ from flare_kernel.router.canonical.contract_support import (
|
|
|
18
18
|
)
|
|
19
19
|
from flare_kernel.router.canonical.composer_ui import build_composer_ui_projection
|
|
20
20
|
from flare_kernel.router.canonical.context_authority import build_context_authority_projection
|
|
21
|
+
from flare_kernel.router.canonical.mode_projection import resolve_round_end_mode_projection
|
|
21
22
|
from flare_kernel.router.canonical.projection import resolve_canonical_next_actions
|
|
22
23
|
from flare_kernel.router.canonical.track_actions import build_track_next_actions
|
|
23
24
|
from flare_kernel.router.intake.status.projection import (
|
|
@@ -40,8 +41,11 @@ def _resolve_analysis_title(*, command: str, can_generate: bool, orchestration_s
|
|
|
40
41
|
return ""
|
|
41
42
|
analysis_route = orchestration_status.get("analysis_route")
|
|
42
43
|
if isinstance(analysis_route, dict):
|
|
44
|
+
route_title = str(analysis_route.get("title") or analysis_route.get("display_title") or "").strip()
|
|
45
|
+
if route_title:
|
|
46
|
+
return route_title
|
|
43
47
|
if str(analysis_route.get("analysis_type") or "").strip().lower() == "sourcing":
|
|
44
|
-
return "
|
|
48
|
+
return "候选分析"
|
|
45
49
|
return "需求分析"
|
|
46
50
|
|
|
47
51
|
|
|
@@ -115,8 +119,15 @@ def build_canonical_payload(
|
|
|
115
119
|
module_prompt_registry = coerce_action_list(authoritative_runtime_payload.get("module_prompt_registry"))
|
|
116
120
|
current_question = authoritative_current_question
|
|
117
121
|
next_actions = authoritative_next_actions
|
|
118
|
-
|
|
119
|
-
|
|
122
|
+
mode_projection = resolve_round_end_mode_projection(
|
|
123
|
+
activated_mode=activated_mode,
|
|
124
|
+
suggested_mode=canonical_context.get("suggested_mode"),
|
|
125
|
+
mode_source=mode_source,
|
|
126
|
+
command=command,
|
|
127
|
+
intake_session_completed=intake_session_completed,
|
|
128
|
+
)
|
|
129
|
+
projected_activated_mode = mode_projection["activated_mode"]
|
|
130
|
+
projected_suggested_mode = mode_projection["suggested_mode"]
|
|
120
131
|
composer_ui = build_composer_ui_projection(
|
|
121
132
|
activated_mode=projected_activated_mode,
|
|
122
133
|
mode_source=mode_source,
|
|
@@ -211,7 +222,7 @@ def build_canonical_payload(
|
|
|
211
222
|
"mode": {
|
|
212
223
|
"suggested": projected_suggested_mode,
|
|
213
224
|
"activated": projected_activated_mode,
|
|
214
|
-
"is_activation_explicit": explicit_activation
|
|
225
|
+
"is_activation_explicit": explicit_activation,
|
|
215
226
|
"activation_source": mode_source if explicit_activation else "none",
|
|
216
227
|
},
|
|
217
228
|
"stage": stage_key,
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
"""Capability-boundary completion helpers.
|
|
2
|
+
|
|
3
|
+
This module projects backend-owned module prompt registry entries into
|
|
4
|
+
customer-visible capability boundary text. It does not decide workflow state or
|
|
5
|
+
embed domain-specific capabilities; supported interactions come from payload
|
|
6
|
+
contracts such as ``module_prompt_registry``.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
from typing import Any
|
|
12
|
+
|
|
13
|
+
from flare_kernel.runtime.llm.llm_provider import LLMCompletion
|
|
14
|
+
|
|
15
|
+
_CAPABILITY_INQUIRY_TERMS = (
|
|
16
|
+
"支持哪些交互",
|
|
17
|
+
"支持什么交互",
|
|
18
|
+
"有哪些交互",
|
|
19
|
+
"能怎么交互",
|
|
20
|
+
"可以怎么交互",
|
|
21
|
+
"支持哪些功能",
|
|
22
|
+
"有什么功能",
|
|
23
|
+
"你能做什么",
|
|
24
|
+
"你会做什么",
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
_INTERACTION_REQUEST_TERMS = ("功能", "交互", "模式", "工具", "按钮", "插件", "入口")
|
|
28
|
+
_INTERACTION_ACTION_TERMS = ("开启", "打开", "进入", "启动", "使用", "调用", "执行")
|
|
29
|
+
_SUPPORTED_TRIGGER_LIMIT = 16
|
|
30
|
+
_SUPPORTED_INTERACTION_LIMIT = 6
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def _clean_text(value: Any) -> str:
|
|
34
|
+
return " ".join(str(value or "").split()).strip()
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def _as_list(value: Any) -> list[Any]:
|
|
38
|
+
return value if isinstance(value, list) else []
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def _contains_any(text: str, terms: tuple[str, ...] | list[str]) -> bool:
|
|
42
|
+
return any(term for term in terms if term and term in text)
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def _module_entries(payload: dict[str, Any]) -> list[dict[str, Any]]:
|
|
46
|
+
entries = payload.get("module_prompt_registry")
|
|
47
|
+
return [item for item in entries if isinstance(item, dict)] if isinstance(entries, list) else []
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def _interaction_label(entry: dict[str, Any]) -> str:
|
|
51
|
+
return _clean_text(entry.get("action_text") or entry.get("label") or entry.get("module_key"))
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def build_supported_interactions(payload: dict[str, Any]) -> list[dict[str, str]]:
|
|
55
|
+
"""Return customer-visible supported interactions from backend registry."""
|
|
56
|
+
|
|
57
|
+
interactions: list[dict[str, str]] = []
|
|
58
|
+
seen: set[str] = set()
|
|
59
|
+
for entry in _module_entries(payload):
|
|
60
|
+
label = _interaction_label(entry)
|
|
61
|
+
if not label or label in seen:
|
|
62
|
+
continue
|
|
63
|
+
seen.add(label)
|
|
64
|
+
interactions.append(
|
|
65
|
+
{
|
|
66
|
+
"label": label,
|
|
67
|
+
"reason": _clean_text(entry.get("reason")),
|
|
68
|
+
"module_key": _clean_text(entry.get("module_key") or entry.get("key")),
|
|
69
|
+
}
|
|
70
|
+
)
|
|
71
|
+
if len(interactions) >= _SUPPORTED_INTERACTION_LIMIT:
|
|
72
|
+
break
|
|
73
|
+
return interactions
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def _supported_trigger_terms(payload: dict[str, Any]) -> list[str]:
|
|
77
|
+
terms: list[str] = []
|
|
78
|
+
for entry in _module_entries(payload):
|
|
79
|
+
for value in (
|
|
80
|
+
_interaction_label(entry),
|
|
81
|
+
_clean_text(entry.get("label")),
|
|
82
|
+
_clean_text(entry.get("module_key") or entry.get("key")),
|
|
83
|
+
):
|
|
84
|
+
if value and value not in terms:
|
|
85
|
+
terms.append(value)
|
|
86
|
+
for keyword in _as_list(entry.get("trigger_keywords")):
|
|
87
|
+
text = _clean_text(keyword)
|
|
88
|
+
if text and text not in terms:
|
|
89
|
+
terms.append(text)
|
|
90
|
+
if len(terms) >= _SUPPORTED_TRIGGER_LIMIT:
|
|
91
|
+
break
|
|
92
|
+
return terms[:_SUPPORTED_TRIGGER_LIMIT]
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
def _is_capability_inquiry(message: str) -> bool:
|
|
96
|
+
text = _clean_text(message)
|
|
97
|
+
return _contains_any(text, _CAPABILITY_INQUIRY_TERMS)
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
def _is_unknown_interaction_request(message: str, payload: dict[str, Any]) -> bool:
|
|
101
|
+
text = _clean_text(message)
|
|
102
|
+
if not text or _is_capability_inquiry(text):
|
|
103
|
+
return False
|
|
104
|
+
if _contains_any(text, _supported_trigger_terms(payload)):
|
|
105
|
+
return False
|
|
106
|
+
has_interaction_noun = _contains_any(text, _INTERACTION_REQUEST_TERMS)
|
|
107
|
+
has_action_verb = _contains_any(text, _INTERACTION_ACTION_TERMS)
|
|
108
|
+
return bool(has_interaction_noun and has_action_verb)
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
def _format_supported_interactions(interactions: list[dict[str, str]]) -> str:
|
|
112
|
+
if not interactions:
|
|
113
|
+
return "目前可支持已配置的交互方式;当前配置暂未返回可展示的能力清单。"
|
|
114
|
+
lines = ["目前支持的交互方式:"]
|
|
115
|
+
for item in interactions:
|
|
116
|
+
reason = item.get("reason") or "可基于当前任务上下文继续推进。"
|
|
117
|
+
lines.append(f"- {item['label']}:{reason}")
|
|
118
|
+
return "\n".join(lines)
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
def build_capability_overview_message(payload: dict[str, Any]) -> str:
|
|
122
|
+
return _format_supported_interactions(build_supported_interactions(payload))
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
def build_unknown_interaction_message(payload: dict[str, Any]) -> str:
|
|
126
|
+
supported = _format_supported_interactions(build_supported_interactions(payload))
|
|
127
|
+
return (
|
|
128
|
+
"这个交互方式目前还没有开发到,暂时不能直接完成。\n"
|
|
129
|
+
f"{supported}\n"
|
|
130
|
+
"您可以换成上面任一交互方式继续,我会按当前任务上下文接着处理。"
|
|
131
|
+
)
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
def resolve_capability_boundary_completion(
|
|
135
|
+
*,
|
|
136
|
+
message: str,
|
|
137
|
+
payload: dict[str, Any],
|
|
138
|
+
) -> LLMCompletion | None:
|
|
139
|
+
"""Return a deterministic boundary response when the turn is about app capabilities."""
|
|
140
|
+
|
|
141
|
+
if _is_capability_inquiry(message):
|
|
142
|
+
return LLMCompletion(
|
|
143
|
+
provider="kernel_guardrail",
|
|
144
|
+
model="capability_boundary",
|
|
145
|
+
content=build_capability_overview_message(payload),
|
|
146
|
+
status="guardrail",
|
|
147
|
+
details={"reason": "supported_interactions_inquiry"},
|
|
148
|
+
)
|
|
149
|
+
if _is_unknown_interaction_request(message, payload):
|
|
150
|
+
return LLMCompletion(
|
|
151
|
+
provider="kernel_guardrail",
|
|
152
|
+
model="capability_boundary",
|
|
153
|
+
content=build_unknown_interaction_message(payload),
|
|
154
|
+
status="guardrail",
|
|
155
|
+
details={"reason": "unknown_interaction_request"},
|
|
156
|
+
)
|
|
157
|
+
return None
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
__all__ = [
|
|
161
|
+
"build_capability_overview_message",
|
|
162
|
+
"build_supported_interactions",
|
|
163
|
+
"build_unknown_interaction_message",
|
|
164
|
+
"resolve_capability_boundary_completion",
|
|
165
|
+
]
|
|
@@ -6,17 +6,25 @@ from dataclasses import dataclass
|
|
|
6
6
|
from typing import Any
|
|
7
7
|
|
|
8
8
|
from flare_kernel.contracts import KernelRequest
|
|
9
|
+
from flare_kernel.router.completion.intake_summary_submission import (
|
|
10
|
+
is_requirement_summary_submission,
|
|
11
|
+
)
|
|
12
|
+
from flare_kernel.router.turn_act import classify_turn_act
|
|
9
13
|
from flare_kernel.runtime.llm.llm_provider import LLMCompletion
|
|
10
14
|
|
|
11
15
|
_REQUIREMENT_INTAKE_COMMAND_SCORES = {
|
|
12
|
-
"": {"main_chain":
|
|
13
|
-
"send_message": {"main_chain":
|
|
14
|
-
"submit_intake_answer": {"main_chain": 0.0, "patch_only": 1.0},
|
|
15
|
-
"
|
|
16
|
+
"": {"main_chain": 0.0, "patch_only": 1.0, "phase_floor": 0.0},
|
|
17
|
+
"send_message": {"main_chain": 0.0, "patch_only": 1.0, "phase_floor": 0.0},
|
|
18
|
+
"submit_intake_answer": {"main_chain": 0.0, "patch_only": 1.0, "phase_floor": 0.0},
|
|
19
|
+
"continue_collection": {"main_chain": 0.0, "patch_only": 1.0, "phase_floor": 0.0},
|
|
20
|
+
"activate_requirement_intake": {"main_chain": 0.0, "patch_only": 1.0, "phase_floor": 1.0},
|
|
21
|
+
"apply": {"main_chain": 0.0, "patch_only": 1.0, "phase_floor": 1.0},
|
|
22
|
+
"implement": {"main_chain": 0.0, "patch_only": 1.0, "phase_floor": 1.0},
|
|
16
23
|
}
|
|
17
|
-
_DEFAULT_REQUIREMENT_INTAKE_COMMAND_SCORE = {"main_chain": 1.0, "patch_only": 0.0}
|
|
24
|
+
_DEFAULT_REQUIREMENT_INTAKE_COMMAND_SCORE = {"main_chain": 1.0, "patch_only": 0.0, "phase_floor": 0.0}
|
|
18
25
|
_PATCH_ONLY_COMPLETION_MODES = frozenset({"patch_only", "state_patch_only"})
|
|
19
26
|
_MAIN_CHAIN_COMPLETION_MODES = frozenset({"main_chain", "llm", "generate"})
|
|
27
|
+
_MAIN_CHAIN_TURN_KINDS = frozenset({"clarification_question", "patch_request", "mixed"})
|
|
20
28
|
|
|
21
29
|
|
|
22
30
|
@dataclass(frozen=True)
|
|
@@ -140,11 +148,39 @@ def _resolve_requirement_intake_guided_decision(
|
|
|
140
148
|
payload_decision = _payload_patch_decision(payload)
|
|
141
149
|
if payload_decision is not None:
|
|
142
150
|
return payload_decision
|
|
151
|
+
if is_requirement_summary_submission(payload):
|
|
152
|
+
return _GuidedCompletionDecision(
|
|
153
|
+
action="main_chain",
|
|
154
|
+
main_chain_score=1.0,
|
|
155
|
+
patch_only_score=0.0,
|
|
156
|
+
phase_score=1.0,
|
|
157
|
+
policy_reason="requirement_summary_submission",
|
|
158
|
+
)
|
|
159
|
+
if command in {"", "send_message"} and _is_collecting_question_phase(orchestration_status):
|
|
160
|
+
turn_act = classify_turn_act(
|
|
161
|
+
message=str(payload.get("message") or ""),
|
|
162
|
+
current_question=orchestration_status.get("current_question")
|
|
163
|
+
if isinstance(orchestration_status.get("current_question"), dict)
|
|
164
|
+
else None,
|
|
165
|
+
field_definitions=payload.get("field_definitions"),
|
|
166
|
+
)
|
|
167
|
+
turn_kind = str(turn_act.get("turn_kind") or "").strip()
|
|
168
|
+
if turn_kind in _MAIN_CHAIN_TURN_KINDS:
|
|
169
|
+
return _GuidedCompletionDecision(
|
|
170
|
+
action="main_chain",
|
|
171
|
+
main_chain_score=1.0,
|
|
172
|
+
patch_only_score=0.0,
|
|
173
|
+
phase_score=1.0,
|
|
174
|
+
policy_reason=f"orc15_{turn_kind}",
|
|
175
|
+
)
|
|
143
176
|
command_scores = _REQUIREMENT_INTAKE_COMMAND_SCORES.get(
|
|
144
177
|
command,
|
|
145
178
|
_DEFAULT_REQUIREMENT_INTAKE_COMMAND_SCORE,
|
|
146
179
|
)
|
|
147
|
-
phase_score =
|
|
180
|
+
phase_score = max(
|
|
181
|
+
float(_is_collecting_question_phase(orchestration_status)),
|
|
182
|
+
float(command_scores.get("phase_floor") or 0.0),
|
|
183
|
+
)
|
|
148
184
|
patch_only_score = phase_score * float(command_scores["patch_only"])
|
|
149
185
|
main_chain_score = float(command_scores["main_chain"])
|
|
150
186
|
action = "patch_only" if patch_only_score > main_chain_score else "main_chain"
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"""Requirement-intake commit projection for non-stream run results.
|
|
2
|
+
|
|
3
|
+
DOC HELPER — run result intake context writeback boundary.
|
|
4
|
+
This helper exposes the same context patch carried by stream completion events.
|
|
5
|
+
It only frames an already-canonical context patch on the response result.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
from typing import Any
|
|
11
|
+
|
|
12
|
+
from flare_kernel.runtime.context.intake_application import build_context_patch_from_intake_commit
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def _merge_context_patches(existing: Any, incoming: dict[str, Any]) -> dict[str, Any]:
|
|
16
|
+
merged = dict(existing) if isinstance(existing, dict) else {}
|
|
17
|
+
for key, value in incoming.items():
|
|
18
|
+
if isinstance(value, list):
|
|
19
|
+
current = merged.get(key) if isinstance(merged.get(key), list) else []
|
|
20
|
+
merged[key] = [*current, *value]
|
|
21
|
+
elif isinstance(value, dict) and isinstance(merged.get(key), dict):
|
|
22
|
+
merged[key] = {**merged[key], **value}
|
|
23
|
+
else:
|
|
24
|
+
merged[key] = value
|
|
25
|
+
return merged
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def attach_intake_commit_context_contract(
|
|
29
|
+
*,
|
|
30
|
+
result: dict[str, Any],
|
|
31
|
+
runtime_snapshot: dict[str, Any],
|
|
32
|
+
orchestration_status: dict[str, Any],
|
|
33
|
+
command: str,
|
|
34
|
+
) -> dict[str, Any]:
|
|
35
|
+
context_patch = build_context_patch_from_intake_commit(
|
|
36
|
+
runtime_snapshot=runtime_snapshot,
|
|
37
|
+
orchestration_status=orchestration_status,
|
|
38
|
+
command=command,
|
|
39
|
+
)
|
|
40
|
+
if not context_patch:
|
|
41
|
+
return result
|
|
42
|
+
result["context_patch"] = _merge_context_patches(result.get("context_patch"), context_patch)
|
|
43
|
+
return result
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
__all__ = ["attach_intake_commit_context_contract"]
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
"""Resolve requirement-intake Canvas summary content.
|
|
2
|
+
|
|
3
|
+
The Canvas prompt review surface must not reuse the main assistant reply as the
|
|
4
|
+
reviewable prompt. This module resolves backend-owned scope content from
|
|
5
|
+
canonical intake/runtime state only.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
from typing import Any
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def _clean_text(value: Any) -> str:
|
|
14
|
+
return str(value or "").strip()
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def _coerce_mapping(value: Any) -> dict[str, Any]:
|
|
18
|
+
return value if isinstance(value, dict) else {}
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def _mode_event_payloads(runtime_snapshot: dict[str, Any]) -> list[dict[str, Any]]:
|
|
22
|
+
mode_events = runtime_snapshot.get("mode_events")
|
|
23
|
+
if not isinstance(mode_events, list):
|
|
24
|
+
return []
|
|
25
|
+
payloads: list[dict[str, Any]] = []
|
|
26
|
+
for event in mode_events:
|
|
27
|
+
if not isinstance(event, dict):
|
|
28
|
+
continue
|
|
29
|
+
payload = event.get("payload")
|
|
30
|
+
if isinstance(payload, dict):
|
|
31
|
+
payloads.append(payload)
|
|
32
|
+
return payloads
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def _explicit_summary_content(runtime_snapshot: dict[str, Any]) -> str:
|
|
36
|
+
payload = _coerce_mapping(runtime_snapshot.get("payload"))
|
|
37
|
+
content = _clean_text(payload.get("requirement_summary_content"))
|
|
38
|
+
if content:
|
|
39
|
+
return content
|
|
40
|
+
summary = _coerce_mapping(payload.get("requirement_summary"))
|
|
41
|
+
content = _clean_text(summary.get("content"))
|
|
42
|
+
if content:
|
|
43
|
+
return content
|
|
44
|
+
content = _clean_text(payload.get("canvas_content"))
|
|
45
|
+
if content:
|
|
46
|
+
return content
|
|
47
|
+
for event_payload in reversed(_mode_event_payloads(runtime_snapshot)):
|
|
48
|
+
summary = _coerce_mapping(event_payload.get("requirement_summary"))
|
|
49
|
+
content = _clean_text(summary.get("content"))
|
|
50
|
+
if content:
|
|
51
|
+
return content
|
|
52
|
+
canvas_state = _coerce_mapping(event_payload.get("canvas_state"))
|
|
53
|
+
summary = _coerce_mapping(canvas_state.get("requirement_summary"))
|
|
54
|
+
content = _clean_text(summary.get("content"))
|
|
55
|
+
if content:
|
|
56
|
+
return content
|
|
57
|
+
content = _clean_text(event_payload.get("canvas_content"))
|
|
58
|
+
if content:
|
|
59
|
+
return content
|
|
60
|
+
return ""
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def _understanding_scope_content(runtime_snapshot: dict[str, Any]) -> str:
|
|
64
|
+
for event_payload in reversed(_mode_event_payloads(runtime_snapshot)):
|
|
65
|
+
understanding = _coerce_mapping(event_payload.get("intake_understanding"))
|
|
66
|
+
context = _coerce_mapping(understanding.get("understood_context"))
|
|
67
|
+
for value in (
|
|
68
|
+
context.get("context_phrase"),
|
|
69
|
+
understanding.get("raw_user_goal"),
|
|
70
|
+
event_payload.get("message_excerpt"),
|
|
71
|
+
):
|
|
72
|
+
content = _clean_text(value)
|
|
73
|
+
if content:
|
|
74
|
+
return content
|
|
75
|
+
return ""
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
def _payload_message_scope_content(runtime_snapshot: dict[str, Any]) -> str:
|
|
79
|
+
payload = _coerce_mapping(runtime_snapshot.get("payload"))
|
|
80
|
+
return _clean_text(payload.get("message"))
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
def _row_text(row: dict[str, Any]) -> str:
|
|
84
|
+
label = _clean_text(row.get("label") or row.get("field_key") or row.get("key"))
|
|
85
|
+
value = _clean_text(row.get("value") or row.get("field_value") or row.get("display_value"))
|
|
86
|
+
if not label:
|
|
87
|
+
return value
|
|
88
|
+
if not value:
|
|
89
|
+
return label
|
|
90
|
+
return f"{label}:{value}"
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
def _field_scope_content(runtime_snapshot: dict[str, Any]) -> str:
|
|
94
|
+
for event_payload in reversed(_mode_event_payloads(runtime_snapshot)):
|
|
95
|
+
canvas_state = _coerce_mapping(event_payload.get("canvas_state"))
|
|
96
|
+
collected = canvas_state.get("collected")
|
|
97
|
+
if not isinstance(collected, list):
|
|
98
|
+
continue
|
|
99
|
+
lines: list[str] = []
|
|
100
|
+
for row in collected:
|
|
101
|
+
if not isinstance(row, dict):
|
|
102
|
+
continue
|
|
103
|
+
text = _row_text(row)
|
|
104
|
+
if text:
|
|
105
|
+
lines.append(text)
|
|
106
|
+
if lines:
|
|
107
|
+
return "\n".join(lines)
|
|
108
|
+
return ""
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
def resolve_requirement_summary_content(
|
|
112
|
+
*,
|
|
113
|
+
runtime_snapshot: dict[str, Any],
|
|
114
|
+
) -> str:
|
|
115
|
+
"""Resolve canonical prompt/scope content for requirement-intake fallback."""
|
|
116
|
+
|
|
117
|
+
if _clean_text(runtime_snapshot.get("mode_key")) != "requirement_intake":
|
|
118
|
+
return ""
|
|
119
|
+
return (
|
|
120
|
+
_explicit_summary_content(runtime_snapshot)
|
|
121
|
+
or _understanding_scope_content(runtime_snapshot)
|
|
122
|
+
or _field_scope_content(runtime_snapshot)
|
|
123
|
+
or _payload_message_scope_content(runtime_snapshot)
|
|
124
|
+
)
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
def resolve_reviewable_requirement_summary_content(
|
|
128
|
+
*,
|
|
129
|
+
runtime_snapshot: dict[str, Any],
|
|
130
|
+
content_text: str,
|
|
131
|
+
) -> str:
|
|
132
|
+
"""Resolve the user-reviewable requirement summary text.
|
|
133
|
+
|
|
134
|
+
The model-authored main-chain summary is the preferred review surface when
|
|
135
|
+
present. Canonical scope remains the fallback for patch-only or empty model
|
|
136
|
+
turns, so field state can still be rendered without inventing content.
|
|
137
|
+
"""
|
|
138
|
+
|
|
139
|
+
return _clean_text(content_text) or resolve_requirement_summary_content(
|
|
140
|
+
runtime_snapshot=runtime_snapshot,
|
|
141
|
+
)
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
__all__ = [
|
|
145
|
+
"resolve_requirement_summary_content",
|
|
146
|
+
"resolve_reviewable_requirement_summary_content",
|
|
147
|
+
]
|