From 1f437f86c6ee541db0b1f5e67f441e5f44091956 Mon Sep 17 00:00:00 2001 From: Wenchao An Date: Sun, 20 Sep 2026 16:31:35 +0800 Subject: [PATCH] feat(agents): persist default knowledge scopes for custom agents (#5579) * feat(agents): persist default knowledge scopes for custom agents * style: format agent knowledge guidance * fix(i18n): clarify default knowledge reset hint * fix(knowledge): preserve retries for initially unbound agents --- README.md | 20 ++- .../app/gateway/knowledge_scope_admission.py | 7 +- backend/app/gateway/routers/agents.py | 12 +- backend/app/gateway/services.py | 53 ++++-- .../harness/deerflow/config/AGENTS.md | 15 ++ .../harness/deerflow/config/agents_config.py | 4 + .../tools/builtins/setup_agent_tool.py | 3 + backend/tests/test_agent_knowledge_scope.py | 113 +++++++++++++ backend/tests/test_agent_store_sql.py | 10 ++ backend/tests/test_gateway_services.py | 158 ++++++++++++++++++ docs/pr-evidence/agent-knowledge-desktop.png | Bin 0 -> 90286 bytes docs/pr-evidence/agent-knowledge-mobile.png | Bin 0 -> 51263 bytes frontend/src/AGENTS.md | 8 + .../[agent_name]/chats/[thread_id]/page.tsx | 18 +- .../agents/agent-settings-dialog.tsx | 70 ++++++++ .../workspace/knowledge-scope-selector.tsx | 11 +- frontend/src/core/agents/types.ts | 5 + frontend/src/core/i18n/locales/en-US.ts | 4 + frontend/src/core/i18n/locales/types.ts | 3 + frontend/src/core/i18n/locales/zh-CN.ts | 4 + frontend/src/core/knowledge/scope.ts | 33 ++++ .../tests/e2e/agent-knowledge-binding.spec.ts | 138 +++++++++++++++ .../agents/agent-display-name.dom.test.tsx | 3 + .../tests/unit/core/knowledge/scope.test.ts | 40 +++++ 24 files changed, 702 insertions(+), 30 deletions(-) create mode 100644 backend/tests/test_agent_knowledge_scope.py create mode 100644 docs/pr-evidence/agent-knowledge-desktop.png create mode 100644 docs/pr-evidence/agent-knowledge-mobile.png create mode 100644 frontend/tests/e2e/agent-knowledge-binding.spec.ts diff --git a/README.md b/README.md index 0eef072f4..9be678232 100644 --- a/README.md +++ b/README.md @@ -1166,8 +1166,8 @@ is off. Set `knowledge_base.scope_selection_enabled: true` in `config.yaml` while using the built-in RAGFlow `knowledge_search` provider to allow all permitted datasets, selected datasets/files, or no retrieval for a turn. The same config flag controls both chat types; when disabled, neither composer -shows the selector or submits a scope. The choice resets to all when the page -is refreshed or another conversation is opened; each sent human message keeps +shows the selector or submits a scope. The choice resets to the custom agent’s saved default (or all when unbound) +when the page is refreshed or another conversation is opened; each sent human message keeps an immutable scope snapshot for replay and history. The Gateway validates every snapshot, intersects it with the operator's dataset allowlist, propagates the execution-only scope to native and durable subagents, and removes it from @@ -1175,6 +1175,22 @@ model inputs and external traces. Client-supplied internal runtime controls and credentials are also stripped from run context before execution or checkpoint persistence. Idempotent retries accept both canonical snapshots and legacy raw run inputs, preserving retry compatibility across upgrades. +Custom agents can save a **Default knowledge** selection from **Agents → Agent +settings**, including optional file filters or retrieval off. Selecting all +knowledge bases clears the binding. The same `knowledge_scope` field is available +on agent create/update APIs and in the agent's stored configuration; omitted +updates preserve it and `null` clears it. It is a default, not an authorization +boundary: an explicit per-message selection overrides it, and the operator's +allowlist still applies at retrieval time. Gateway runs without a message scope +(including scheduled and channel turns) use and snapshot the saved default even +when the composer selector is hidden. Regenerate/resume retain the original +turn's scope, including legacy unscoped turns, rather than picking up later +configuration changes. Unknown or unavailable selections never broaden retrieval. +Idempotent retries keep the original run and scope when a default is added, +changed, or cleared, including unscoped runs accepted before this feature. +This default applies to Gateway-hosted custom-agent turns; direct harness/client +integrations continue to supply their own execution scope. + The `knowledge_base` block is provider-neutral and only controls whether the knowledge capability and selector are enabled. RAGFlow connection, dataset allowlist, and retrieval parameters (`base_url`, `api_key`, `datasets`, diff --git a/backend/app/gateway/knowledge_scope_admission.py b/backend/app/gateway/knowledge_scope_admission.py index c275e4296..d031a6308 100644 --- a/backend/app/gateway/knowledge_scope_admission.py +++ b/backend/app/gateway/knowledge_scope_admission.py @@ -63,6 +63,7 @@ def admit_message_knowledge_scope( ) -> dict[str, Any] | None: """Canonicalize the sole eligible HumanMessage and return execution scope. + New turns without an explicit scope inherit the custom agent default. During regenerate/resume recovery, the server-resolved source snapshot is authoritative and replaces any client-supplied value. """ @@ -102,7 +103,11 @@ def admit_message_knowledge_scope( target_index = scoped_indexes[0] raw_scope = messages[target_index].additional_kwargs[KNOWLEDGE_SCOPE_KEY] else: - return None + # Resolve only new turns here. Recovery (including a legacy None + # snapshot) must never pick up a subsequently edited agent default. + raw_scope = getattr(agent_config, "knowledge_scope", None) + if raw_scope is None: + return None canonical: dict[str, Any] | None = None if raw_scope is not None: diff --git a/backend/app/gateway/routers/agents.py b/backend/app/gateway/routers/agents.py index 10dd06103..a677b34d6 100644 --- a/backend/app/gateway/routers/agents.py +++ b/backend/app/gateway/routers/agents.py @@ -21,6 +21,7 @@ from deerflow.config.agents_config import ( ) from deerflow.config.app_config import get_app_config from deerflow.config.paths import get_paths +from deerflow.knowledge_scope import KnowledgeScope, canonicalize_knowledge_scope from deerflow.persistence.agents import AgentDeleteOutcome, AgentExistsError, get_agent_store from deerflow.runtime.user_context import get_effective_user_id @@ -46,6 +47,7 @@ class AgentResponse(BaseModel): model: str | None = Field(default=None, description="Optional model override") tool_groups: list[str] | None = Field(default=None, description="Optional tool group whitelist") mcp_plugins: list[str] | None = Field(default=None, description="MCP installation selection (None=all, []=none)") + knowledge_scope: KnowledgeScope | None = Field(default=None, description="Default RAGFlow scope for new turns; null inherits operator scope") skills: list[str] | None = Field(default=None, description="Optional skill whitelist (None=all, []=none)") allowed_subagents: list[str] | None = Field(default=None, description="Subagent allowlist (None=all enabled, []=none)") model_settings: AgentModelSettings | None = Field(default=None, description="Per-agent sampling overrides (temperature / max_tokens)") @@ -69,6 +71,7 @@ class AgentCreateRequest(BaseModel): model: str | None = Field(default=None, description="Optional model override") tool_groups: list[str] | None = Field(default=None, description="Optional tool group whitelist") mcp_plugins: list[str] | None = Field(default=None, description="MCP installation selection (None=all, []=none)") + knowledge_scope: KnowledgeScope | None = Field(default=None, description="Default RAGFlow scope for new turns; null inherits operator scope") skills: list[str] | None = Field(default=None, description="Optional skill whitelist (None=all enabled, []=none)") allowed_subagents: list[str] | None = Field(default=None, description="Subagent allowlist (None=all enabled, []=none)") model_settings: AgentModelSettings | None = Field(default=None, description="Per-agent sampling overrides (temperature / max_tokens)") @@ -85,6 +88,7 @@ class AgentUpdateRequest(BaseModel): model: str | None = Field(default=None, description="Updated model override") tool_groups: list[str] | None = Field(default=None, description="Updated tool group whitelist") mcp_plugins: list[str] | None = Field(default=None, description="MCP installation selection (None=all, []=none)") + knowledge_scope: KnowledgeScope | None = Field(default=None, description="Default RAGFlow scope for new turns; null inherits operator scope") skills: list[str] | None = Field(default=None, description="Updated skill whitelist (None=all, []=none)") allowed_subagents: list[str] | None = Field(default=None, description="Updated subagent allowlist (None=all, []=none)") model_settings: AgentModelSettings | None = Field(default=None, description="Updated per-agent sampling overrides") @@ -202,6 +206,7 @@ def _agent_config_to_response(agent_cfg: AgentConfig, include_soul: bool = False tool_groups=agent_cfg.tool_groups, skills=agent_cfg.skills, mcp_plugins=agent_cfg.mcp_plugins, + knowledge_scope=agent_cfg.knowledge_scope, allowed_subagents=agent_cfg.allowed_subagents, model_settings=agent_cfg.model_settings, thinking_enabled=agent_cfg.thinking_enabled, @@ -343,6 +348,8 @@ async def create_agent_endpoint(request: AgentCreateRequest) -> AgentResponse: config_data["description"] = request.description if request.tool_groups is not None: config_data["tool_groups"] = request.tool_groups + if request.knowledge_scope is not None: + config_data["knowledge_scope"] = canonicalize_knowledge_scope(request.knowledge_scope) if request.mcp_plugins is not None: config_data["mcp_plugins"] = request.mcp_plugins if request.skills is not None: @@ -428,7 +435,7 @@ async def update_agent(name: str, request: AgentUpdateRequest) -> AgentResponse: # Use model_fields_set to distinguish "field omitted" from "explicitly set to null". # This is critical for skills where None means "inherit all" (not "don't change"). fields_set = request.model_fields_set - config_changed = bool(fields_set & ({"display_name", "description", "tool_groups", "skills", "mcp_plugins", "allowed_subagents"} | set(_MODEL_BEHAVIOR_FIELDS))) + config_changed = bool(fields_set & ({"display_name", "description", "tool_groups", "skills", "mcp_plugins", "knowledge_scope", "allowed_subagents"} | set(_MODEL_BEHAVIOR_FIELDS))) updated: dict | None = None if config_changed: @@ -443,6 +450,9 @@ async def update_agent(name: str, request: AgentUpdateRequest) -> AgentResponse: if new_tool_groups is not None: updated["tool_groups"] = new_tool_groups + if "knowledge_scope" in fields_set: + updated["knowledge_scope"] = canonicalize_knowledge_scope(request.knowledge_scope) if request.knowledge_scope is not None else None + if "mcp_plugins" in fields_set: updated["mcp_plugins"] = request.mcp_plugins diff --git a/backend/app/gateway/services.py b/backend/app/gateway/services.py index 16583f796..67dd0ca0f 100644 --- a/backend/app/gateway/services.py +++ b/backend/app/gateway/services.py @@ -8,6 +8,7 @@ frames, and consuming stream bridge events. Router modules from __future__ import annotations import asyncio +import hashlib import json import logging import re @@ -1744,11 +1745,19 @@ async def start_run( config = build_run_config(thread_id, body.config, run_metadata, assistant_id=body.assistant_id) await apply_checkpoint_to_run_config(config, body=body, thread_id=thread_id, request=request) + # Merge DeerFlow-specific context overrides into both ``configurable`` and ``context``. + # The ``context`` field is a custom extension for the langgraph-compat layer + # that carries agent configuration (model_name, thinking_enabled, etc.). + # Only agent-relevant keys are forwarded; unknown keys (e.g. thread_id) are ignored. + merge_run_context_overrides(config, getattr(body, "context", None), internal=is_internal_caller) + if not is_internal_caller: + # ``body.config`` is free-form and copied verbatim by + # ``build_run_config``; scrub internal-only keys smuggled there. + strip_internal_context_keys(config) + replay_kind = run_metadata.get("replay_kind") target_message_id = run_metadata.get("regenerate_from_message_id") scope_graph_input = graph_input if isinstance(graph_input, dict) else {"messages": []} - scope_messages = scope_graph_input.get("messages") - candidate_has_scope = isinstance(scope_messages, list) and any(isinstance(message, BaseMessage) and KNOWLEDGE_SCOPE_KEY in message.additional_kwargs for message in scope_messages) current_human_message = _current_human_message(graph_input) current_message_has_scope = current_human_message is not None and KNOWLEDGE_SCOPE_KEY in current_human_message.additional_kwargs replay_requires_scope_recovery = isinstance(graph_input, Command) or (isinstance(target_message_id, str) and bool(target_message_id) and (replay_kind != "edit" or not current_message_has_scope)) @@ -1768,17 +1777,32 @@ async def start_run( if is_scope_recovery else None ) + # Match lead-agent assembly: runtime context overrides configurable. + # Older API/channel callers may name an agent through context while + # retaining lead_agent as their routing assistant ID. + scope_runtime_config = dict(config.get("configurable") or {}) + if isinstance(config.get("context"), dict): + scope_runtime_config.update(config["context"]) + scope_assistant_id = scope_runtime_config.get("agent_name") or _DEFAULT_ASSISTANT_ID + # Bootstrap assembly intentionally does not load an agent config: the + # new agent may not exist yet and setup_agent creates its definition. agent_config = ( await _load_scope_agent_config( - assistant_id=body.assistant_id, + assistant_id=scope_assistant_id, user_id=owner_user_id or (str(user.id) if user is not None else None), ) - if candidate_has_scope or recovery_scope is not None + if not scope_runtime_config.get("is_bootstrap") else None ) + # Keep the pre-default identity even when the agent is initially + # unbound: adding a default must not reject an already-accepted retry. + # The durable input still exposes the original accepted scope. + request_input = _canonical_run_record_input(body.input, graph_input) if idempotency_key else None + knowledge_default_request_hash = hashlib.sha256(json.dumps(request_input, sort_keys=True, ensure_ascii=False).encode()).hexdigest() if idempotency_key else None + accepts_knowledge_default = not is_scope_recovery and not current_message_has_scope and knowledge_default_request_hash is not None admitted_knowledge_scope = admit_message_knowledge_scope( scope_graph_input, - assistant_id=body.assistant_id, + assistant_id=scope_assistant_id, app_config=run_ctx.app_config or get_app_config(), agent_config=agent_config, recovery_scope=recovery_scope, @@ -1792,15 +1816,6 @@ async def start_run( ) run_record_input = _canonical_run_record_input(body.input, graph_input) - # Merge DeerFlow-specific context overrides into both ``configurable`` and ``context``. - # The ``context`` field is a custom extension for the langgraph-compat layer - # that carries agent configuration (model_name, thinking_enabled, etc.). - # Only agent-relevant keys are forwarded; unknown keys (e.g. thread_id) are ignored. - merge_run_context_overrides(config, getattr(body, "context", None), internal=is_internal_caller) - if not is_internal_caller: - # ``body.config`` is free-form and copied verbatim by - # ``build_run_config``; scrub internal-only keys smuggled there. - strip_internal_context_keys(config) internal_owner_user = await resolve_trusted_internal_owner_for_attribution(request, owner_user_id) inject_authenticated_user_context( config, @@ -1960,6 +1975,7 @@ async def start_run( # config built above keeps the secrets for the actual run. kwargs={ "input": run_record_input, + **({"knowledge_default_request_hash": knowledge_default_request_hash} if accepts_knowledge_default else {}), "config": redact_config_secrets(body.config), **({"conversation_references": conversation_references} if conversation_references else {}), }, @@ -1977,7 +1993,14 @@ async def start_run( # record. Accept the raw request as well for records written # by older Gateway versions, while comparing canonical # retries to the same representation as the stored record. - if (stored_input != body.input and stored_input != run_record_input) or record.assistant_id != body.assistant_id or stored.get("conversation_references", []) != conversation_references: + matches_default_request = knowledge_default_request_hash is not None and stored.get("knowledge_default_request_hash") == knowledge_default_request_hash + # Pre-feature unscoped records may already contain normalized + # messages, but have no digest. Compare them before injecting + # today's default; explicit scopes and recovery do not use + # this compatibility path. + matches_legacy_default_request = accepts_knowledge_default and "knowledge_default_request_hash" not in stored and stored_input == request_input + matches_input = matches_default_request or matches_legacy_default_request or stored_input == body.input or stored_input == run_record_input + if not matches_input or record.assistant_id != body.assistant_id or stored.get("conversation_references", []) != conversation_references: raise HTTPException( status_code=409, detail="Idempotency-Key already used with a different request", diff --git a/backend/packages/harness/deerflow/config/AGENTS.md b/backend/packages/harness/deerflow/config/AGENTS.md index 639a4ecc0..e507c4fdd 100644 --- a/backend/packages/harness/deerflow/config/AGENTS.md +++ b/backend/packages/harness/deerflow/config/AGENTS.md @@ -108,6 +108,21 @@ Gateway API endpoints and `DeerFlowClient` methods can modify MCP servers and sk Values beginning with `$` are resolved from the environment when the file is loaded, and an unset variable becomes `""`. Runtime writers (MCP router, skill toggle, `DeerFlowClient`) therefore read the raw file with `read_raw_extensions_config`, merge into it (`set_raw_skill_enabled` for skill state), check the candidate with `validate_raw_extensions_config`, and write that raw dict. They never serialize an `ExtensionsConfig` model back to disk: its resolved values would persist secrets in plaintext and erase the references. When the file does not exist yet, the Gateway skill toggle seeds only the cached skill states. `tests/test_extensions_config_raw_writes.py` and the placeholder tests in `tests/test_client.py` pin this. +`AgentConfig.knowledge_scope` uses the versioned `KnowledgeScope` contract as a +Gateway new-turn default. The API preserves omitted updates and clears explicit +null; file and SQL stores persist it in the existing config document. Keep it +outside `MANAGED_AGENT_CONFIG_FIELDS` so harness self-updates preserve it; +`setup_agent` also preserves the binding when re-bootstrapping. Admission uses +explicit message scope before this default and snapshots it onto the current +human message. Resolve the executing agent with runtime context over configurable, +including legacy callers using `context.agent_name`; bootstrap skips defaults. +Recovery (including a legacy null scope) never reapplies defaults. +The operator allowlist is still checked by retrieval; this is not authorization. + +Unscoped new runs persist pre-default request digests even for unbound agents. +Digest-free legacy retries compare pre-default canonical input; explicit scopes +and recovery are excluded. Retries preserve the original run across binding edits. + The file-backed singleton entrypoints additionally merge administrator-managed shared models from the encrypted runtime-home catalog. YAML entries win name conflicts; managed changes create new effective snapshots and do not alter an active runtime diff --git a/backend/packages/harness/deerflow/config/agents_config.py b/backend/packages/harness/deerflow/config/agents_config.py index 2b06ca308..9c6999104 100644 --- a/backend/packages/harness/deerflow/config/agents_config.py +++ b/backend/packages/harness/deerflow/config/agents_config.py @@ -16,6 +16,7 @@ from typing import Annotated, Literal from pydantic import BaseModel, BeforeValidator, ConfigDict, Field, StringConstraints, field_validator, model_validator from deerflow.config.paths import get_paths +from deerflow.knowledge_scope import KnowledgeScope from deerflow.runtime.user_context import get_effective_user_id logger = logging.getLogger(__name__) @@ -220,6 +221,9 @@ class AgentConfig(BaseModel): # Stable MCP installation IDs. None inherits all; [] selects none. # This is tool selection, not a replacement for host authorization. mcp_plugins: list[str] | None = None + # Default for new Gateway turns; explicit message scope overrides it. + # Kept outside managed fields so harness self-updates preserve the binding. + knowledge_scope: KnowledgeScope | None = None # Controls which deployment-level subagents this custom agent may invoke: # None = all currently enabled definitions, [] = none, list = allowlist. # The default Lead Agent has no AgentConfig and therefore keeps access to diff --git a/backend/packages/harness/deerflow/tools/builtins/setup_agent_tool.py b/backend/packages/harness/deerflow/tools/builtins/setup_agent_tool.py index 715712dce..151081807 100644 --- a/backend/packages/harness/deerflow/tools/builtins/setup_agent_tool.py +++ b/backend/packages/harness/deerflow/tools/builtins/setup_agent_tool.py @@ -6,6 +6,7 @@ from langgraph.types import Command from deerflow.config.agents_config import SOUL_FILENAME, validate_agent_name from deerflow.config.paths import get_paths +from deerflow.knowledge_scope import canonicalize_knowledge_scope from deerflow.persistence.agents import get_agent_store from deerflow.runtime.user_context import resolve_runtime_user_id from deerflow.tools.types import Runtime @@ -64,6 +65,8 @@ def setup_agent( except FileNotFoundError: pass # First bootstrap has no user-authored label to preserve. else: + if existing.knowledge_scope is not None: + config_data["knowledge_scope"] = canonicalize_knowledge_scope(existing.knowledge_scope) if existing.display_name is not None: config_data["display_name"] = existing.display_name if description: diff --git a/backend/tests/test_agent_knowledge_scope.py b/backend/tests/test_agent_knowledge_scope.py new file mode 100644 index 000000000..1a0c7f41e --- /dev/null +++ b/backend/tests/test_agent_knowledge_scope.py @@ -0,0 +1,113 @@ +"""Persisted custom-agent knowledge defaults, using the existing scope contract.""" + +from types import SimpleNamespace + +import pytest +from langchain_core.messages import HumanMessage +from pydantic import ValidationError + +from app.gateway.knowledge_scope_admission import admit_message_knowledge_scope +from app.gateway.routers.agents import AgentCreateRequest, AgentUpdateRequest, create_agent_endpoint, get_agent, update_agent +from deerflow.config.agents_api_config import load_agents_api_config_from_dict +from deerflow.config.agents_config import AgentConfig, preserve_non_managed_fields +from deerflow.knowledge_scope import canonicalize_knowledge_scope + +SCOPE = { + "version": 1, + "mode": "selected", + "dataset_ids": ["policies"], + "document_filters": [{"dataset_id": "policies", "document_ids": ["leave"]}], + "display": {"datasets": [{"id": "policies", "name": "Policies", "documents": [{"id": "leave", "name": "Leave.pdf"}]}]}, +} + + +def test_agent_config_validates_and_preserves_knowledge_default(): + config = AgentConfig(name="researcher", knowledge_scope=SCOPE) + assert canonicalize_knowledge_scope(config.knowledge_scope) == SCOPE + assert preserve_non_managed_fields(config)["knowledge_scope"]["dataset_ids"] == ["policies"] + with pytest.raises(ValidationError): + AgentConfig(name="researcher", knowledge_scope={"version": 1, "mode": "selected", "dataset_ids": []}) + + +@pytest.fixture +def agent_home(tmp_path, monkeypatch): + monkeypatch.setenv("DEER_FLOW_HOME", str(tmp_path)) + monkeypatch.setattr("deerflow.config.paths._paths", None) + load_agents_api_config_from_dict({"enabled": True}) + yield + load_agents_api_config_from_dict({}) + + +@pytest.mark.asyncio +async def test_api_round_trip_preserve_replace_and_clear(agent_home): + created = await create_agent_endpoint(AgentCreateRequest(name="researcher", knowledge_scope=SCOPE)) + assert canonicalize_knowledge_scope(created.knowledge_scope) == SCOPE + updated = await update_agent("researcher", AgentUpdateRequest(description="Updated")) + assert canonicalize_knowledge_scope(updated.knowledge_scope) == SCOPE + await update_agent("researcher", AgentUpdateRequest(knowledge_scope={"version": 1, "mode": "disabled"})) + assert canonicalize_knowledge_scope((await get_agent("researcher")).knowledge_scope) == {"version": 1, "mode": "disabled"} + await update_agent("researcher", AgentUpdateRequest(knowledge_scope=None)) + assert (await get_agent("researcher")).knowledge_scope is None + + +@pytest.mark.parametrize("override", [None, {"version": 1, "mode": "all"}, {"version": 1, "mode": "disabled"}]) +def test_default_is_snapshotted_but_explicit_turn_selection_wins(override): + message = HumanMessage(content="Policy?", additional_kwargs={} if override is None else {"knowledge_scope": override}) + graph_input = {"messages": [message]} + agent = SimpleNamespace(tool_groups=None, knowledge_scope=SCOPE) + app = SimpleNamespace(knowledge_base=SimpleNamespace(enabled=True), get_tool_config=lambda _: SimpleNamespace(use="deerflow.community.ragflow.tools:knowledge_search_tool")) + result = admit_message_knowledge_scope(graph_input, assistant_id="researcher", app_config=app, agent_config=agent) + expected = override or SCOPE + assert graph_input["messages"][0].additional_kwargs["knowledge_scope"] == expected + assert result == {key: value for key, value in expected.items() if key != "display"} + assert message.additional_kwargs == ({} if override is None else {"knowledge_scope": override}) + + +@pytest.mark.parametrize("recovered", [None, {"version": 1, "mode": "disabled"}]) +def test_recovery_does_not_pick_up_changed_agent_default(recovered): + graph_input = {"messages": [HumanMessage(content="Policy?")]} + app = SimpleNamespace(knowledge_base=SimpleNamespace(enabled=True), get_tool_config=lambda _: SimpleNamespace(use="deerflow.community.ragflow.tools:knowledge_search_tool")) + result = admit_message_knowledge_scope(graph_input, assistant_id="researcher", app_config=app, agent_config=SimpleNamespace(tool_groups=None, knowledge_scope=SCOPE), recovery=True, recovery_scope=recovered) + assert result == recovered + assert graph_input["messages"][0].additional_kwargs == ({} if recovered is None else {"knowledge_scope": recovered}) + + +@pytest.mark.asyncio +async def test_harness_setup_and_self_update_preserve_binding(agent_home): + from deerflow.runtime.user_context import get_effective_user_id + from deerflow.tools.builtins.setup_agent_tool import setup_agent + from deerflow.tools.builtins.update_agent_tool import update_agent as update_tool + + await create_agent_endpoint(AgentCreateRequest(name="researcher", knowledge_scope=SCOPE)) + runtime = SimpleNamespace(context={"agent_name": "researcher", "user_id": get_effective_user_id()}, config={"configurable": {}}, tool_call_id="setup-1") + result = setup_agent.func(soul="Updated soul", description="Rebootstrapped", runtime=runtime) + assert "successfully" in result.update["messages"][0].content + assert canonicalize_knowledge_scope((await get_agent("researcher")).knowledge_scope) == SCOPE + assert (await get_agent("researcher")).description == "Rebootstrapped" + update_tool.func(description="Updated by agent", runtime=runtime) + assert canonicalize_knowledge_scope((await get_agent("researcher")).knowledge_scope) == SCOPE + assert (await get_agent("researcher")).description == "Updated by agent" + + +@pytest.mark.asyncio +async def test_same_name_file_agents_keep_separate_bindings(agent_home): + from app.gateway.services import _load_scope_agent_config + from deerflow.persistence.agents import get_agent_store + + store = get_agent_store() + store.create("researcher", {"knowledge_scope": SCOPE}, "Soul", user_id="alice") + store.create("researcher", {"knowledge_scope": {"version": 1, "mode": "disabled"}}, "Soul", user_id="bob") + alice = await _load_scope_agent_config(assistant_id="researcher", user_id="alice") + bob = await _load_scope_agent_config(assistant_id="researcher", user_id="bob") + assert canonicalize_knowledge_scope(alice.knowledge_scope) == SCOPE + assert bob.knowledge_scope.mode == "disabled" + + +@pytest.mark.parametrize("tool_groups", [[], ["web"]]) +def test_default_never_reenables_agent_knowledge_tools(tool_groups): + from fastapi import HTTPException + + app = SimpleNamespace(knowledge_base=SimpleNamespace(enabled=True), get_tool_config=lambda _: SimpleNamespace(use="deerflow.community.ragflow.tools:knowledge_search_tool")) + with pytest.raises(HTTPException) as error: + admit_message_knowledge_scope({"messages": [HumanMessage(content="Policy?")]}, assistant_id="researcher", app_config=app, agent_config=SimpleNamespace(tool_groups=tool_groups, knowledge_scope=SCOPE)) + assert error.value.status_code == 422 diff --git a/backend/tests/test_agent_store_sql.py b/backend/tests/test_agent_store_sql.py index e18fa1f0d..309f73dff 100644 --- a/backend/tests/test_agent_store_sql.py +++ b/backend/tests/test_agent_store_sql.py @@ -272,3 +272,13 @@ def test_delete_removes_memory_dir_when_row_exists(store, tmp_path, monkeypatch) assert store.delete("real", user_id="u1") == "deleted" assert not mem_dir.exists() + + +def test_knowledge_defaults_round_trip_and_stay_owner_scoped(store): + from deerflow.knowledge_scope import canonicalize_knowledge_scope + + scope = {"version": 1, "mode": "selected", "dataset_ids": ["policies"]} + store.create("researcher", {"knowledge_scope": scope}, "Soul", user_id="u1") + store.create("researcher", {"knowledge_scope": {"version": 1, "mode": "disabled"}}, "Soul", user_id="u2") + assert canonicalize_knowledge_scope(store.get("researcher", user_id="u1").knowledge_scope) == scope + assert store.get("researcher", user_id="u2").knowledge_scope.mode == "disabled" diff --git a/backend/tests/test_gateway_services.py b/backend/tests/test_gateway_services.py index 3207634c4..60a30da54 100644 --- a/backend/tests/test_gateway_services.py +++ b/backend/tests/test_gateway_services.py @@ -4671,3 +4671,161 @@ class TestForgedFrameworkInjectionMarkers: processed = InputSanitizationMiddleware()._try_process(_Request(graph_input["messages"])) assert "" not in str(processed.messages[0].content), forged + + +@pytest.mark.parametrize( + ("assistant_id", "run_options", "effective_agent"), + [ + ("researcher", {}, "researcher"), + ("researcher", {"config": {"context": {"agent_name": "policy-expert"}}}, "policy-expert"), + ("lead_agent", {"context": {"agent_name": "policy-expert"}}, "policy-expert"), + ], +) +@pytest.mark.asyncio +async def test_agent_knowledge_default_reaches_run_and_idempotent_retry_keeps_original(_stub_app_config, assistant_id, run_options, effective_agent): + from unittest.mock import AsyncMock, patch + + from fastapi import HTTPException + + from app.gateway.routers.thread_runs import RunCreateRequest + from app.gateway.services import start_run + from deerflow.config.agents_config import AgentConfig + from deerflow.runtime import RunManager + from deerflow.runtime.runs.store.memory import MemoryRunStore + + set_app_config( + AppConfig.model_validate( + { + "sandbox": {"use": "deerflow.sandbox.local:LocalSandboxProvider"}, + "knowledge_base": {"enabled": True}, + "tools": [{"name": "knowledge_search", "group": "knowledge", "use": "deerflow.community.ragflow.tools:knowledge_search_tool"}], + } + ) + ) + scope = {"version": 1, "mode": "selected", "dataset_ids": ["policies"]} + agent = AgentConfig(name=effective_agent, knowledge_scope=scope) + load = AsyncMock(return_value=agent) + request = _make_start_run_request(RunManager(store=MemoryRunStore())) + body = RunCreateRequest(assistant_id=assistant_id, input={"messages": [{"type": "human", "content": "Policy?"}]}, **run_options) + captured = {} + + async def fake_run_agent(*_args, **kwargs): + captured.update(kwargs) + + with patch("app.gateway.services.resolve_agent_factory", return_value=object()), patch("app.gateway.services.run_agent", side_effect=fake_run_agent), patch("app.gateway.services._load_scope_agent_config", new=load): + record = await start_run(body, "thread-default-scope", request, idempotency_key="request-1") + await record.task + assert captured["knowledge_scope"] == scope + assert captured["graph_input"]["messages"][0].additional_kwargs["knowledge_scope"] == scope + assert record.kwargs["input"]["messages"][0]["additional_kwargs"]["knowledge_scope"] == scope + # Editing/clearing the binding must neither change nor reject the same + # already-accepted request; different prompts still conflict. + for edited_scope in (None, {"version": 1, "mode": "selected", "dataset_ids": ["other"]}, {"version": 1, "mode": "disabled"}): + load.return_value = AgentConfig(name=effective_agent, knowledge_scope=edited_scope) + reused = await start_run(body, "thread-default-scope", request, idempotency_key="request-1") + assert reused.run_id == record.run_id + assert reused.kwargs["input"]["messages"][0]["additional_kwargs"]["knowledge_scope"] == scope + with pytest.raises(HTTPException) as exc: + await start_run(body.model_copy(update={"input": {"messages": [{"type": "human", "content": "Different?"}]}}), "thread-default-scope", request, idempotency_key="request-1") + assert exc.value.status_code == 409 + assert load.await_args.kwargs["assistant_id"] == effective_agent + + +@pytest.mark.parametrize("run_store_backend", ["memory", "sql"]) +@pytest.mark.parametrize("record_format", ["current", "legacy-canonical", "legacy-raw"]) +@pytest.mark.asyncio +async def test_initially_unbound_agent_retry_preserves_original_run(_stub_app_config, tmp_path, run_store_backend, record_format): + from unittest.mock import AsyncMock, patch + + from fastapi import HTTPException + from langchain_core.messages import HumanMessage + + from app.gateway.routers.thread_runs import RunCreateRequest + from app.gateway.services import start_run + from deerflow.config.agents_config import AgentConfig + from deerflow.persistence.engine import close_engine, get_session_factory, init_engine + from deerflow.persistence.run import RunRepository + from deerflow.runtime import RunManager, RunStatus + from deerflow.runtime.runs.store.memory import MemoryRunStore + + set_app_config( + AppConfig.model_validate( + { + "sandbox": {"use": "deerflow.sandbox.local:LocalSandboxProvider"}, + "knowledge_base": {"enabled": True}, + "tools": [{"name": "knowledge_search", "group": "knowledge", "use": "deerflow.community.ragflow.tools:knowledge_search_tool"}], + } + ) + ) + body = RunCreateRequest(assistant_id="researcher", input={"messages": [{"type": "human", "content": "Policy?"}]}) + load = AsyncMock(return_value=AgentConfig(name="researcher")) + worker = AsyncMock() + try: + if run_store_backend == "sql": + await init_engine("sqlite", url=f"sqlite+aiosqlite:///{tmp_path / 'runs.db'}", sqlite_dir=str(tmp_path)) + store = RunRepository(get_session_factory()) + else: + store = MemoryRunStore() + owner = RunManager(store=store, worker_id="owner") + request = _make_start_run_request(owner) + with patch("app.gateway.services.resolve_agent_factory", return_value=object()), patch("app.gateway.services.run_agent", new=worker), patch("app.gateway.services._load_scope_agent_config", new=load): + if record_format == "current": + original = await start_run(body, "thread-unbound", request, idempotency_key="request-1") + await original.task + else: + # Seed the actual pre-feature wire formats, without a digest. + stored_input = body.input if record_format == "legacy-raw" else {"messages": [HumanMessage(content="Policy?").model_dump(mode="json")]} + original = await owner.create_or_reject("thread-unbound", "researcher", kwargs={"input": stored_input}, idempotency_key="request-1") + await owner.set_status(original.run_id, RunStatus.success) + snapshot = json.loads(json.dumps(original.kwargs["input"])) + # A new Gateway worker must recover identity from durable storage. + peer = _make_start_run_request(RunManager(store=store, worker_id="peer"), thread_store=request.app.state.thread_store) + for edited_scope in (None, {"version": 1, "mode": "selected", "dataset_ids": ["policies"]}, {"version": 1, "mode": "disabled"}, None): + load.return_value = AgentConfig(name="researcher", knowledge_scope=edited_scope) + reused = await start_run(body, "thread-unbound", peer, idempotency_key="request-1") + assert reused.run_id == original.run_id + assert reused.kwargs["input"] == snapshot + assert reused.task is None + for changed_message in ( + {"type": "human", "content": "Different?"}, + {"type": "human", "content": "Policy?", "additional_kwargs": {"knowledge_scope": {"version": 1, "mode": "disabled"}}}, + ): + with pytest.raises(HTTPException) as exc: + await start_run(body.model_copy(update={"input": {"messages": [changed_message]}}), "thread-unbound", peer, idempotency_key="request-1") + assert exc.value.status_code == 409 + assert worker.await_count == (1 if record_format == "current" else 0) + stored = await store.get(original.run_id) + assert stored["kwargs"]["input"] == snapshot + if record_format == "current": + assert stored["kwargs"]["knowledge_default_request_hash"] + else: + assert "knowledge_default_request_hash" not in stored["kwargs"] + finally: + if run_store_backend == "sql": + await close_engine() + + +@pytest.mark.parametrize( + "bootstrap_kwargs", + [ + {"context": {"is_bootstrap": True}}, + {"config": {"configurable": {"is_bootstrap": True}}}, + {"config": {"context": {"is_bootstrap": True}}}, + {"config": {"configurable": {"is_bootstrap": False}, "context": {"is_bootstrap": True}}}, + ], +) +@pytest.mark.asyncio +async def test_knowledge_default_lookup_does_not_break_new_agent_bootstrap(_stub_app_config, bootstrap_kwargs): + from unittest.mock import AsyncMock, patch + + from app.gateway.routers.thread_runs import RunCreateRequest + from app.gateway.services import start_run + from deerflow.runtime import RunManager + from deerflow.runtime.runs.store.memory import MemoryRunStore + + request = _make_start_run_request(RunManager(store=MemoryRunStore())) + load = AsyncMock(side_effect=FileNotFoundError("not created yet")) + with patch("app.gateway.services.resolve_agent_factory", return_value=object()), patch("app.gateway.services.run_agent", new=AsyncMock()), patch("app.gateway.services._load_scope_agent_config", new=load): + record = await start_run(RunCreateRequest(assistant_id="new-researcher", input={"messages": [{"type": "human", "content": "Create this agent"}]}, **bootstrap_kwargs), "thread-bootstrap-default", request) + await record.task + load.assert_not_awaited() diff --git a/docs/pr-evidence/agent-knowledge-desktop.png b/docs/pr-evidence/agent-knowledge-desktop.png new file mode 100644 index 0000000000000000000000000000000000000000..3807087202bc47901c2c4e8c2ba74c7b92cec722 GIT binary patch literal 90286 zcmd421y@#K*DZ{Mba#U&-AH!`(jeU((tXoNcS$!$cXxMpBi-Gd-^TZO-t&#~3(gpO zpc`*w$GYa4bFO&>%gKl#!r{Szfq@~4e;4@y1_lNE6@ml?9QfnvQMCjN3y z{~Y=#0^o`NJ@LW8hyo-3-+%lF_4ya`xvBq>TwZ5 z5QH#NxlvAC$F zti8IhurS*T`%TDi|LO*lY=7Sd3kz#ZM#k0Em4JzH=_VSEt>Km5?4Cd{Sv3YRe288=Jbcyo@l}tpDKq_Oj_kz+_rb zR7Our%f`+=JvoUQn&ZV62WexH4~cru)0UkLA%-BZys}~}lVN6Llv`dt{$3Uk#18t0 z!;EZfb=9>l$CGhSNCebWRPR-CO2v!S5g#9Kzc)fnPi1Lpio@?&f|Tzou)o3Uc4xA; zU83FiM|P<^0tpEod*tac zfJl9ijP9@YAF0=2VSRbzXdMvI1qDH<-2sbBOLoBJ^t=Rldwcu(cDHa=(`z;n5N8Yk zSGmmX%Gnjw|I{roT`>_AjNS*lnNxn}#3SxlJ0@o4WM-p3Nl8><2+U1QP3tdak-jim zT4)hCrsogO3t3D#oY#!N5;5oQ!3Gf;fug3S4`P9iNVCnx z)CGFJ$R|`t7Yhq1bMvEEsu&La4)B|lA!h ztiAVl^AXk*GC4WP#l`i#1nz>`G(Qe@b+zQ=)U>swk8fq&Agh@hQxldEVBk1!ZWkWn z9elnowX{4Bd0=*TZ`s;JH8F1A2*ql<4{KM<&5c{^8cI}D6aa-N zM^se3vNC#2o#_PdhSpYyv$;9t9Zbvx4$!HP{tsq~w5di!B;>N-sVQdn<>oUmjTOi_ z`mQWp(g4my3vcK8A8JdW)#XL5R2e6k)16@zMV8W-()jKD^QRdxB&6F^huR#xeY1k> zh6ca9-QAjN1Q@%-Zt=lFln&e^wTetmeUjeph%DbDJ zBP)((M~9IFyb++>YCb~ZMptXi|r6; z>+2meGuN@PGXp{Ao<`vL`6kq!Qj)_Hl)sv-O4q)iiG$+1;~XShoy_+)KWqJVYo4Hg z)y-@V>pvQ{;sBc3pA6r>ZMC(IpuGCeL7wnEV|6Fo8!k3IX^`w8SJ?DB+q9=&7D76*Si5YkPv(a~*F)8qFfA70mEk?N6Q zIy$<)bq4tYBpr1E0ZYJ3{~HTOa*9!{#j$7sSIHz?U1h(Z1cQpyOwh-GzR@rk5a|CW zia*wVDfO4J8G>M+X*7-%Y%Z9A)IhXs(01#!&f$de zDuN5o`vE3XEeqinHug0fChry0>cU3czZ5d*tIcP+dU~i5{*jn*aS8M~FFOg2`q7Ea zp%c2K?*uBFAG)U_r=elHt9O{d7F*E2nzYZuhluAd(FxdOv)*)kpXg6tZYnCMDRx#m z!tjH|YGV<^U_)LP=ew&LDk?f&x6|hx8Wk317K$)pcy=73lICXfANrS#SJ)^KY>z$< z_R`W)o*MO8ZEabFg`5=Z^V14=h$o(=#_^Kw?th}Avtp*h`@bcpq|93{&|-oq%?`}} z{X4ueTAM9wv)NO4xRg9?GS)fi(@8_DGPrkTXMdF^oAQT@E;Zsit>||VRU9z{0ssxp zDW+uV6icMo4;Pk}D0>Ub3cqLiN_(akX z`HjQo9Oe-~P-_!*r(;uM>+;9P$HPN>VVnR_u}=0jpoP>P{qSX{q_o)$EBx@`6+pm~ z6G8x?P-e-=`}WoKW14DfYQpe12|Q%e^qD+GQcFDb14OgS`}>xf1jt(gMMT4h+2@9b z(b*VM_53(ExyqcK7c2CbQl-4>YwNQWq-!P4P(nu277|U-(b0hh>VqSdX>xm5dvqDO z4S^03YQIO{alRhZEQP&yb~bzi#Y+T!vU~VAq9D7>oSd7xGlYp;4{`_+`D9?;rCryKP9rPt*JJ=g)6z&>&fWGM?LUE~-MX z{a&1(r=Xx<|H5jyR5NJNqvGU*M1lX<>~H{)mq$)JmQ3tv98XI|N9P+uwcS{4QdK!U zrwrfz0?@FImfGs-xPAgwGsvTEI9Q~|>nnz67>c(WGS|al8#2@xLvQ<>jR+{AhK-!Fvz|#Ez-FJ6IyoNAizY ztgIe+Jwd0_fwMAKsBQpBm{BamGLl{OnVIW8tYr| zxI5E=un&HBzH@kAv|EZ_VLAZGl*c=Z; z1Ap-fo*Zm!kh%4>Ra7{4_l+)4Qd76VgC}Az0JV{Yg$E@KGyz{oM!{>u!k<4a3=V!n zW9${$f$U!{kE|=BV^hID@X)gDo<|$pH+XiF6I(L`i~MQ$j@CWjPr*lu`saG)pqgn? z9)N>j@j#!6n9>StagLO|Y zAn`6?*T3JPLE18qe2_x%5YW)zmeP`8ORM^w_?4B#(b1NkijIbcrW|0~At5D&g{?%` zk>z$*mz+rk$6F_9QHh_|j5d309(LgC;?NiVV{S&(HbAlhzkdbVq#&jeq~!y)qsYAO63K4_Zkvzpp@Z%vFiG-7a)nn;P;XO zfb_Dv!D>m+c?BT&a8q#X@raVAW*eD8F`s1C1iU7@9`?r480e|upbqyB56ZM_H}8WL zaBx)=*foD@b8D@+aJ;I zcqQX$JD;rEU;0*vtlJ*)($iOySM;`Z_N#impD3%^@+ zE3dAOIWq5yAPnUm+~^K$Y=#G1f_;dtZsCimYfCAqui6$*k2m+Xw@$pg+7?nZM6$@F zX`5r)h6h!B6RlY6^IN?qx_#G$3#LDb(H;GXc8V;dP z0?J}Gs(RQ_aB09rcuV3o zQ5Fl-9iBUBFknz?K_TS^o%la`?04o)=gI6^K_o*ZlUSh}7;HfkIqM$Hl@{rYrgE}; z{tUT<=AnA-7ZVec{pU}fY(|9TzUl&LdCR4QhsR6(ngm6mTBBWVOw6F-lauFlya>OD_|>nv(oj*sdM~f|0PA;I3FxOv%8I+& zyK%Acm9~>%>+6{S>$HDw0+SiKO`xMX!qgHmM*sxm+TnM{H-ORy!9e=t<>hsBbYx~` zUSB)(mXph-BeX67R)?J2`spds3v6jhLPCCiJ~j#p7%3hR5t1#uT4>bRn2d>uNtRqe zj%R0uUiZW|Ok!eUJiNor&92=D!2yFvUSoZI@Sow4-GRtrFnpid>g(@H)T*P9E*%{l z{F+0VQ#tKFu6@dmCKFRuR#sP2Yiw*33@O*BN1A+oey(uS(<4=60%4N^Zxw_|MwZ@(|^!uOt?FfP-WO)(Xvnbs6d5x7+hX z7Rl4aC*)4VVFPv;dxU8|U*>U;n}9{D3ihE82Ps>L7VGV<{S7l%goub}!0LK`GKJ03 zXQ;NmUJP!Z00`R{z0w4qJeM8*$hw|g00^b8DvwNHn|<$pe-bR26q_liXj2>R8pdE(>YkZROf zJX~eGg(V)%m+zg@1JJ)ow7#{K+t9}#cujimn{T|#4Xk`ilJ;T;2N*!>Jo@}~$116< z#SFm!ck2zoJpZYdnUzHfNynD%vWx2?mFG4*G{nQpd!gZEXXj%az=`m|!i?I3oc_y~ zZ&bE`?N|UZHD+L7V6$`-5rM4g7L#e}*+m@3tx~4{MMyw!-sXIve~Vg0oL9-yIWwc^ zG{9IkIy&0u2KVkB20aC8HQ$x0J}iVCDAZf14+D?=8VXn`D;2gZEjk4{_Z_AJ(>vK$yiw2_ABs1?G;rphODPS-l?g}Aw$&Y=v$=GsG1o*+6y!)uM4ERwR3pW&%b`uh3`Je`H_GBW8*1|Jpb7DUPPmK$ux#>N)DDa8i( z`K`aKclt^-bkW@2+z@g*9batq=S!zx5fOPF&J@T1kSd2&e z`|=Rm0bosoO6Rk8x-pP7$R=SAFWgMfc2=gviX>zSnE@I|J+kZcLWzpqO*5b}akyc= zva%*IyL=Ku>EZoGf^xjtn&L7nC5457aesf$b2Fn*;SK=~PC!Vwao6P}D)n6f;M)i4 ziJ#=%-FYAxzZOjqsCNtw!oJ!_OOMu?&#S^fUTIjjLLs(T{;fMcw&3S)SJCl^3)X1t z@h9Z^=R2UHn1oK+7# zn`N}ua+M=Ad*b=U#p{|%27^XZ;=Au>>CCfAMnm+2*$ta66)AkM-U2EeHS}r@hxV)zPYL7R%ma3eJp;~sD<|29Z8CaK$4Xm2XOn8 z{?FBIO1V8G6J_W4>OxN<*(py5h}Xr7)cNAU#Kw2`G4{yzVv9lo@yGJ=E5P6vDCvfj zQ?2x#BD9*F&bXbPbIK#{BpLYrE-if=pBo(1n+{l0^)sK}VzXLu-QKr#h?Pm^(A)57 zWXW4gT;J$TcuP%8M4;#y9=>Wm^J=iUu+#nZ7Rta=t^XkG=;#QK#hVzH)}8JdjE4qG z_c)EbMu~|mdfI&E;k?n68#Y3V)0-_Ce&1fNU0+i(lYWD(^NPGdRrqt^_WBwiNUnEj z?d1;}dw}ALkBcK?Wd5Y7q5`@b8-2PZ*1YOw0PH6Xw$ffqK7%ItmN$^F*#qIZp_=LF2#Qg$OLmeV-dpc(=<2P^s<&(M9Wd!YY z$`1DReRSEd=9&iytd*(P!fj$P;}eU8;V`*eZUe2t@n~*vYn>5zo{3GTNT!Mcx}bdX zb!#t=m?L;on6H8;pvdNl=5~)jhi4Xt1N(8lLCEt?VX=66mtP*uw$t$x8J^yj!b_!| z$3Jy+GE!4Do6$6|a5ADe^rjG8%u?8_dynQb<^@9SreHraZ*HO=9v;ENSPxEJ0#Y4UC+ z^T54V1Kf5Sk8n9kk)gJ>Hh?6uDbhst3ma@*A54b;>^#wfX0jOq(HnqKEBige3RT(w z)9oCx>s??k>TZelPifW<8gTr&bRJ(#NOrLUt}nO{|E0c^xfGH>Q%r( zOL}be+|hIqKfTC)%A$^5Dx5Z{HF>#fZ*w{9A&noH*YOPL$(K%ZxSr5<`9Pn}A1sjP zrqs#wdj2wRB1`N63_NHJ$5&sR-|l0^lO8=@8}p;P060`uRHQy_a0zwDlei}D_{Kmr zqQ7Xl(2z7}06d+)etkUXJ--Y_lUac^PeVyb$-vO=bh7mJddJUJ&z-ZKs%av&s=0&jG^7iME zm6g$@CG|2!z44)J{{YChmvU==NNC=Np6rQYn8C3ze~%Bcvm$H-s}mhyf9vYlBzg^| z8GQhIFd`xXSWHo!qlj?;@tjMq1qjjBC@j$i8<{Of-}kkpr4T4CPA(F;82`(zt8sy( zt?z3u^J}W#+eSKp-p#z)A4c@B+WgibIGW5!$n_8j6^~U|S4L0A3lY5KEU(@o$Ma9_ z1PKlTTxz~t=WUpwoq)%=A}h-q-xTPhL42a0F$CEVmbFiomL5YwsI7FXJo*u*Yg=1i zfW>=hVt#kRKOjEuB5Oo!U|=;;o0*@_ZahNya2g!UzUzj=Zrc=7jI3>y{()9R9!!kV zbXTui|APK>bw6z|hMY0xy*vHobd^eCdm1ip)5|kwuRbNrA{DfN2w?G}r_hLy{S>X) zWD$a3{aP$8RH$TE%BLE#5S4oL= zk+ad#^5mFIsxgz~?QaJC_X*O1k|HNtr>U)#@T9<@VVYzObppbZM(>XzXAJGDiN1PM zv1%bYf_1#N`w{>-x~&96{lGww<*=3-2|vire`FBr2LQyWX(wmdp*J@VmzKP(L=I$4 z4IIS$RbHc!?U_7samUe1cYOEb2k3!KNsedhR}XOh?Ulx@fHiZ?Xt9@!j=cS4Jgo{&Y<96SdGK@hLp^uM!t70e~lOy zHw&1zNJvh4S)HN*0XK-@g+Fmi=g|XtS5JFR=}JqJ)Ht2$*hG2AA|^&I(A&p586Af{ z*VzI+M2783!P8UF*_jf4xzheFMwVwt{E4>cj+o=~nk3Oivvr$;gTuOOs4DH;bzDNi zp4-_gMERdTn{*nW=c}|k654u;zaI)0M@zW5zpNm%d@&G>^s8EFG#}T|enYn(UKDN* z3B%z-C=F>Ys%Ykh;ucZ(n^r zfg;0}IJ3H{EX%+_#|v*v*3*5{AY#oB>C>f86v=L8Xd&h%CTi?tsl|KDfo&pYZ7mxQ zqv)XQR3?@wt<{y!cPG#@1FXy)1`x z-%J61Ev?q;Fj`7pNy$)BR6R5w6UTABtIsJ{53}>DeyR2jHoq+550;+IL~VKsQfFg_e|6GmMK zt@XmDPlW#vMxD%L-U)yiJY49U^+FDg-o@0;J{b8+;?Lj^JQsi>Ez^?!(TiIaPI)HvC`M4jsBhqTWx=tnnvj1(UKE7 ztto42W_5daRasx{Z)#Xn)mlnO#JmX&4V9RZ)OiDpq5T;4c6WWOJz984lPW$K;HuAb zuV6}4RaH?laVixunoSEjiv?!Z)U+skf<3=uWn&g{NtB1RP07$PwKT%SS%+?fx+rn| zg;GpMS2`i&{h=+7oSdoXl_n}8CPr8;vpoU{dK9^I?6Ozo z(w($Utqqr1Z%yUv*RLIe+lE*C!?O$&Dd(KV1v7qY6}F+?-ko)$M^e(#7Z3{xv!*e!^iX`z-(x`tiY)n`2>iZVu$&&?AEEU4;m9 z?r3L6OZyv6mzT)e)L}bnfN_62=v*!_cOw4$#ln!~MF_AcG=z}iR1}2@T?e24PDFJq zEpc(whu{`U2YP&I^$_uEY~m6V{r)0q?D+{~dNVOW;@6Kr_@{s<4hIhtmKPU`I!#`j zd_b$Um6w)|7O*Qg3Wcf(u<#M%jy5+TPr_xq^HL(`hpxh5kURU6@d{-O+8lIjkMG6n znB3y4WQXI={b^Ft(_vNEXn6Jh#@|@K?9?*wy~&zQDG?Jh$ZSw80yfd}>tBYfBvR?c z%_g}S=)04eii#+T0*=M1sh(ls>}+l4S6p%lwRYc6F%;4ZRX(@Kb*gS%Cxzj2K&$6PTp3R z+d=*9YY*J;CJCJ>*3SZ#$?9%weA<(H2~h9MZ(Mr3eo?HqWQN2GBeej9Z+2HR7n#E8Hl%1+d^ zvhviEAMAmh`pYYFKd7)rQhIWd+eE`e^=*O_m<|6Xl616`wxpx3Yiz{)M9f7{g!6Fu zz!T4)co7_9!ppnd+Oqs5?RSE<`y5i;!^)qsvePSuoZ)AwG-j9U0@Pzwp{_uoAR%{V z2xS?-KGD+Rg>2tM_^|>V2NqXQ7}%h6SffH}D=aKLYh7!yLM6ZynqM2SU;PjZHai5oT%@kmYHDj68#oj)*a2xP>*xrm8jo(*O^h{8 zM?xpaN#ujy4y6wlCUp@Iw)wUWHqM(Dvs_IcPWGAF?f{ZqBVH%DE5Rjv|J=mIjyRj* zHS>kNmHQTz8EpvyG_~YfIKle$YeijMKwD|CN_APX$R{nU{+^j00dkcn7`BQ~eFE~t z*}QD$Gu?0m@q`-2kg{@e===Ea->J)h91&tsP=J@TPbVsG`6DdZwtjd6d3x#t$LaA% zfIr>rF!(<4841|Qp}*kC9WZ8YSk>3n&D_xd6t=ZBgY=r&xVmh>58X3bwHdG?aQr7^ z0z6hT5o2R4mMI8`XUtiKsM4Pn-S4IsB&qoVPt#-cv<*MKHcH9vL~3~TU#UVo;ikaZ!{cUTmuv- zcX+BRX(qbK9jXf2cgH~@M`BhpFO-1rIO!?G&C1O!@Hg08dIVZfu>Q2=W5l-h`6~m9NNT0-}}9d2jcsk;tTmejO(=6ow&BtC*&t3{gjrrbdpJr%k>Wq zuAHjQWMiANQ7hMxy}rBi-X_2wWzAAU`oOeH?G}Z3L_ks!-Xcik&nm3$@$AHcqRtvj z3fC7_VK+lQ04dx78_wxu0b!mU7#5Y5j;@VkllnTTGSIj56KOSC96$hc^~)Edy1F?* z?++oe-01JGGYe{BS-812 zU}IoWc@{%9fq_FjH@JOJ%m@u-(Iy~;;HBNy>kWM;3xF}RmL*;h)G0|U8zbEYLl+_LPMAzfG@C6Xhb{U{wUK#v zXs*#$lK(?l1$0nh+6TnJ4DOY5=d*FO?HCIo&+3Tnn%Dy7WRPxLXzg@`aeQ)6gJP!42*t81Jqny zd92OM!osKQ_Uej_jcsU{p~Tu$fMmv6TDmkLzqvj^Oj6R^P67`cuuw?aNsr|b%*}zE z>AxxgzTzYi%U0owHkOv%G3&NhjsOH*D9Uy~4 zG@sFec_7nFDP+@x`?1(<1dw%w^qJXg7?!-wznhzD$SU9jiFrIJDk)`fc|S)eX9d?>kHpR($k1F~6%*#z?+;u6Z>KB}Nb6vFK{jg3D{9&u-ydiY34taYP;VcL z+K~5)C4+!Ru}@gf4T)z=rTycfC>tG*VBm(pbP^zc4fi>lzkdK>TrA3i-yK=KGyqd4 zsxB<-?bI$3BCR8pAPx5QeUAA(4dgcukMMQLX>t+DadzoSe%?;b_iMby0T5gkq4<2| z!UIHjKl@uMu%IuDh5LW|G>K@CL=xl;l^kZOH0;$b{HYt8E-`$Kk_dKR7Q&~T&^7i)p)y|Or@agzQ$%Eq8dU;7n2rgdk7o?`y*N4-7 zt1@~9o;yE%4w-A6w+lWtKG!#5&Ab17o*w52jEs-jH%kiZRZUG?Kf-K7(2J8oX@Kjy@~h=M-Ci}|N@_zWK(((05^IilUg~8D0xj@_ z`|eNY&?gKG49kU@*0#0}ciwR{@s*?$K%kBrbS5h~?nmc~KiR^`GBKR@g+O#-x3t;L z?y8ayW53>cl1EthCqH4+c?1D(@GTQs##dVcI~8goD?yFAQ)-&>j!{H2!;3$Smze9@ z1YCB{06U+XtE-q;FQX53?|<`nnwA{r4+bw7^*DJ1*iT3ME~mrVC@Z;&o?wTZ+_o#1Lm_HZ{5~Fn3&V^Qc6Jq7{+gf z1SV9t`Wi2Q))~Pk4Pc6GM)px*M8xHYu0I_9SnoC)SYQDlH)u@j+fk~A|r1U^Hn1DAj~X=8c3WDk}?mo9DXHmyTKyaxW@vFf zpmw{S?^-4()p!o~=GiqIV|<ruGMw$tdVub4rgXgD!D z+~`{EQGG=RVoIH$GGb`BCO=O41`^bfIN8h_CXzBU%G7i{_LBGCcDMqGolsdqejBD}OUY3+cvis=+vkDAy zcol~f01f39T;kCs*p z5Jqs%fa~3=uYo8cF|QfNX?RIvyE=hBXGXHFJv)c zAaNfn`H6+KdoNt4yDA0k#$BM3dQlkDFPp-gRnl@fUz@_QXtXvrM~@Nm>RkBDho75} z51qrumM4YR&qXz(Eo6t1Bt7CSB|n&a=r_9uG%_GcDU-n^&g7pooxe^2h8c)qQBtaw zc_@1puX0mb9ym95HuoH2CiX3B+GILD?R%6G6k3lXOeweRv#BPzT`AK}e{6kZ;2^6aL62yk03P({r_IqZ)%WGK z&3I?KtNI&%ah~%%y6I27PDgxu7M5qk4jsYU$>CvP5|rItOh$NY;u8x?j>RA&N%*UP zK5_?7d*%HCr15d;ro)=TBy-L$0ipo4K z80=X0x%Y_~I*AD?nTkB7k~KLSX8PRBpMZA#8hJ=sFiI#;$@4UmeeOMZEc&)}P`w94 zb3KNaNh#Q@RzE2H`s=9wgWAgXd`*$X-y4fg!yTzL%4S>_wOiKhFjz@D{d6k$BU$&_ z>)-Zh624Cnxw*ZUfmqd2pyMTIbeuBULrAWini>L3x9j_Zi70_Y>mUd{1PFAHO0Sq+ z?fmStY>5wTkKXH68c!@PRi+z804X&wJwe3&k+r8E_{PkKE&5M9hLG4Xzmq=*$GNPa zbV$h=8SM#4VcCTUp9j5sB>5Fz|M3>U*@cX&S6usy5ksMl(>~hV!=% z1mLW1@_5{W(<`R#02zP4+xruMie!Se^t;!4#5Zo#5kf-)U$a$iMy}dIM>+uo;s+xQ zH?&ufTHZZoK`Ak%pGT8gg{ zb9ALa^$8T(78-%mf{y@2yO%_!P!kiZrhbhR;J^|FU0jq;Pje?ARF4OAng7iEY_mcDCtxALCby^7oD`4pM1#DuY7uAsh#h~bK~b=T zsBv7gGrbU&X}Q}lVLa0H+Gz8JF-7Udc(hzG#v%@12euydmXL-` z#s%c@yUwkjcMvNlqr>=jYG3{gj3R_9GOx4-=t%qios;ZfshnM00DI zRwkFRdFn+C?)gMu4Cpa!{ z+A$Kg_HQZg85xO{#zBH73?6{atP<>376F`I)jk_^+MNmjx{=ZBO28!YLBDD|(iu=w)F8>fAa$g>&RccD24t^!Kg zcu9{&Mh4&wIf_lI8xQaaYSL9ugt`^gU2e;?ur%%-!VpJNXXJo-vOwX3Wc(qDwLkfb zbo^&&8DFCxfJi}YfBL}_U&Q-}Ned>LD`-*t3OYxPrOPMxK%mcc@y9cD@UTAn6aszg zr;vi&UmuY-P|z-k%iV?fnvqjJXjhUUr-2r}DR8hEkEb3UZ9!4l-Kg{6Ehwn6L5f}4d zTtA|9E0W8f!*JX=RCM@oWo&z>3u_0b@UbiB@nX+$;*V$B6x5Wx(z1ngMfX=WwjU)l zsx~3EH8XMgX#?3DVND7Z2(VwhO`-uLpCUciovRw0_kY3JvDd_H`2c$}*~3XPdC&;1S$yf_vSY zM!Yf|Bf`}s{Pq>0e##LhN4uO35KcONq@s-Fn+*$0~rv#Bz1 zND4$gBEn9Y(ox+;LbiWhPCEA1PBpzvWsFe;Hh`d}IvB>pLp^VAg|KP~@fO82J${s- zk(vdepM0Bg;B9Db{FAWfstJyt;q}}T&a`pdkB>?;M2;m$kcuriticnNyP%gtsA+wB zTL)Uh?$AYa2(6 zuvkPS9%so@K)Sy_uAP*G%s1%HtnU8C^k2!G08>mW4Uddekuc+O7$zG|peh3`r8WJ4 z^r#9Jrvl<#Vmo`gSUEYyHm$&pNk~}8h1A7qz<%TimWeS()(+v?N}AyET6VryGkHkThHX$hF*g|43(IJmDK zcybT2ageGyS53yW3HY62fs|dIWPzCDA1$zM4{7P)@8bi9G6^B^#mQL*uD^7R?SYxT zOI>NH^s1x}F~isM-BND(BxPkRAk6Ng^i*H3!@@edu-+-|-Ph*upl&1gD>(SVi|>i+ z>u1xsFskIuY;t+b1soPLj`{Gz!~d8m=#R#@p8+UyiwF_T-M=zDhpU-bD7y`1Csqz<-u*{1UT-IanPEOY1AM#f%LN%M+y232;$A zy7aaEh?@u@wQyUC4X)_2NtELo@HpItl^FGq&Q+4oe1#PO*ba{SLV@iDkz#VUM3hz(9ODzv_tLL4-VGS_sG-)gD9rs-@yUB?vLsJFju zsK`8aG@cxa5&e*WyoANZ@tX#wILN_JR6z=TZLX$^5OT`xr7<#ah^+pn$hjqYp1?LS z&1Ry=v1k=-SJCM&IdYX;^(E*hH^J#aBP9gS?&q3wFn{8J<9w3YWTY8F#T;vX--Ex0-`1YQu23n&Isu6gd!7)z%X%o@@a6j6HI=E2#qPYF8Z z-e2IiU^ZZ8u2D+zmM1C83riKM2%3d~9jD31t!@M#O){iMiVNe`fE6Wyq6JpOm5;qX z_KT%JJ)DvevhL9NSc53^llmA#Guh8VSvp)+_WDc~+dW0-V|J|xO%FQ_G?&n62HP53 zubE2YNVc2zoGGHh#=<1#a_3<$*X`|=Y)sGA$~A|!)NGWKmjoROQg!mlx2GDz7E!(Y zyNQUScr93U<|d;LvGiN%uL7=1quzfG?`*(_)3sZHCD+{qe1wY< z_ww9nJhBbWHQIT6bZ3x_T+ami=MY;#{mVXkOP8x4-q?VSUVoH9POkkbCB#SXeW$4+ zvJES?eE)05Lo$)PZ$kL*IRf0j-};|(U-0)U`OnG!J&<_+v7Q$xH@7EX3ahTJ-snBp zE2$zWG2FoS=#K&uRh0f73GOE4haJwTO8yebqi~tntbDfoftE;lPIX>TOoz+!@))O3DNRK|# zyzuYe)6CU&4Q-;8>cA%0TSAVm6>fm1muZJ?{jmX2;C;I&ku*+bEuhz zZO?1T;^=+xvGM&BpEqXKasEHb-a4qt^$YtKq!gv31Zk88kw&_e2I-PUx;sQ^q!dsA zMMOfnK~fN;ySrPuLEv3mJ>TEV?~ixpJ;Tg7EQki~O%vKwi`P4vkwFxVNMA#M|Wqj;F2M2iv?VFLE`PugdzC6}0#0|+tF9zA^ z{KOOUU#r|h>gZTx>nkfF$2+&o6+Q@2%xqOXonl@oL5M%k;Iw8@cXDCgLbXyE zJtMMGf>2-X;C6ki!oWS~DUt-aO8BBkp)eEF7|=z(OG&t|{QkyK=y0I@8>|YcK@yZc zdU_wgq>MJo5QTjc?LbFe|C%Z4`|IyZytYIYv3Y*!sOlWSHYvWuke>hbiIbVU_)w1- z=2B+>_A56OF;T;p&GXM5tJ^enB?+P8VfNvkK?ICxNnc<2WG|mo$?Ohh06QZ^slWXI zBjYWtSGT#m_cLcr7YWR}^ak`}ePV?O7F#)Z&%Xbh(= z&+W0*9_$^6dL$(3a9d9d^;?PCd`izQ$|7=)Cuw|jjX*MTzgX}Tz~=+o-U-er3s zkhkGRze9po0cX{a`?L>!fs$*=U~ak$W{KLJWg;8v9IaEZwTS3THl@M-N)yy9qUq`7 zp{{;Dt7WhdDaT_o8hVF@rU3`J?kI5iqrH<$J$FtW2+I zIUpr08up}i%v*Qxw>Qs{zdM+&TCfq6um-#-Exqd~4U`44Mix%;vrKNSCojgr0_Q#V zM;__uSe4~d_ZTa!DhhwQzV*W>6-?m@ABE6g#`;uQ)LReG(Gg@uz!`LJsiQ}Q<(0IC z;Ei4^No^&~*hHP@I7wLI;#Wg@yTPa)X(4 zoBl^~2tV=0Wi`9+X)ZyZ<<*RliV6pi6h;e0uKakiwOX3Ot<K z60M2DCoyo!8Je12<5Dr0rpLj6?cwTGTUsnVble7k^3RZL*cx@4XYU2qq5`+>?IKzs zs#S_DZ+sFwd~!l&ws-fy64}?s0g}}4zyL~ad#ixd;oxj49q)S#lPt7AP!^goS+l*} zTIeL3GQU3Iy(5p>6U*$ytyyYRs`TW^i&IgS!YG{g^jA6_9rkt}{QM?zN5(3Tv|zUJ ziths_&-uAG(KB}I+{N2KHUJG|kW5W6Eq?6fakZ-;Qt8b!$ewn&T-6|=D?{RnoI)wH zf#yMb==v<;J=#zk3(r<=_n<@6{Pk$(%CvC9KEFvkG|*$N7=g_D%=&8jbd+#@alw5^ z(EH~mBx-!ZIXN;H*Yp-jj&kFE9#1uG_8{(d@s--7uU{Fi-y)tl%6OX`IG*%6ft)BA zWASi;Bg!EGo|K4b6?2?tFpZt0vOWJf`i&H@c>uW@I9t*2nsM z@LqO}(IDO3)rCF3sP6ekOa?-CKKP)>B~0O+Fubw3G$d;JoE4Xom7(Ibp{4mw)Sx}> zjHTBX1D41Ew5*!PUJhKZ|H7E~_N8NBjYQHQGOu1zp^L8~e>m1R1YwnAq8QZ8n&?zZ}W_Qo>yKDMTJ;afz|ht?i2g^qNMVZYKHr zi#j=l2Ywrc_SQDP>+k&-W4hU128H8BoKOkt`L;n`dUoz8W$?>>zCzC7iNai;Uw7ir zUN(u%q7#7po%qHztXORFpyX#JCYkSY(p8@ENy)dmx;`FIXMS=!Rvvfs&n06iMX%$$tHv*N+A)f$EZ#8dQjF2jwSfw6 zz$az3tAqM!H5DX$f1DV$eX>Xs6MfW#Zj2dC{Tv)zf7nF)N?i9l;e-tqwczzqyUW?E zHN=+W>Wne)Gk6$X5;Divl|5IscXZP0pkXJ|15Kcq+z1y*Q-UJn*$dy=Xx8c66PK=E zt36M3%C~}qPTH;5Y^EwX*y^@>)v$GRvr5$^Qw{Y=j|7I*5+38^Yf@bwvR(Opc95xrC1vd?~yRP zM_IX=3a2?mK9<^O&NOZLnMEMhH~g5W@MsR16%P-Wb$AuFM`tDdRhv^%oN$F^q{MW& z1(%(Rt8|4#WR|Ea8HCo-;ML{zKxFLD8wR`ItLI+7hHg#uVaBrZGlj@QXpZ$QT7hlg zvH5oV{>s?#$?(lA|Aaimjtd*f^yT*YRm^1ueOko!%g(zRai!M#z|+bqaV%d>UaqHX z1|FhK{-|7EVn(AM=^IJbuhwrx34Z3^RTVOG`Lz;r`}XL%X)#z90;q(}9`}Dz5BV-! z^V`};<@&EG4<~c|YUk3&-14|3&HajbV(B=m2qf5f?W$*7fcSF%*w@^(wa3(#lSn#{+yavY428bQqG<{vua)nCxLeSF=Lo2WxRzR2$S8wT5*{c0_KaWS{oJu*7#;PV)m8gd+iq_Ns#4^qca5v_sA8AQ@76)l!b zk;dSq-p|hl zLgau5;mQnZq+?O#JJTy5(TH3Cy4} zsPF5o7y3R;B!7G1b)v>oQ`1o&Bwbwwk%N@13G?MgqJ%$rYg5A}5;{*b>gUO2GP)n{epL9J02GJ*2~)dynvVxgqmfv(;I=Nl54&8Nk1dOG1LzXy#8HQiZMe z=iJ(BwHb0HC>8T^Xle>;PFQ54-G@5poEpzusUK}s7UH;{W94Gp}@kOede(i-LD6w=%lK0vm?asvZ`5ltyVD z?i@P1IW5|DgsRm$OIXN!3Jnc~{dhYlNU9phKzHu^g7Zd9>B|~tmd5lYLhJGNd&7lA zB`d!+7$Z@7y((>g8~2~cz`sb7unWIbbgmhh^?03}PM{ah0-FAsvZY078Bx2M15tJKI8XD>Vf1gR9 zmCcMq4wpi{`%aD`LNQsHD?IyCI`upQB<`jC2k!}nR z_x9G0we=1CL_@RoG#e^-XOX7?L5a9HHTQ}tl9g%Af)qFfKv}Js^Ajb-JtaCAo3t%n zH!I&tNtaE*(J9j@SmdecvuDOOEUT|+Y13u6?q7R4$4aSMSAi8sO%>J5!TmV}{og0t z8?~}yA@}j)$GUv%0k$$KHUJTf+2+lStG+-!|3o-9_lAivTU%QPEU=$^;jmjGKx}P6 zAJ=ATx>ykDYy3IpbACRn-8U=sx-T(~VeX zv2zk)k~LD|KT9j37}=+@wQ`{Rs>#J3H1_1iK!1O6ak0Nl?cyd7)Np50Aj$M>^*wVV zWN3JM47k!K7A4`aJA^{QU6f8oOFP7_t6_0*_2Y*(L`2}%`Tee-=My}d*~4?Vk$741 zZzxakMpf%p@bE$p^ZLRIiU|gqABW?gc3bKD;C@>sl@&z8f zm0_+~XgO1p?5EXa6FB=aX(M-61b)LC691OhL;S?KsyQ_1qmX^Z_GTR9i-((Z?$&GG z)hFGPkCWM6u5+tIq-0AmuD2-3#nXgTJ-05LhI-;rMq^K=9X{8;E64HaBDRq1CH;L~C{Nkl)*eY-y$$!;QOhp__d56C!L*&j|2}cQ zl&_u`bFPN66uq8x|NUY2>dpfh6j6F=z27q2DB6lqzViS5uY5#JZ%eeA^po@A{eM3~ z5P>E*T&XO?C}8FLPr~Z0Lx354M2Rv|#s7yPJ>^2YlzYX+c;^IU3c)Ga8QHSoc(@PjyDhCPXZGCr`91GRomwoUd~HUEcRZryl>F$u zlJt0?W8)8*J3DulW1(EDQ2ds5WfSiQM~t&0O7E8F){XVg^#s`&8Ns#Ik;D_<_XAH$ z@0TyE?;#GjVq`0X1B1iM>$2sNVumg@xq!7xRxFo?lbB)&AJu)|Kr!5}21b;9qoWM? z*Bov-H9kdME6=Uz92$y5TI7hf7i4Ct=Nsh!Ou$^y?Flo`^m6nwq%!=Hgh4AYSV?B%F)wLCb`qyalDLYkM z5&0I1!)3}S=I7CupaUW?KJQ&xfq(WIXhdnfrgX&yUtWj{`TYUng zkmN4d9Q^L%&^fNJy~aR6-i-8btlC^B&r>MWjFJw23LoqQVMUB9q5zw#oxkuSiKaxm z0~|89feNX)mKRli0Hmp`bap~~(k%8gX-)X>AD0y@Z@y$@d7ed1T0i9Xl(ClM1dHVc zRZLf%Z!_J~xAKgWU$bTB1OCQNLqr>Gu04f(;5R2T!}-&L3aM33hnkf1O4s$n4u7og2d|JV5xOg_&OXj*;rW2 z*}MnOor|2DMx{KoP~FhMK_=vKYAxM-E->?^BDo?F8G%7SJeMK$5^Q8M*&6u(^DtjGmwdLi?39uZyR4We#%d;DG#;_VVRbNbK|#6-i<) z&nAMg(Q0@OXL@9$WxSn1cPqq_}tkwCWo3I*5H{#{2-PX>@9>kT4_TYnl*W@pAJ!tB>X6Y^|(}DWHp} ztE*e_QA9QI-?H^GLjU>cVT$L?7C$(L$O>f%`qnVOT^>N{P7G3m`oP-qaJE1iIYeAr>2( zVx}p^OhLg@02jwE5ylEIbJEh&U+Jx`5%efgzs`Oi7bC#DE9p)CO5&S0RYpxe{Tz-2j~7Tv{bdgu3!qL9!I3cX4sXAQSDyvylcTCEO#+V_v~2DJiL}`u2cl zq@|^0@F1vEO_j!HjrT6s`AY9CcT*Fy+0+RNz{Qx50tYy0pJ99d|@;h=6dSo~H{zbL#4j&Q4l9?aH%{$~rnnb#}GQ5rOM`+p`8cghQPebYl{Dg50eix=2fTU%adz4W}SoJ-uS5BYkT? zlFZiNURqh28MKy_&Ao=`(qUmXW*rfg*aDlxOo$Fuotq2#e(ifL{uTrA&(gm)D7Fel4;UGlrrr1Q zht<+0SFn^`Px~JI2#V0D@RHW^5p2sJ@%b9aq>)GEsOD0ta;zwPd3bPH`=ds?kel0j zY_=-i+aBLmTDa-10;F};fD)N%ciW-cKS;DEv|vhoXmYvNl*W~SyrcCJo2ldrRz zn@)xOl%Bx~hE$0{cU>iqMAIv8z!v$~kG|fN*j#(<`3tDn2EauCs8)tT@;T&Ci;A6i z@-73bZrbNFwa6oKFKE2M*qemcB?15T_ZF29UUD6tJUBXPl65(YFDWaDkBvn`2Xp}+ zKkvva!EIdVHOIbZP-`-lj(VXvS>drh=0fVWG1ZLEW$)l1mNZYN07uS+g@ujhw`;aO z9e(r9$;sLF-O#>+;_Bqo9we`WP0p{PtsNQF^Zn436D5IIW(FPkV0~$c->C8aNqcuU z5nB_Eh6a&@ab5aUp~v1(vhOLXa50Nc+4-_?vT18&wxyL7Ho3s>lVyXsQoqZ3OH|VP zR8%`}4Tfrurlc>=rpwW>$s3~9mw5Ds^P6o(3RcgLg!Suu=Ye%&`dBke!ZB*tFe@j= zb9a@fZ9jQE`-XBypMDB@nsrX>v4Ajv?gBcFAir5CHjY z>~Y|XUfFeYJkUQ_QLX!3iACb(W!e>`V^LTY@zDwUZ^ONLI)k;*3KegMtFDDMl5_f`J*{2CI4I(zUB~aoVWQoo&!Dj)^u42& z8=A1GnhQdR-z_8iKmU90R;=$kUZ;l^*ozlpkk%}nURorgd~t~HxQEHR%K1cp7YFE$ z!Uo9zu|PEK=z{Nt69H1aUS)fCSMJdx)0YG(zRMj64yV8PES`Fo6qkPBHhmD)ZT$1K z_Y4Oqa;K2!HAoZwP$YB&sPlURGOJ7_-jOw~RYB2K0`0auJ;Hrp``zt6^J_Plbi-VtBXSz|E?j@7vhWfLwIg z5@U=3Tp!V46>o2&XU|6GqlCkvi_N>|n_7eHMBdB~Ld4ni7jeKHLC-m8K+JA(!Rq@` z&Sz**qOi6$qK|%P4+z9asH|$wAO(E&8ui5wY?cq~K4W%PJTpt) z_S0QKK|f8gg;bO@_glh(fwfCHHb_2`Y~W|rzm&W6TQ$q>^7P1WaAs>}*% zczh6WNe(vZW{iQS@2QQJffQ^0Gv|ai>FDyD?G9Uqlj^PhVFRzgf1iF86y?|vk+3Z@ z7PCDmEGl{xaXU*eaJvAfIu={gC8dx;-+Y&8B-_ zgBH*25$!1&PtZ6YKR-}&qAdoC*} z35g0NdS2IGCP1ZwaAqTwYF$q&FjekH&*B+WyYn$K5A^k^JmQ}cR~pN&y>JB--q!EE z{PuX(TGNBMP3M*E81djJG_>Q?Vo2`3r~*`+&G)mEt5xUc-Z7ICsIrvRgFk<-g)0Jk zD#~ejo}$vLTL|OnQjgHd@fzr-!UYyWj6Eky=h6NOVc64t&He4SLg$Tv=)H4`ZgE=7 z(eGkaI%(gm1waG9`P~?GT2Ap5J~=+8OOAF`fmn!GOqM>&TUNcGS_H@jP*-0b&1W-a zFBlLI;tQQm$X@vRj+a^AXJ=osmDKX^aB=BWRTL_-Ty*qq^mjIA`+F`F%6N-B(%g*6 zwi#(?W_CT9Taf0KcEU~MI}aAHvk!`{eXfei+oVAA0!_#fg}o;;JNu2IcT?*h`fHn9S(OV`d{ZGFa`rgUOLpjt=s-H(L@6JeF=;*1!1xi24=PxgpD zHNy4{?87!+2cX_sPcJRSFPS~_yS?`YTAZ+Kn{|I|J)j#2vB+$$JD*NWnDf4v&fhT_ zUm-ibsLHR{#3gz=vp(O6k_E`hiBS%&YcnI7&$g%}j#rdvAgt0Q7CpQxO`gbkZR+w} zAm;M7Zp88D#GF@Yf=oeE31FP|Iuo<^>tt>BE7o1ew!jvrA7{BF%Km^s*T1GyWs`=8k3Mihap z8Qi}*x4GE%8GL-@-qD~bgenLpdQ=P(!?A>zJ*T1qg-jfzpQI<{GN`ZXJJFHwg^S$Y z724Y7`8*iHr+#c;Kyk700(I}#FIxd$fQ(RD1DO)Ip~>F6g-~(evvG0VB!x{Hj;?@x z5aEPk446iRdX!j&;W06W0PDOs53b1ncJVweZqY#B?*NwQHm;0&`o62*gzHXU$7A4B z60zzNhBqlCf{AE%``tT>fUSvA^ZMW4w%7cQcZl-FMW(4mW4Ckbs$Exi2Vn=@8u_N9 zd?i`XjeO1Rd@Ok;$FWG^`bNJeDmv=i`CM8%PRGd8$ihAxizJ3vzkwFq6R1sD0*zs}*@W~$be z^)=^5n`sCz6OzUQH-k?Z&7|x`yv=$qu9#7M{79ayo*Nxyul~D*us>d&P%vqoCfZkB zotsuET25$ia1h)Z;?HQB+uyQ@3k3!RHU9iLa{wov23A{ZYa=vo0Cn;V_;yEXZaVJn!~vTe-8BL(ZH;!ddNkO6K)5TnojhsDqD%S! zC>;IG_4&zjPQVK7&$avco_=j65-!-@UoFPCcJrG0tC^LRmPZsEQ<>ev!me`*gH{e> z!)h;tqcFM!j_~-IQIKbar#%$8uoPAXR#iNHAG}R|PfWVJxR^RGK6T{J`VxEUY`7`> zt#Uz%cxr=~cnJmasf|%^6u=bs4fM}c0Zg%Q+IVgLZ=*4!D$)!o$0@l5%_!Q*&!F{j z_t8|>d~G?(1qaGDuom0f+dDhtI35%|#fTyo#EY~A&^wBXm>6{l04QiknKx!<(I!cW ziKAm;PWlz=PLJJ(hlj;$emo+7K>Jx(AXwOAS0c0GieKHPL@j%Hb!Gb__U%#)gIed+ zw)9S&ofn3fEN!)b4Sndc+f)Bix~Rx02s`|1zTI=@*saXF4h0bU2kIUa4_Eb%k0**1 zsU+AN3PwOtIX* z*RMNVHc$3?*81RUJt^@_oyWX(l9dN1-0&_|ek3FhPh;Yul7*SbPV=78b75S+aXhzo z34e=UGM_n>kU}E&$)w+T#DAx{mG7rYXQ-8zAQeMZbjRH&!8uTb@_udSY`tEeL0E+< zGhUcnhiAcyNWz4~QZ2YjI)$XLNbA1##XK&w6{AXsQ2lt>{3j-aT}ipW;FNrRZxT=SA6|? z%{B|fM_W{rzSO8Z6RSbXh8zu3!t1EpzVdQ%aS06cYOnys#Kd?H-R0BMd%d(o*g}3t z;5C821rqUs55se{*3NbcL01)sq7Ov3{!Zb$$L5ES{7%{bxI->`xG_ueKITPA zEFZqbyBp$#d=WB7vb4!YX+dR$i5U)if&>Q_*TJ^^aGtMM1f*UQ?PagY*mm-*-7gfh z*rF4f(hqfb3lAeqD=9ekN9_wvGyeSd;lP;N{49TE-Jbu{ySAcOwKfY~^alRE^MSj7 zpzRd}q}*^{y4<~PQInv+Ku4b#T*sP#{CbC@G?~A`csA;yvph`8+r!OeMJOY*ln@b ztLDtsoA;kQY>}aZ!0lB9rStis+e-aaj8J+NKM?`}jSbE~dfR3(s1N4;s$LjI_y3^8 zNco}DGZSIEQzi)GRh=ADn27`IV-yg}XS!C{iDmHOI53$UPm8k8LQ+o?k zWYKBXr0mqIUZc;O=MnNH;*0$lVQ@Uh7fSA)Uj;;QNRv-74v)&4n|bLm-G5)xNEwJA zvl#$94VuGMm9#zIZ-h$prQ$;;>cCd)$H)KlK`iiMu55{*?VY&yR+#=dnIYuH7F>#ts(8Eff3JpcKHWt8m9EbAI_E`CD;?6ak-o98D5wGdCksKdgTs>p z)7eW}+UyUX;mrM{&85k14>N4LsI2Vz{t+0ps!c783M+DRCr3s?nyVxYDGS!uNhfsm zD)f<3^i@@tXE(DLUdS-BGBJV9)w8_rG?|)H-OxA!v~Jj5VEPHHp`D!_|MlxYPF4gT zLSAO3wVhqmD-2*+zZfFJyUlvZC`8o?h_s1`JJ-Ke7qzwj(39l{P3959GiYi50;-Xg zrc5-Qh!?i{{&8`pN2vDtzA33MKfJy|h=HOu z$fckV33QdbV3XwqkI%@DuG~T>%GpdYG8U76@Q(hrUqAzXyDxPGdiyYFO-o1X_HB{| zuF|5CXurj^wO=bw?MzHeY|X+f#`+)0JYHR!GYZ0jIaJnGHj0mA6=mdZ6Owk`gbw8R zCu19%91kfec#qx41j+MNnTH0qY!wmBrIhQoUp%X)IPu{lKjo;Y%wL_bSE6!0_wm86 zi}3?vL2qwwyp)E9hK^2EMsVW$uMBj>ezUYtBsn|i*;^Q5nVT&S4fA|j?;RTA@0nJd zLf2B!MjQWDTnqzZ_-T1XG^9!NHKwBtlrW+|-~p6+XV*}?WL{RD6kI%5sE(O&VpLW7 zr6WUTS9dgDz;uhO2GZI8kM==hiW2s)>Gpd*FrYwxZo5(~Dm$l|n&}}CsYYItadSuk zPK-<}6)Ah9xD>nCtYiDwB3O*?CmB8@C0;o@IUN}tqfdWntKp2}9QH6ZD8TJ8?dol< z%$ou8^e>QqyYHiiQgTA>GPLo7cORm)RE{KvB~;1-xB1peXA2A-8v;8m^o{54`d#5= ztHT-3=t>gy+j;z0J18zL4bHLg5|orw4A5)@mobVMmDmiOc!k)xn2COr;){d>=rB9D zLII&5-~QA~RNRQjjtv_iIBRPOFJ4e99NOD~ZH4>yxzF+GZ?IJU3XcLu1z_Nmx-ftQ z-_l*j{*b7#7*M7s9pBGu#3_{+^*to-I_Cs_`&O5%2&Q3gu?L^21h}}aHg9e&T|dxK z(qxW})5Q(Z2cw!b<%_CB=MwG#HWUt_&m)f!lYvrd5ZOh_ORmm3;9I|~o{PYd7@xgjkrDKhr#5goMvEfqVe zBNp3)p`LEigr44~qo*#{QC>iV;~gKkA#UVmR}jS(hZn1g8><42MC|e7wwVyD&>JsF zfBjlSSogEt*U z#DF1+@;NRXl6(bOm7hr))6hsTF|syoN)=J{klW_fPJOf{9V0EeP1@PX;_l|=CP^TQ z#>35Ze(_FTgUE}M{~mvz40pJusuSjJQF-x?vbZ$V8^C7A=pk2@n(FnuL|m z6V*1w9&==y2YMQ3p;H)7R~`v|jQrg@{o=Dxp^SilD?MEz<=D?L5=-!QQ3}#nSv>g? z?>y6n6&_*x%qB2fOIsZ&7--s9Rh-;hH0bHR{%=yR>hIPp92sF^axCqugPB0H;n;K* zr@OT1c2=TkrSjI2+>vIs z@4qYBGBe|aHu8!PVg%m_I|6eZz+*71iN~x3xas!#_}+K%RGwfIroJS@KM0i70H>uA z!EOQ-hS;t6rKQ2r(%lS1$3KL;w`atHZXMxstms~O*?Ru8o1b@zc*A?APc2hRA#3zk ziUKMlO@LaAQ0e-tkfj9k7c$pX=!d;_euftxHv9Mu9~A6GZ^3ksn9V`gUl>+Q^q^S# z=5Bq@?v+qZ6h{qqd0APf&<;;ExngLnusW!#11^*Ewe~X4QbkapkdgZ5fn>n)V_W_jFfR1`0IWXv7BupkmWc?VMQ0%`-Q3sk8RRv@Inh(bST!{*4KcsY zLAVdyi4@j0QpOy;fsp}})Yl9(LqptGZ;Im>{=P?>9uSDqI*e0PQu182?Gat$0~S_> zKs>W{44Qg~&ap5t0!fE5())tt+v@;T?dhHtv%xu&Z2Cfbaz#b;GWC+Ev_(5RjmJ3Y zg#e0wrR9-eU*;k3@r&x|6Dn&H?gt1+=VuSj2c(&=8oq}BW75GT#?n!bjLiL8lJ$Xc zwfM<=V1qdAk2|iejuM{|6T@phu!!|>6pOt;#_glR(bUpz&<_40ofa1x3!vvPN(_ae z;3o1<1ts@03VYx=ofM_TZ#WA)HBFs@-+NQ|^gB|Jx``te3OZ_RY`nN@5sr^fgqz~6 zTgI8q3j_PWj~Xf~1LNYaBmr8~UMo{m)N2XRu__t{QFc@(YwIK>_}_bbQ)+5xSZHpc zIZB!iLX>i3K{GP)5N6u3u-qzltVkbxV5J>j>Wt%JtB=&s{^=W2wp#!Hj~)?FeDnN< zT9lEwiJ69)#_-VKUD`BDe$Hy~AM+I>`=Pv*K#EvU(^dI7_w?*{V0+r)V$X@(`{Ej2 zt?bE$i3wm?po*8kkqBrwqS&dlD@r2X#>U!up_G-VzVfcF+<^S+qfpc#C2_^`4EP90 zi>R5OA>%Z*uPfB%f}WY1ORv3!NAsPK{qtOAmKpsA!Tr7UQ*CW{d2F$y13B^EZo$JC z5hf$2@J6@_Q;+C2dDu-KAz@1y_s5oKU)bn49L2?ux$eGjgT?cTpFzt2K(`dkFrcq! zcs2fORJpmYs50QCY!~zLy6!$W58cN_Lgr-^x>n0NH$2FMY0bul?Jp9-+mqZ!5LGQO z@<0+8W}%@B^rUnIt&tzL1JtBMe_)rFmou^D2LLgj^SWt!TUQNOkF&@Re(2f~nP>b= zU+U<%qre?GHr{^qvj#gZj|Nffbt6(N4^0atOYNmWE69V;p|__mQDc1el4%x8Ws{@D zOEDZ~Abf)c{vag@*v5gF{kG;Xo)nhzbN{Y!yV|aU=$s^7_uSoUc|Cd6j$B=>y-1dC z0>6_5KE=F-^&F+f)RMXoZ0eIOEix{-d=BOrk=7y)h6MwtVPb>MZA}HD;lQB$+P2r9 zl*;J&1T53cL*ou5i?z70e%oZKZ=k+$ZY3vYURDOQ5qjb++6TqrdFZGX%cuz&yd%2PaG0C)X zqlXlIMAXdgBd<%m&m9u7+hhbW@gEtmMX`-|2HBo(E?OyJRg;Gas>QXp>KYx)^7EHJ z`8c9sb4Q2FdG943lj^Ao0HS*j)jcy-($W*Il{Pdj#c&?V6-qxM8n5NTtQ)~ zDO>|+;4bZC0FZ?lPU9cU2et@6m%g~D_4IUJ{^#4;L>jnpH^diR*FaU(xa?^uc+O4i zrKAWGnQP!u=;-R8R2+vJ8N`{#XZjWPO~b?EqodcxB_*4Hy=Y@&6WtHA0-%(goS-55z$dl*u_T*0JWcJhsvkWU*bAucnl5o6Locj+XC?g&c1UF@a;^H zeQB4M9ey?dN^NMkYydgd_3H&CB`s}j46LlmVazxf5Co$mwZ1Wm;QO>F4Gibg!PMHZ z5lvvn4h#<$w?JFYTS!s){6%c+K6D+xl>#_U`h|`TYn1DO)C*V#>l+)Zi;Mo-$Hyk> zWlS1#Kz^NF2j44vpwJL%ZD_)f=7+9%bSD8p+@nW*rZvjk_*Y1K_F7xN{#VCLNJ4BS zMG_i9FtMm`V_^Z~ z{2CHeA=uw^^z{vGY;ICTG#U~yZNRKw6qk*enddfNzAx|?w?x|`CJU4eXnA_3i}du4 zjNA~#lzrdni|!NN=jmSY<5==I1h>$vNV4mxDAP#|Z@|im%>QmcYN*sdPa~~rLidsA z48-$?-tIT(62(T_+Elids@K7(sZSdxqz50SUUb^brWLg5U z5u?QMRaVw64-ZtFJlNr3pMN}`>|a+$@q4!D0sVH-=g&r(jWFj2<87R%G`m$O%9;)} z(?Ud3_ow$aZ|qam?HHL3Nx)sJs|%At{@zV)xR7G(MUc*6C@_>_k7prq1@ku_G%*dv z9~>NnFeEB#eZs$mH`dcrke4?#I4DWj6PIj&aY-nWlko1H$T={FP*IM*E@7?1@WHmB zAvEg4u~L+gCb=u(Z=gJSmypm_6i-su(|zBoa27~5ukDMZ{lG>Q7Vz1qIWp2!T>L9{ z(3DiG7XJ-=5nEG;bs{dUank=@J#`4uO8{w!P{LFeD+>#HW@bhfmf#QB3`N=5PLh(~ z%M@xfe+~%{#gC^ z-|IqgSf&I|9omiiX7DtFWgIZ8pUmJ4548)YWY8p#QXy^S=(vl+cfV)4q2YxOsvRE( z$9P*?Sg!FG3?p!V)7?$et#%K5!`fhiM@ZOEJGbKw_nGy?1A&E=6$}ZGDWgI|A3uH^ zh-NmctlSqIapHYGGP2UxxUfDvZ@T)fXtiPi+DmYD_|J~%K=jA#4s%~)zsqx}7w~wA zza4l$;1(t+78BZFqU=TzBSTN>nA0Cop(mDt@j#6|6Y9%`z;=+`P8qQw>d6)>|sD07hiC$$4uyYQwzD68- z{SXt=L(bk{i3TfCLiZXGVF}UkXBE@)0o+b)Ore9ZF-@}z00a?l@DbTUFnkjQb@W$* zcf^Qgtyi3xnVFv-1<_5f*!mOo^^w-lfZFIQO#KVdzj||GV4xAu6)gMv`zS^T#m&L5_pME1*`cey2>qpn ziN#Y3nSMI>` z&km3v=eX-5V&fI*;H9bEDE2yu`wTIm^UW>d3Q7FqeSKqONX+=5V2b@38VWYu;S7=Z zVc-FOtE3Oa3}~2}Q*m?C@DZv@FDuIqFD@>9W@(w1n}4)xzij*Rp&RqR=i={C1PSPX zdRkg6m3)jpTYB!(_av_q404r%AhfZu@hdg;rO)%aeArEgr2*Ma?W2bDYWwpX9{AE% zruvG)6dW?FQ>&{#_rdhz?s+w};ZMYnBh@Wm{b9T+31pamYgT|OKu%^qq<=9ZCMAUi zbumtel(e*0-m=J2+L!e4@loKULt_fIWia=b-=l4kz@FW_k9Ft@p6&uaf~!}ro`aEZ zbb=4eNbo#PzWwCm#VpwQ;eUskio4(*w^pv0Efim*qEq-l5bDVxEe84(aESj#3s@jm z^k1}K2nImjc=Y~FA{`FKiFa*q6_b-gI7GeMnP6Ec$d{llEG&d*f$?ijzCz#sv;Z|5 zZ!}u|>QOKX!$JD_6=AT(#}5rvxM%ju&;;U+0hLXLBG`3jmy7sYh||(UQ^myAW zoW^36O~R$67T~=UeEmB5M}fK-+MeAo_A~3tmyXfV-s$0BM1A=8i?e^;!-#TrAc(YG zeKLSJzK(bGy5l|VKK~9ddYgvDAay$}Y-`d>d83LGJQJH1(==ON02-`g-=KV>Qjk(2 z`KGPXH&Cit8J=Mb<0qTOzK@$Ii>N?&lTj;0lq4;on=?ki?E3sQ zKT^y7>27p|oWMX2m;kcR5e^-x(CAGH%ra>6P^nMqeo+3E#pvF2JIVSZc`Vh#huGR= z1`ysLjEl`$!nzjmfM#NPIyk=@Jbb};@fwnnl5tQZzx+T357fVV$0Du!Uj2)wr0muf z(&cYOE#u@9n)Xu|Jq2p0VhrO62|-zd0UbcSgT8K~^r4NWML}GeGpQKvoH`|rMHIyy z{HJzwF7go(H>iYk>`Jp9G7tUsUZpgVMqll*1qN<)^^1ftejvwpS`a;G{ z*MP{J&YSao50EVJ!)%}6H)vUA@>>`ae|!ARII($tcE#Dn`2!gln{K7Hwz{pY?N3*L z9W*mnly*7iNJ0ii*Tp${J{UC-${I@v7j zws68F3N#-+^h*wz?%NGQYXA7!#`YPYNqg}OF7D@Yg-=fy85woBkY4risc3_60?zk1 zwLzuH$LN{ono0uIZ)4*{#f-)2@rxc5oD?po45=(}WN%{a+}OMQlkE(n)Idk0yDSD7 zvDp1v#Sy8%JIT>sj@cpMI3Kn^0nt1GyV7?!Ptx-8SQ}Gr9ij86QOB&TtPKo4YG#DC zoTiQr$!!wGH5;!*4*2b@e zo>XH)m5Ihi2?K+yH-;NxVyT&O_uZUIRem*bTifI;UM+Z*cK3gmwAn9*qTpiqf2%h98q^w#E(j0=p0+45|nYmmt^IQ@Jf19wxisRX=I-%!Z3A zMo4dBg#JTJd&dC&bzN0&1%3w&4pOYi5oa1-x3G-NH?W`qU;&}aO*2OL0Xy@%;L?{p zh4G@+>@V0i+?X72=2sOuv&@aHEJWNY_?}MP%6dbY#+ZJ`PPhbL^ zu3l1x!iSu@3XYE%`~2)j@qo>{sn8ex%J*wd?yYNx%V_ zmznb-orRgv-zY$Z3(B(`1wwYzhF3e1()q|^#DK?Q;zvy zAOn9}^-+B@7=m@XJc>8Hs$cEi6!@U* z|K9aiqlFStvWY|emoDa{tdc2BpV{2<+ zUMLb-%ah#(XAa-{#Gnx1`hB@o$mc6o5U(UWsqCNZc|)Nr6AH@O#5VwO6Qvk{ht>B>Qi9)gQ*ns;>MPc}E|k zdEz}>uPMl*Q|=fHyV8WV@La%yraxoz2ekg*2!I5*QS$LZfMa*(z-dg8ud$LFLl-8 zg$3Yr@0!#I2yR1*u0jxwZf2cHkr7}p5ja>d?l>OLJFVlyuiQ{ z08{CEuMTe2o-=aaBZ(Q#o!)QFxD>4LdpqB0PG2zGAlY6}Xmi#DZlD~UGgW91kKyT8 zdLIN5U2;C_3qV*2oY<;W)YJrh#$v(#HPq8%4^zyd@_Ym6s*0(`hA+=HM|N(B`Xj-J zUGK$3INX0b>?meK4EUlaupKjQRwU!HY+O$E4QSb_J(`{U(X8-+_shGOvH3+4#hBmc z$y+dD6pGCi7(A!y@V4d*%lqs+%E4g=W_jHfw(an%JNDd5FNF-=u_cVQt;-#M7ah&( z(I}W<}S^mX8Of zUc=bfT4=L|Q=eDD{-ZD$F}IFR;fr_c)_IS(tS=a}#oIMfXsj1P4B6SmcQ%sviV>Fe zNS2imphgN@j4+1$yh+M)d2&#`ZDS>CrC_VCW5p!<4N6)HNuwA6Hs>EKTGb(MT)RC4 zDy%~fI$PJ`WaMQH3M?1~co*n}AdyYZ?~T9aHk5;y0GwZYxFq?W44|HY78-fFUWf1L za&2-_G$7_IjCA4KvOj^kin9)55pm7;;%%%?YbL9XMn}fzCrt*(*&0$R!K3rGU>gTx z)jZknTV-WXQ}BYX#mU}zQ?=a-Qrif6N(Em zEB@suDu(yXF!mwf2tmKX3e^K9;)2~lw=EPnMOw2iR^2d2-r8EeiqwIN;$U!#xfoJo z{WHzJbxU;a4VNb?f&s@Trvl);g}gEh(`8{~6!O^JFYXqYU7JI$IhsA&a`*IjFwXIi z?g;P$ldUa3f1Z{K*ZrPCr@$s7IXJb-&x}yjR65>wVmmoIu^BHCb=WC8KXU~pO|Jfd zjLE?E%izdYw*`00OG&{hqQZtzTbm%@gq3gOag(>U3kuOZ?Jr>&<{+7kOct2N<&Ij+f$A6Od z5Ewk)FymnuZ)DnGZ*ww?th1XgA}4X*nG3`f584S-i1@1u-se zt@+jkIEnf}lljnkKo%Y^@ao7|`jBbr=#%kILr_%tTR43dTKAnng^S*i zV_*v}II#oB$o;yaM?otI3Ud8OVJg*gHvMXEFp#-j92}hn1*w{M!9WHPKBmqY)WNJn z_fdL_cuKlkl@pz)kgDip%+6Y1;N+Ur9FwQ7X75Y9i<%BFVZ+~=eL8yW@q=Yns_X+VI*$o?btxZhLt=dY|_8L~fmo{GDu-9FeL&oE}zoy2-+bJO_3F|c*sC3q^ zbBiC)kObXN)W7Jz^bI^($!rNa4a&bf(zB9nFZrq(OMV3_P98nev)cM(A3&~!S53%J ztTCMBq=Iak)<6XG)ccF5CX_*!jkvOw`oleemmz}F?0_~2yVeX-JHviI)`#B{#D=k^Iz3w1*nn!&XVcIR%l z>9d*n-_^gHDRfZ#2|S~G4#vB!%(@eHmd5=Is;xa#RCc?CeMxUqsnvC;n*!}77-qQ5 z2g7Q7$GxuSy|n>vVYGL2AY!4dJRluyXy9jDcjKr!SQM_&SJKQRW{rAgZC!1d<|mN$3|mNAT!ko&te4b3K}dhYtPs7^2tUX#4{e<*v)s4TlS zY!E>KQ9`6sK)Sm_ke2Rlq`Nz$8wqKVZlt@rySuwPXX7*Pe7|Pan)`={-hJ&j_i-L! zXo!>k>NcbF#ZsZITxxFi(rmKgNLoWmMND0XlDLYb$DdJ6QRgosS`%0A`X7 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 ZC4y&B)S-Oa4}OAzc&IF0ENSTd-vG7>EJFYQ literal 0 HcmV?d00001 diff --git a/frontend/src/AGENTS.md b/frontend/src/AGENTS.md index 6d39b8d2d..676f0165b 100644 --- a/frontend/src/AGENTS.md +++ b/frontend/src/AGENTS.md @@ -203,3 +203,11 @@ outside code/images. Dialog excerpts render as plain text, never HTML or nested Markdown. Source records retain retrieval-time evidence, not live documents. Resolve knowledge destinations before testing the label in message and artifact link renderers: Sources lists use ordinary titles without a `citation:` prefix. + +Custom-agent settings persist `knowledge_scope` as an optional retrieval default. +Use `knowledgeScopeToSelection` to restore all execution IDs, falling back to IDs +where the bounded display snapshot lacks names. Only dirty knowledge settings +are sent on save. Custom-agent chat derives its initial selection from the saved +binding; explicit page-local overrides survive new-thread route replacement and +reset on conversation changes. Gateway supplies defaults for clients without a +selector; frontend visibility must not become a runtime enforcement boundary. diff --git a/frontend/src/app/workspace/agents/[agent_name]/chats/[thread_id]/page.tsx b/frontend/src/app/workspace/agents/[agent_name]/chats/[thread_id]/page.tsx index f55dea355..1b389c33c 100644 --- a/frontend/src/app/workspace/agents/[agent_name]/chats/[thread_id]/page.tsx +++ b/frontend/src/app/workspace/agents/[agent_name]/chats/[thread_id]/page.tsx @@ -45,7 +45,7 @@ import { } from "@/core/features"; import { useI18n } from "@/core/i18n/hooks"; import { - ALL_KNOWLEDGE_SCOPE, + knowledgeScopeToSelection, buildKnowledgeScopeSnapshot, KNOWLEDGE_SCOPE_KEY, type KnowledgeScopeSelection, @@ -114,7 +114,7 @@ export default function AgentChatPage() { const agentKnowledgeEnabled = agent !== null && (agent.tool_groups == null || agent.tool_groups.includes("knowledge")); - const [knowledgeScope, setKnowledgeScope] = + const [knowledgeScopeOverride, setKnowledgeScope] = useState(null); const previousConversationRef = useRef({ agentName: agent_name, @@ -122,12 +122,12 @@ export default function AgentChatPage() { isNewThread, }); - useEffect(() => { - setKnowledgeScope((current) => { - if (!selectorVisible) return null; - return current ?? ALL_KNOWLEDGE_SCOPE; - }); - }, [selectorVisible]); + const knowledgeScope = useMemo( + () => + knowledgeScopeOverride ?? + knowledgeScopeToSelection(agent?.knowledge_scope), + [knowledgeScopeOverride, agent?.knowledge_scope], + ); useEffect(() => { const previous = previousConversationRef.current; @@ -137,7 +137,7 @@ export default function AgentChatPage() { previous.isNewThread && !isNewThread; if (!isNewThreadRouteReplacement) { - setKnowledgeScope(selectorVisible ? ALL_KNOWLEDGE_SCOPE : null); + setKnowledgeScope(null); } } previousConversationRef.current = { diff --git a/frontend/src/components/workspace/agents/agent-settings-dialog.tsx b/frontend/src/components/workspace/agents/agent-settings-dialog.tsx index 060caa489..7e156feff 100644 --- a/frontend/src/components/workspace/agents/agent-settings-dialog.tsx +++ b/frontend/src/components/workspace/agents/agent-settings-dialog.tsx @@ -23,10 +23,18 @@ import { } from "@/components/ui/select"; import { useUpdateAgent } from "@/core/agents"; import type { Agent, ReasoningEffort } from "@/core/agents"; +import { useKnowledgeBaseEnabled } from "@/core/features"; import { useI18n } from "@/core/i18n/hooks"; +import { + buildKnowledgeScopeSnapshot, + knowledgeScopeToSelection, + type KnowledgeScopeSelection, +} from "@/core/knowledge"; import { useModels } from "@/core/models/hooks"; import { useSubagents } from "@/core/subagents"; +import { KnowledgeScopeSelector } from "../knowledge-scope-selector"; + import { AgentCapabilitySelection } from "./agent-capability-selection"; import { allowedSubagentsToSelection, @@ -71,6 +79,12 @@ export function AgentSettingsDialog({ }: AgentSettingsDialogProps) { const { t } = useI18n(); const { models } = useModels(); + const { scopeSelectionEnabled } = useKnowledgeBaseEnabled(); + const [knowledgeSelection, setKnowledgeSelection] = + useState(() => + knowledgeScopeToSelection(agent.knowledge_scope), + ); + const [knowledgeChanged, setKnowledgeChanged] = useState(false); const { subagents } = useSubagents(); const subagentDescriptionId = useId(); const updateAgent = useUpdateAgent(); @@ -161,6 +175,12 @@ export function AgentSettingsDialog({ name: agent.name, request: { display_name: displayName.trim() || null, + ...(knowledgeChanged && { + knowledge_scope: + knowledgeSelection.mode === "all" + ? null + : buildKnowledgeScopeSnapshot(knowledgeSelection), + }), ...(!sameSelection(plugins, initialSelections.plugins) && { mcp_plugins: plugins, }), @@ -202,6 +222,56 @@ export function AgentSettingsDialog({ onPluginsChange={setPlugins} onSkillsChange={setSkills} /> + {(scopeSelectionEnabled || agent.knowledge_scope) && ( +
+

+ {t.agents.settingsKnowledge} +

+

+ {t.agents.settingsKnowledgeHint} +

+ { + setKnowledgeSelection(selection); + setKnowledgeChanged(true); + }} + /> + {knowledgeSelection.mode === "selected" && ( +

+ {knowledgeSelection.datasets + .map((dataset) => dataset.name) + .join(", ")} +

+ )} + {knowledgeSelection.mode !== "all" && ( + + )} +
+ )}