Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
113 commits
Select commit Hold shift + click to select a range
a5a9dcc
调整mcp添加mcp和编辑页面,与mcp配置页面保持一致;
menglinghan Aug 21, 2026
38e70d1
mcp仓库增加分页;
menglinghan Aug 21, 2026
aafcda0
fix test case
menglinghan Aug 21, 2026
7ceca33
fix test case
menglinghan Aug 21, 2026
2280a90
Update custom.json
menglinghan Aug 21, 2026
e1101b9
修复本地镜像上传部署日志显示问题
menglinghan Aug 21, 2026
0ca52ca
Merge remote-tracking branch 'fork/mcp-bug-fix-820' into mcp-bug-fix-820
menglinghan Aug 21, 2026
8dd71fc
Merge branch 'develop' into mcp-bug-fix-820
menglinghan Aug 21, 2026
69d9eef
fix bug
menglinghan Aug 21, 2026
5dbef55
Merge remote-tracking branch 'fork/mcp-bug-fix-820' into mcp-bug-fix-820
menglinghan Aug 21, 2026
439f780
fix bug
menglinghan Aug 21, 2026
10b782d
add test case
menglinghan Aug 21, 2026
986a63c
add test case
menglinghan Aug 21, 2026
9e9f996
删除mcp市场
menglinghan Aug 24, 2026
8d5e20c
优化前端页面
menglinghan Aug 24, 2026
6357ae3
Merge develop into mcp-bug-fix-820
menglinghan Aug 24, 2026
47f2060
Update custom.json
menglinghan Aug 24, 2026
76bf2e9
Normalize custom locale file endings
menglinghan Aug 24, 2026
cb95290
Merge remote-tracking branch 'fork/mcp-bug-fix-820' into mcp-bug-fix-820
menglinghan Aug 24, 2026
b36ce53
Fix MCP registry endpoint typing
menglinghan Aug 24, 2026
01cc881
Remove obsolete MCP registry frontend code
menglinghan Aug 24, 2026
8b9f8a4
修改本地镜像上传MCP错误提示
menglinghan Aug 24, 2026
44f4841
修复mcp提交审核后不及时显示问题
menglinghan Aug 25, 2026
bee4563
Merge branch 'develop' into mcp-bug-fix-820
menglinghan Aug 28, 2026
f99fed9
修复api转mcp服务切换租户添加会导致原有工具列表被清空的问题
menglinghan Aug 31, 2026
76e3003
Merge branch 'develop' into mcp-bug-fix-820
menglinghan Aug 31, 2026
bbe63fb
修复API转MCP后工具列表未同步
menglinghan Aug 31, 2026
29f676f
恢复工具手动刷新逻辑
menglinghan Aug 31, 2026
7b0273d
merge
menglinghan Aug 31, 2026
a90dfe7
避免API转MCP工具因扫描失败被隐藏
menglinghan Sep 1, 2026
1c94eb0
docs(agents): define bundled official agent design
menglinghan Sep 1, 2026
d5f99e1
docs(agents): add bundled agent implementation plan
menglinghan Sep 1, 2026
53891d1
docs(agents): add Chinese design and plan
menglinghan Sep 1, 2026
0961930
feat(agents): add official bundle sync foundation
menglinghan Sep 3, 2026
4cec1b9
feat(agents): expose official listings in repository
menglinghan Sep 3, 2026
dd13336
feat(agents): mark official listings in clients
menglinghan Sep 3, 2026
42610b2
feat(deploy): select official agent profiles offline
menglinghan Sep 3, 2026
c8eb830
fix(agents): isolate bundle skill validation
menglinghan Sep 3, 2026
a0219b6
feat(deploy): sync official agents during installation
menglinghan Sep 3, 2026
bd72552
feat(deploy): let users select agent categories
menglinghan Sep 3, 2026
dfcd5c4
feat(agents): install official repository dependencies
menglinghan Sep 3, 2026
e1f6c91
fix(agents): resolve bundles by repository agent name
menglinghan Sep 4, 2026
3d3b1c1
feat(deploy): separate official agent deployment
menglinghan Sep 7, 2026
bb40be2
chore(deploy): mark official agent entry executable
menglinghan Sep 7, 2026
619dc7f
fix(deploy): accept host paths for official agents
menglinghan Sep 7, 2026
b98d242
fix(deploy): preserve container paths in git bash
menglinghan Sep 7, 2026
5f30cf5
fix(repository): resolve official listings during import
menglinghan Sep 7, 2026
04c6d3e
fix(repository): report official import requirements
menglinghan Sep 7, 2026
a1dbd25
fix(agents): keep official bundle keys stable
menglinghan Sep 7, 2026
deb03c5
fix(agents): resolve bundles inside profiles
menglinghan Sep 7, 2026
120735a
fix(agents): ignore skill archives during bundle scan
menglinghan Sep 8, 2026
969c888
fix(agents): diagnose official bundle lookup
menglinghan Sep 8, 2026
a51ab58
fix(deploy): pin official bundle path in container
menglinghan Sep 8, 2026
743534f
feat(repository): choose tenant models during official copy
menglinghan Sep 8, 2026
378fa09
fix(repository): preserve official flag for model selection
menglinghan Sep 8, 2026
046983e
fix(repository): preserve publisher on summary listings
menglinghan Sep 8, 2026
932a6f2
fix(agents): apply official skill resolutions
menglinghan Sep 8, 2026
0823dea
fix(official-agents): ensure dependencies before reuse
menglinghan Sep 8, 2026
7effffa
fix(agents): honor skill conflict resolutions
menglinghan Sep 8, 2026
7c8b841
fix(official-agents): repair reused knowledge references
menglinghan Sep 8, 2026
82b15a9
fix(official-agents): isolate user agent copies
menglinghan Sep 8, 2026
db1b5bb
fix(official-agents): share tenant knowledge bases
menglinghan Sep 8, 2026
b7de464
feat(official-agents): label copies by email
menglinghan Sep 8, 2026
1c9e5ba
fix(agent-repository): hide official publisher label
menglinghan Sep 8, 2026
17afb76
fix(agent-repository): reuse existing official embeddings
menglinghan Sep 8, 2026
3dfea62
fix(agent-repository): block official copy without embeddings
menglinghan Sep 9, 2026
0f431f0
fix(agent-repository): validate official kb embedding model
menglinghan Sep 9, 2026
d2b17cd
merge: integrate develop into bundled default agents
menglinghan Sep 9, 2026
1838824
chore(deploy): remove official profile env setting
menglinghan Sep 9, 2026
bcf8dff
chore(deploy): remove legacy official profile variable
menglinghan Sep 9, 2026
a6b9efb
chore(k8s): remove unused market backend config
menglinghan Sep 9, 2026
ad4df1f
chore(docs): remove bundled agent plans from code repo
menglinghan Sep 9, 2026
23476ef
fix(agent-import): use migrated agent management service
menglinghan Sep 9, 2026
b50ae2b
fix(agent-import): use migrated knowledge base service
menglinghan Sep 9, 2026
cad75ce
fix(agent-repository): refresh mine agents after copy
menglinghan Sep 9, 2026
1175c77
fix(official-agents): label copied agents with user email
menglinghan Sep 9, 2026
166e839
fix(agent-import): import model status enum
menglinghan Sep 9, 2026
5a16ff1
fix(official-agents): create unique copies on name conflicts
menglinghan Sep 9, 2026
7d9a35d
feat(official-agents): add default marketplace tags
menglinghan Sep 14, 2026
4e3e3f6
fix(official-agents): preserve default tags on import
menglinghan Sep 14, 2026
5805210
fix(official-agents): remove forced default tags
menglinghan Sep 14, 2026
f47e934
fix(tags): allow tenant users to read tag definitions
menglinghan Sep 14, 2026
e26c5ea
fix(agent-repository): render tag limit in hint
menglinghan Sep 14, 2026
6173e3e
Merge branch 'develop' into feat/bundled-default-agents
menglinghan Sep 14, 2026
ac53153
test: align regression tests with migrated services
menglinghan Sep 14, 2026
7ce05f7
docs: add official agent deployment guide
menglinghan Sep 14, 2026
bfdc916
docs: document agent export bundle conversion
menglinghan Sep 14, 2026
63d2a60
test: mock tenant MCP endpoint in tool tests
menglinghan Sep 14, 2026
14b3250
docs: remove official agent deployment guide
menglinghan Sep 15, 2026
98ce1ff
Merge branch 'develop' into feat/bundled-default-agents
menglinghan Sep 15, 2026
692b8b8
test: cover official agent synchronization
menglinghan Sep 15, 2026
f608eb1
Merge remote-tracking branch 'fork/feat/bundled-default-agents' into …
menglinghan Sep 15, 2026
a1dccda
test: cover official repository import flow
menglinghan Sep 15, 2026
4063d0b
test: cover official agent bundle loading
menglinghan Sep 16, 2026
b4fea86
Merge branch 'develop' into feat/bundled-default-agents
menglinghan Sep 16, 2026
e037f23
test: stub model parameter filter for official agent tests
menglinghan Sep 16, 2026
a3e23b5
Merge remote-tracking branch 'fork/feat/bundled-default-agents' into …
menglinghan Sep 16, 2026
d0e3060
Merge branch 'develop' into feat/bundled-default-agents
menglinghan Sep 16, 2026
38764c9
test: cover official agent service edge cases
menglinghan Sep 16, 2026
0529c7e
Merge remote-tracking branch 'fork/feat/bundled-default-agents' into …
menglinghan Sep 16, 2026
b53d68a
test: cover tenant MCP routing branches
menglinghan Sep 16, 2026
7e5e4c9
test: cover repository import precheck branches
menglinghan Sep 16, 2026
5e1776e
test: cover official agent bundle defaults
menglinghan Sep 16, 2026
6313c0d
fix(mcp): avoid duplicate tool cleanup on delete
menglinghan Sep 17, 2026
3af40dd
chore(deploy): remove obsolete agent TUI branches
menglinghan Sep 17, 2026
3801e8a
chore(official-agents): keep local snapshots out of remote
menglinghan Sep 17, 2026
c7335e0
Merge remote-tracking branch 'origin/develop' into feat/bundled-defau…
menglinghan Sep 20, 2026
40104a4
chore(agents): remove unused attachment fallback
menglinghan Sep 20, 2026
9c371ac
chore(deploy): remove redundant official agent directory setup
menglinghan Sep 20, 2026
61446c5
chore(deploy): remove obsolete official agent env example
menglinghan Sep 20, 2026
f3e6dab
chore(deploy): remove official agent helm wiring
menglinghan Sep 20, 2026
f68109f
chore(offline): remove obsolete official agent packaging
menglinghan Sep 20, 2026
2da2abb
Merge remote-tracking branch 'origin/develop' into feat/bundled-defau…
menglinghan Sep 20, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion backend/agents/create_agent_info.py
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,8 @@
LANGUAGE,
LLM_INCLUDE_LOGPROBS,
LOCAL_MCP_SERVER,
get_tenant_local_mcp_server,
TOKEN,
MINIO_DEFAULT_BUCKET,
MODEL_CONFIG_MAPPING,
NEXENT_SANDBOX_WORKSPACE_VOLUME,
Expand Down Expand Up @@ -2375,7 +2377,7 @@ async def create_agent_run_info(
break

remote_mcp_list = await get_remote_mcp_server_list(tenant_id=tenant_id, is_need_auth=True)
default_mcp_url = urljoin(LOCAL_MCP_SERVER, "sse")
default_mcp_url = get_tenant_local_mcp_server(tenant_id)
remote_mcp_list.append({
"remote_mcp_server_name": "outer-apis",
"remote_mcp_server": default_mcp_url,
Expand Down Expand Up @@ -2404,6 +2406,10 @@ async def create_agent_run_info(
}
if url == default_mcp_url:
mcp_config["httpx_client_factory"] = create_httpx_client
mcp_config["headers"] = {
"X-Tenant-ID": str(tenant_id),
"X-Nexent-Internal-Token": TOKEN,
}
headers = {}
auth_token = mcp_record.get("authorization_token")
if auth_token:
Expand Down
20 changes: 18 additions & 2 deletions backend/apps/agent_repository_app.py
Original file line number Diff line number Diff line change
Expand Up @@ -310,17 +310,33 @@ async def check_repository_import_precheck_api(
@agent_repository_router.post("/{agent_repository_id}/import")
async def import_agent_from_repository_api(
agent_repository_id: int,
skill_resolutions: Optional[list[SkillResolution]] = Body(default=None),
payload: Optional[object] = Body(default=None),
authorization: Optional[str] = Header(None),
):
"""Import an agent tree from a marketplace repository listing into the current tenant."""
try:
_, tenant_id = get_current_user_id(authorization)
user_id, tenant_id = get_current_user_id(authorization)
skill_resolutions = None
model_ids = None
embedding_model_ids = None
if isinstance(payload, list):
skill_resolutions = [SkillResolution.model_validate(item) for item in payload]
elif isinstance(payload, dict):
skill_resolutions = [
SkillResolution.model_validate(item)
for item in (payload.get("skill_resolutions") or [])
] or None
model_ids = payload.get("model_ids")
embedding_model_ids = payload.get("embedding_model_ids")

await import_agent_from_repository_impl(
agent_repository_id=agent_repository_id,
tenant_id=tenant_id,
authorization=authorization,
skill_resolutions=skill_resolutions,
model_ids=model_ids,
embedding_model_ids=embedding_model_ids,
user_id=user_id,
)
return JSONResponse(status_code=HTTPStatus.OK, content={})
except UnauthorizedError as e:
Expand Down
9 changes: 7 additions & 2 deletions backend/apps/tag_management_app.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,11 @@ def _require_manage_context(authorization: str | None) -> tuple[str, str, str]:
return user_id, tenant_id, role


def _require_read_context(authorization: str | None) -> tuple[str, str, str]:
"""Return the authenticated tenant context for read-only tag metadata."""
return get_current_user_context(authorization)


def _assignment_caller(authorization: str | None) -> AuthenticatedCaller:
user_id, tenant_id, role = get_current_user_context(authorization)
return AuthenticatedCaller(
Expand Down Expand Up @@ -285,7 +290,7 @@ async def replace_resource_tag_assignments(

@router.get("", response_model=list[TagLibraryResponse])
def list_tag_libraries(authorization: str | None = Header(None)):
_, tenant_id, _ = _require_manage_context(authorization)
_, tenant_id, _ = _require_read_context(authorization)
try:
return TagManagementService.list_libraries(tenant_id)
except TagManagementNotFoundError as error:
Expand All @@ -301,7 +306,7 @@ def list_tag_libraries(authorization: str | None = Header(None)):

@router.get("/{bucket_id}/definitions", response_model=list[TagDefinitionResponse])
def list_tag_definitions(bucket_id: int, authorization: str | None = Header(None)):
_, tenant_id, _ = _require_manage_context(authorization)
_, tenant_id, _ = _require_read_context(authorization)
try:
return TagManagementService.list_definitions(tenant_id, bucket_id)
except TagManagementNotFoundError as error:
Expand Down
4 changes: 4 additions & 0 deletions backend/apps/tool_config_app.py
Original file line number Diff line number Diff line change
Expand Up @@ -244,6 +244,10 @@ async def import_openapi_service_api(
mcp_result = _refresh_openapi_services_in_mcp(tenant_id)
result["mcp_refresh"] = mcp_result

# The agent configuration page reads the persisted tool list. Refreshing
# the MCP runtime alone does not make newly imported tools selectable.
await update_tool_list(tenant_id=tenant_id, user_id=user_id)

return JSONResponse(
status_code=HTTPStatus.OK,
content={
Expand Down
21 changes: 20 additions & 1 deletion backend/consts/const.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import os
from enum import Enum
from pathlib import Path
from urllib.parse import quote, urljoin
from dotenv import load_dotenv

# Load environment variables
Expand Down Expand Up @@ -103,7 +104,18 @@ class VectorDatabaseType(str, Enum):
CONTAINER_SKILLS_PATH = os.getenv("SKILLS_PATH")

# Container-internal official skills ZIP directory
OFFICIAL_SKILLS_ZIP_PATH = "/mnt/nexent/official-skills-zip"
OFFICIAL_SKILLS_ZIP_PATH = os.getenv(
"OFFICIAL_SKILLS_ZIP_PATH", "/mnt/nexent/official-skills-zip"
)

# Container-internal official agents bundle directory (one JSON per agent)
OFFICIAL_AGENTS_PATH = os.getenv(
"OFFICIAL_AGENTS_PATH", "/mnt/nexent/official-agents"
)

OFFICIAL_AGENT_PROFILES = os.getenv("OFFICIAL_AGENT_PROFILES", "")
OFFICIAL_AGENT_TENANT_ID = "__nexent_official__"
OFFICIAL_AGENT_USER_ID = "__nexent_system__"


# Preview Configuration
Expand Down Expand Up @@ -517,6 +529,13 @@ class VectorDatabaseType(str, Enum):
MCP_MANAGEMENT_API = os.getenv("MCP_MANAGEMENT_API", "http://localhost:5015")


def get_tenant_local_mcp_server(tenant_id: str) -> str:
"""Return the tenant-scoped SSE endpoint for built-in/API-converted tools."""
if not tenant_id:
raise ValueError("tenant_id is required for the local MCP endpoint")
return urljoin(LOCAL_MCP_SERVER.rstrip("/") + "/", f"mcp/{quote(str(tenant_id), safe='')}/sse")


# Invite code
INVITE_CODE = os.getenv("INVITE_CODE")

Expand Down
151 changes: 151 additions & 0 deletions backend/consts/model.py
Original file line number Diff line number Diff line change
Expand Up @@ -1318,6 +1318,157 @@ class AgentRepositorySnapshot(ExportAndImportDataFormat):
skills: Optional[List["SkillZipEntry"]] = None


# ---------------------------------------------------------------------------
# Official agent bundles (platform-provided, mirroring official skills)
# ---------------------------------------------------------------------------


class KnowledgeBaseSeedDoc(BaseModel):
"""A seed document in an official agent bundle's knowledge base.

Text seeds carry ``content``; binary seeds (docx/pdf/...) carry ``file_path``
pointing at the real file on disk (set by the loader for directory layouts,
so the install pipeline can upload it like a normal KB document). At least
one of the two is set.
"""
file_name: str
content: Optional[str] = None
file_path: Optional[str] = None


class KnowledgeBaseSeed(BaseModel):
"""Knowledge base declaration inside an official agent bundle.

``logical_index_name`` is the bundle-local reference that agent tools point
to; it is remapped to the tenant's real generated index name on install.
"""
logical_index_name: str
display_name: Optional[str] = None
description: Optional[str] = None
documents: List[KnowledgeBaseSeedDoc] = []


class OfficialAgentBundle(AgentRepositorySnapshot):
"""Official agent bundle: marketplace snapshot plus official card fields.

Reuses AgentRepositorySnapshot (agent_info / mcp_info / skills) and adds
official card metadata plus optional knowledge base seed documents.
An empty ``knowledge_bases`` list means the agent has no KB dependency.

Card fields are optional: when omitted they are derived from the root agent
(name / display_name) or sensible defaults (icon, version_label), so a bare
export can be used directly as a bundle without manual card editing.
"""
name: Optional[str] = None
display_name: Optional[str] = None
description: Optional[str] = None
icon: Optional[str] = None
tags: List[str] = []
version_label: Optional[str] = None
knowledge_bases: List[KnowledgeBaseSeed] = []

@model_validator(mode="after")
def _derive_card_fields(self) -> "OfficialAgentBundle":
root_agent = self.agent_info.get(str(self.agent_id))
root_name = getattr(root_agent, "name", None) if root_agent else None
root_display_name = (
getattr(root_agent, "display_name", None) if root_agent else None
)
if not self.name:
self.name = root_name or "agent"
if not self.display_name:
self.display_name = root_display_name or self.name
if not self.icon:
self.icon = "🤖"
if not self.version_label:
self.version_label = "V1"
return self


OfficialAgentStatus = Literal[
"installed", "needs_model", "installable"
]


class OfficialAgentAgentInfo(BaseModel):
"""An agent inside an official bundle (root or sub-agent) for conflict pre-check."""
name: str
display_name: Optional[str] = None


class OfficialAgentMcpPreview(BaseModel):
"""MCP server declaration inside an official bundle, with per-tenant install state."""
mcp_server_name: str
mcp_url: str
installed: bool = False


class OfficialAgentListItem(BaseModel):
"""Single item in the GET /repository/agent/official response."""
name: str
display_name: Optional[str] = None
description: Optional[str] = None
icon: Optional[str] = None
tags: List[str] = []
version_label: Optional[str] = None
status: OfficialAgentStatus
has_knowledge: bool
mcp_count: int
skill_count: int
kb_count: int
missing_models: List[str] = []
agents: List[OfficialAgentAgentInfo] = []
mcps: List[OfficialAgentMcpPreview] = []


OfficialAgentInstallStatus = Literal[
"installed", "needs_model", "already_installed", "not_found", "failed"
]

OfficialAgentInstallStepStatus = Literal["ok", "failed"]


class OfficialAgentInstallStep(BaseModel):
"""One step of an official agent install (mcp / tools / knowledge_base / agent).

``status`` is "ok" when the step completed, "failed" when it raised (the
install aborts and the failed step's message explains why).
"""
name: str
status: OfficialAgentInstallStepStatus
message: Optional[str] = None


class OfficialAgentInstallRequest(BaseModel):
"""Request body for installing official agents.

``renames`` maps an existing agent name inside a bundle to a new name
(used to resolve name conflicts before import). ``model_ids`` maps a bundle
key to a tenant LLM model_id applied to the bundle's root agent on install.
"""
agent_names: List[str] = Field(
..., min_length=1, description="Official agent bundle names to install"
)
renames: Optional[Dict[str, str]] = None
model_ids: Optional[Dict[str, int]] = None
embedding_model_ids: Optional[Dict[str, int]] = None


class OfficialAgentInstallItem(BaseModel):
"""Per-agent result of an official agent install request."""
name: str
status: OfficialAgentInstallStatus
message: Optional[str] = None
steps: Optional[List[OfficialAgentInstallStep]] = None
missing_models: List[str] = []
agent_id: Optional[int] = None


class OfficialAgentInstallResponse(BaseModel):
"""Response payload for POST /repository/agent/official/install."""
results: List[OfficialAgentInstallItem]


RepositoryImportRequirementType = Literal[
"model", "knowledge_base", "mcp", "skill", "tool"
]
Expand Down
18 changes: 18 additions & 0 deletions backend/database/agent_db.py
Original file line number Diff line number Diff line change
Expand Up @@ -279,7 +279,7 @@
AgentInfo.delete_flag != 'Y'
).first()
if not agent:
raise ValueError("ag_tenant_agent_t Agent not found")

Check failure on line 282 in backend/database/agent_db.py

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Define a constant instead of duplicating this literal "ag_tenant_agent_t Agent not found" 3 times.

See more on https://sonarcloud.io/project/issues?id=ModelEngine-Group_nexent&issues=AaCfPC3D3p_Fx055Cbx8&open=AaCfPC3D3p_Fx055Cbx8&pullRequest=3899

agent_data = dict(agent_info.__dict__)
fields_set = getattr(agent_info, "model_fields_set", None)
Expand Down Expand Up @@ -311,6 +311,24 @@
raise ValueError("ag_tenant_agent_t Agent not found")


def update_agent_display_name(
agent_id: int, tenant_id: str, display_name: str, user_id: str
) -> None:
"""Update the display name on every active version of an agent."""
with get_db_session() as session:
result = session.execute(
update(AgentInfo)
.where(
AgentInfo.agent_id == agent_id,
AgentInfo.tenant_id == tenant_id,
AgentInfo.delete_flag == "N",
)
.values(display_name=display_name, updated_by=user_id)
)
if result.rowcount == 0:
raise ValueError("ag_tenant_agent_t Agent not found")


def query_agent_records_for_nl2agent(agent_id: int, tenant_id: str) -> list[dict]:
"""Return all tenant-owned records for NL2Agent draft validation.

Expand Down
2 changes: 1 addition & 1 deletion backend/database/agent_repository_db.py
Original file line number Diff line number Diff line change
Expand Up @@ -227,6 +227,7 @@ def update_agent_repository_by_id(
"""Update a repository listing owned by the publisher tenant. Returns affected row count."""
allowed_fields = {
"display_name",
"name",
"description",
"author",
"submitted_by",
Expand Down Expand Up @@ -486,4 +487,3 @@ def fetch_draft_agent_mine_metadata(
}
for row in rows
}

Loading
Loading