update project knowledge function
This commit is contained in:
@@ -11,6 +11,7 @@ from typing import Any
|
||||
from .foundation import IdentityContext, ProjectContextRuntime, ProviderError
|
||||
from .providers.change import build_provider as build_change_provider
|
||||
from .providers.issue import build_provider as build_issue_provider
|
||||
from .providers.jira_knowledge import build_provider as build_jira_knowledge_provider
|
||||
from .providers.knowledge import build_provider as build_knowledge_provider
|
||||
|
||||
MINIMUM_PYTHON = (3, 11)
|
||||
@@ -37,9 +38,25 @@ class ProjectScopePolicy:
|
||||
return "read" in identity.granted_scopes and project_id == identity.project
|
||||
|
||||
|
||||
def _build_knowledge_with_jira_fallback(identity: IdentityContext) -> Any:
|
||||
"""Try Jira knowledge first; fall back to workspace files when unconfigured.
|
||||
|
||||
This keeps ``search_project_knowledge`` as a single tool name regardless of
|
||||
the backing source. The Jira provider returns ``UnconfiguredJiraKnowledgeProvider``
|
||||
(which raises ``UNAVAILABLE``) when no binding exists for the identity, so
|
||||
we catch that and delegate to the workspace-file provider transparently.
|
||||
"""
|
||||
from .providers.jira_knowledge import UnconfiguredJiraKnowledgeProvider
|
||||
|
||||
jira_provider = build_jira_knowledge_provider(identity)
|
||||
if isinstance(jira_provider, UnconfiguredJiraKnowledgeProvider):
|
||||
return build_knowledge_provider(identity)
|
||||
return jira_provider
|
||||
|
||||
|
||||
PROVIDER_FACTORIES: dict[str, Callable[[IdentityContext], Any]] = {
|
||||
"get_project_issue_context": build_issue_provider,
|
||||
"search_project_knowledge": build_knowledge_provider,
|
||||
"search_project_knowledge": _build_knowledge_with_jira_fallback,
|
||||
"get_project_change_context": build_change_provider,
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user