Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
90 commits
Select commit Hold shift + click to select a range
5f0e598
Support recording deployment options
loveTsong Nov 28, 2025
c37c285
Add version numbering to database migration files
loveTsong Nov 29, 2025
ba169cc
Add upgrade script
loveTsong Dec 2, 2025
1ed1e93
fix: make user table upgrade script reentrant
loveTsong Dec 2, 2025
e0f47dc
feat: use app version as nexent image tag
loveTsong Dec 3, 2025
a5368ca
Add version numbering to v1.7.7 sql files
loveTsong Dec 3, 2025
3ff5a8a
✨ Adapt MCP protocal to different program language #416
YehongPan Dec 3, 2025
b5e6f5c
✨ Adapt MCP protocal to different program language #416
YehongPan Dec 3, 2025
839d1bd
Update upgrade documents
loveTsong Dec 3, 2025
614b366
fix: handle failure cases with correct exit codes in deploy script
loveTsong Dec 3, 2025
d9ed4fd
✨ Adapt MCP protocal to different program language #416
YehongPan Dec 3, 2025
ecc5c65
✨ Adapt MCP protocal to different program language #416
YehongPan Dec 4, 2025
2546d01
✨ The model ultimately renders an image from the S3 bucket.
Zhi-a Dec 4, 2025
ee48b89
Update opensource-memorial-wall.md
Came11ious Dec 4, 2025
8f51a7a
Add user testimonials to memorial wall
Papaver01 Dec 5, 2025
d2168c8
Add user feedback on Nexent platform improvements
aschenmo Dec 5, 2025
64bb075
🐛 Bugfix: knowledge base shows unknown embedding model when process i…
Jasonxia007 Nov 28, 2025
9b9766d
✨ Now document process has a progress bar
Jasonxia007 Dec 4, 2025
172c4ef
✨ Now document process has a progress bar
Jasonxia007 Dec 5, 2025
e8fcc55
Leave a message
aschenmo Dec 5, 2025
6a7aa1a
Add tip from 开源新手 to memorial wall
WenrongDu Dec 5, 2025
a858828
♻️ All models should use nexent.core.model instead of smolagent #1971
YehongPan Dec 5, 2025
96251c4
♻️ All models should use nexent.core.model instead of smolagent #1971
YehongPan Dec 5, 2025
7f63d0f
🐛 Fixing the inability to download datamate data source files
Phinease Dec 5, 2025
9a0dd1d
🐛 Fiu build frontend arm image failed
Phinease Dec 5, 2025
289f5c2
Update opensource-memorial-wall.md from Came11ious/patch-1
WMC001 Dec 5, 2025
b3aba27
Merge branch 'develop' into patch-1
WMC001 Dec 5, 2025
ba3f4f7
Add user testimonials to memorial wall from Papaver01/patch-1
WMC001 Dec 5, 2025
3023989
Merge branch 'develop' into patch-2
WMC001 Dec 5, 2025
2fa626d
Add user feedback on Nexent platform improvements from aschenmo/patch-2
WMC001 Dec 5, 2025
0fc742c
Merge branch 'develop' into patch-3
WMC001 Dec 5, 2025
d77166e
Merge pull request #2023 from aschenmo/patch-3
WMC001 Dec 5, 2025
2fe44fd
Merge branch 'develop' into patch-2
WMC001 Dec 5, 2025
a7d5798
Add tip from 开源新手 to memorial wall from WenrongDu/patch-2
WMC001 Dec 5, 2025
4dc1f11
⭐️ Add MCP Server Install hint and fix tool test display
Phinease Dec 6, 2025
bc58f43
⭐️ Add Agent Space categories logo
Phinease Dec 6, 2025
0672cbc
🧪 Add test files for knowledgebase
Jasonxia007 Dec 5, 2025
9151630
⭐️ Add MCP Server Install hint and fix tool test display
Phinease Dec 8, 2025
dbe86cb
✨ Adapt MCP protocal to different program language #416
Phinease Dec 8, 2025
a559a0d
✨ The model ultimately renders an image from the S3 bucket.
Phinease Dec 8, 2025
3f39432
⭐️ Add upgrade script
Phinease Dec 8, 2025
3aad19d
♻️ All models should use nexent.core.model instead of smolagent #1971
Phinease Dec 8, 2025
9d3d63b
fix: scrolling flicker on agent creation
loveTsong Dec 8, 2025
fa1f5f4
🐛 fix scrolling flicker on agent creation
Phinease Dec 9, 2025
b3e45e9
Merge remote-tracking branch 'refs/remotes/origin/develop' into xyc/k…
Jasonxia007 Dec 9, 2025
0ed7c7d
fix: eliminate flicker when switching knowledge base overview
loveTsong Dec 9, 2025
c39699e
Agent copy feature
SimengBian Dec 9, 2025
d3246b6
Bugfix: use ant desgin responsive layout to deal with different scree…
xuyaqist Dec 9, 2025
8cee889
Bugfix: scroll button position didn't adapt to textarea height
xuyaqist Dec 10, 2025
92ad268
Bugfix: models configuration button is overlapped in small screens
xuyaqist Dec 10, 2025
9e85a02
Bugfix: on the setup page, clicking "Complete Configuration" does not…
xuyaqist Dec 10, 2025
b490a89
Bugfix: replace non-existent i18n
xuyaqist Dec 10, 2025
17e778d
Bugfix: change model type, clear searched model
xuyaqist Dec 10, 2025
04b0607
docs: improve local debugging instructions for latest image builds
loveTsong Dec 10, 2025
23c5997
fix: resolve inconsistency between tool configuration and test page
loveTsong Dec 10, 2025
c6f91b9
🐛 fix when asking the agent to write code, code does not appear in th…
Phinease Dec 10, 2025
e818b82
🐛 When the list of agents is empty, the column width will shrink
Phinease Dec 10, 2025
d186dc4
✨ Add instructions for debugging with locally built latest images
Phinease Dec 10, 2025
cb50345
♻️ Move the logic of renaming the duplicate agents to frontend
WMC001 Dec 10, 2025
f7c761b
🐛 fix tool config test page inconsistency
Phinease Dec 10, 2025
d9c0d12
🐛 Eliminate flicker when switching knowledge base overview
Phinease Dec 10, 2025
4d9519e
🐛 fix when asking the agent to write code, code does not appear code box
Phinease Dec 10, 2025
412518f
Bugfix: adding memory box is at the bottom of the list, improving use…
xuyaqist Dec 10, 2025
b759e96
Add confirm copy pop-up window
SimengBian Dec 10, 2025
dee544d
♻️ Unit test: Move the logic of renaming the duplicate agents to fron…
WMC001 Dec 10, 2025
b2c9912
Auto enter edit mode afet copy the agent
SimengBian Dec 10, 2025
4d46b0b
✨ Now user can name the knowledge base whatever he wants without obey…
Jasonxia007 Dec 9, 2025
d38c40f
♻️ agents config page code cleanse
Phinease Dec 11, 2025
8e7d83b
🐛 adding memory box at the front of the list, improving user experience
Phinease Dec 11, 2025
ed72b99
✨ Agent copy feature
Phinease Dec 11, 2025
4e309a1
♻️ Fix: Move the logic of renaming the duplicate agents to frontend
WMC001 Dec 11, 2025
02db778
Bugfix: Set the agent configuration page outer scrollbar to be hidden…
xuyaqist Dec 11, 2025
3886bad
⭐️ Agent Author
Phinease Dec 11, 2025
fbc9cb9
⭐️ Agent Author
Phinease Dec 11, 2025
a708015
Merge branch 'develop' into csr-1204
Phinease Dec 11, 2025
6a75316
🐛 Set the agent configuration page outer scrollbar to be hidden and t…
Phinease Dec 11, 2025
1833a33
✨ Now document process has a progress bar
Phinease Dec 11, 2025
a6454f8
♻️ Move the logic of renaming the duplicate agents to frontend
Phinease Dec 11, 2025
94c79b4
⭐️ Agent Author
Phinease Dec 11, 2025
417440e
✨ Now user can name the knowledge base whatever he wants without obey…
Jasonxia007 Dec 11, 2025
ac3cdac
🐛 Bugfix: Agents with no duplicate names will also display the renami…
WMC001 Dec 12, 2025
ae7066f
♻️ Revise the sql name prefix to v1.7.8
Phinease Dec 12, 2025
e1d7a15
🐛 Agents with no duplicate names will also display the renaming steps…
Phinease Dec 12, 2025
8fccb0d
📝 Update Docs
Phinease Dec 12, 2025
1dc4060
Merge branch 'develop' into csr-1204
Phinease Dec 12, 2025
06488f5
📝 Update Docs
Phinease Dec 12, 2025
e596cf5
🐛 fix doc compile
Phinease Dec 12, 2025
608b351
🐛 fix doc compile
Phinease Dec 12, 2025
9db5134
🐛 fix doc compile
Phinease Dec 12, 2025
bc908c6
🐛 fix doc compile
Phinease Dec 12, 2025
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
9 changes: 1 addition & 8 deletions .github/workflows/deploy-docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -38,18 +38,11 @@ jobs:
with:
fetch-depth: 0

- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 20
cache: npm
cache-dependency-path: ./doc/package-lock.json

- name: Setup Pages
uses: actions/configure-pages@v4

- name: Install dependencies
run: npm ci
run: npm install

- name: Build with VitePress
run: npm run docs:build
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ docker/openssh-server
docker/volumes/db/data
docker/.env
docker/.run
docker/deploy.options

frontend_standalone/
.pnpm-store/
Expand Down
3 changes: 2 additions & 1 deletion backend/agents/create_agent_info.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
get_vector_db_core,
get_embedding_model,
)
from services.tenant_config_service import get_selected_knowledge_list
from services.tenant_config_service import get_selected_knowledge_list, build_knowledge_name_mapping
from services.remote_mcp_service import get_remote_mcp_server_list
from services.memory_config_service import build_memory_context
from services.image_service import get_vlm_model
Expand Down Expand Up @@ -241,6 +241,7 @@ async def create_tool_config_list(agent_id, tenant_id, user_id):
"index_names": index_names,
"vdb_core": get_vector_db_core(),
"embedding_model": get_embedding_model(tenant_id=tenant_id),
"name_resolver": build_knowledge_name_mapping(tenant_id=tenant_id, user_id=user_id),
}
elif tool_config.class_name == "AnalyzeTextFileTool":
tool_config.metadata = {
Expand Down
34 changes: 33 additions & 1 deletion backend/apps/agent_app.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,16 @@

from fastapi import APIRouter, Body, Header, HTTPException, Request

from consts.model import AgentRequest, AgentInfoRequest, AgentIDRequest, ConversationResponse, AgentImportRequest
from consts.model import AgentRequest, AgentInfoRequest, AgentIDRequest, ConversationResponse, AgentImportRequest, AgentNameBatchCheckRequest, AgentNameBatchRegenerateRequest
from services.agent_service import (
get_agent_info_impl,
get_creating_sub_agent_info_impl,
update_agent_info_impl,
delete_agent_impl,
export_agent_impl,
import_agent_impl,
check_agent_name_conflict_batch_impl,
regenerate_agent_name_batch_impl,
list_all_agent_info_impl,
run_agent_stream,
stop_agent_tasks,
Expand Down Expand Up @@ -146,6 +148,36 @@ async def import_agent_api(request: AgentImportRequest, authorization: Optional[
status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail="Agent import error.")


@agent_config_router.post("/check_name")
async def check_agent_name_batch_api(request: AgentNameBatchCheckRequest, authorization: Optional[str] = Header(None)):
"""
Batch check whether agent name/display_name conflicts exist in the tenant.
"""
try:
return await check_agent_name_conflict_batch_impl(request, authorization)
except ValueError as e:
raise HTTPException(status_code=HTTPStatus.BAD_REQUEST, detail=str(e))
except Exception as e:
logger.error(f"Agent name batch check error: {str(e)}")
raise HTTPException(
status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail="Agent name batch check error.")


@agent_config_router.post("/regenerate_name")
async def regenerate_agent_name_batch_api(request: AgentNameBatchRegenerateRequest, authorization: Optional[str] = Header(None)):
"""
Batch regenerate agent name/display_name using LLM or suffix fallback.
"""
try:
return await regenerate_agent_name_batch_impl(request, authorization)
except ValueError as e:
raise HTTPException(status_code=HTTPStatus.BAD_REQUEST, detail=str(e))
except Exception as e:
logger.error(f"Agent name batch regenerate error: {str(e)}")
raise HTTPException(
status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail="Agent name batch regenerate error.")


@agent_config_router.get("/list")
async def list_all_agent_info_api(authorization: Optional[str] = Header(None), request: Request = None):
"""
Expand Down
34 changes: 33 additions & 1 deletion backend/apps/file_management_app.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import logging
import re
import base64
from http import HTTPStatus
from typing import List, Optional
from urllib.parse import urlparse, urlunparse, unquote, quote
Expand Down Expand Up @@ -149,7 +150,16 @@ async def process_files(
@file_management_config_router.get("/download/{object_name:path}")
async def get_storage_file(
object_name: str = PathParam(..., description="File object name"),
download: str = Query("ignore", description="How to get the file"),
download: str = Query(
"ignore",
description=(
"How to get the file: "
"'ignore' (default, return file info), "
"'stream' (return file stream), "
"'redirect' (redirect to download URL), "
"'base64' (return base64-encoded content for images)."
),
),
expires: int = Query(3600, description="URL validity period (seconds)"),
filename: Optional[str] = Query(None, description="Original filename for download (optional)")
):
Expand Down Expand Up @@ -192,6 +202,28 @@ async def get_storage_file(
"ETag": f'"{object_name}"',
}
)
elif download == "base64":
# Return base64 encoded file content (primarily for images)
file_stream, content_type = await get_file_stream_impl(object_name=object_name)
try:
data = file_stream.read()
except Exception as exc:
logger.error("Failed to read file stream for base64: %s", str(exc))
raise HTTPException(
status_code=HTTPStatus.INTERNAL_SERVER_ERROR,
detail="Failed to read file content for base64 encoding",
)

base64_content = base64.b64encode(data).decode("utf-8")
return JSONResponse(
status_code=HTTPStatus.OK,
content={
"success": True,
"base64": base64_content,
"content_type": content_type,
"object_name": object_name,
},
)
else:
# return file metadata
return await get_file_url_impl(object_name=object_name, expires=expires)
Expand Down
Loading
Loading