Skip to content

Commit c2e3dbf

Browse files
committed
Merge remote-tracking branch 'origin/develop' into xyc/frontend_ui
# Conflicts: # frontend/app/[locale]/setup/SetupLayout.tsx # frontend/components/ui/navbar.tsx
2 parents f292eb5 + 4d848f4 commit c2e3dbf

File tree

9 files changed

+58
-334
lines changed

9 files changed

+58
-334
lines changed

.github/workflows/docker-deploy.yml

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,11 @@ on:
1515
description: 'runner array in json format (e.g. ["ubuntu-latest"] or ["self-hosted"])'
1616
required: true
1717
default: '[]'
18+
app_version:
19+
description: 'Docker image tag to build and deploy (e.g. v1.7.1)'
20+
required: true
21+
default: 'latest'
22+
type: string
1823

1924
jobs:
2025
build-main:
@@ -23,7 +28,7 @@ jobs:
2328
- name: Checkout code
2429
uses: actions/checkout@v4
2530
- name: Build main application image
26-
run: docker build --build-arg MIRROR=https://pypi.tuna.tsinghua.edu.cn/simple --build-arg APT_MIRROR=tsinghua -t nexent/nexent -f make/main/Dockerfile .
31+
run: docker build --build-arg MIRROR=https://pypi.tuna.tsinghua.edu.cn/simple --build-arg APT_MIRROR=tsinghua -t nexent/nexent:${{ github.event.inputs.app_version }} -t nexent/nexent -f make/main/Dockerfile .
2732

2833
build-data-process:
2934
runs-on: ${{ fromJson(inputs.runner_label_json) }}
@@ -47,23 +52,23 @@ jobs:
4752
GIT_TRACE=1 GIT_CURL_VERBOSE=1 GIT_LFS_LOG=debug git lfs pull
4853
rm -rf .git .gitattributes
4954
- name: Build data process image
50-
run: docker build --build-arg MIRROR=https://pypi.tuna.tsinghua.edu.cn/simple --build-arg APT_MIRROR=tsinghua -t nexent/nexent-data-process -f make/data_process/Dockerfile .
55+
run: docker build --build-arg MIRROR=https://pypi.tuna.tsinghua.edu.cn/simple --build-arg APT_MIRROR=tsinghua -t nexent/nexent-data-process:${{ github.event.inputs.app_version }} -t nexent/nexent-data-process -f make/data_process/Dockerfile .
5156

5257
build-web:
5358
runs-on: ${{ fromJson(inputs.runner_label_json) }}
5459
steps:
5560
- name: Checkout code
5661
uses: actions/checkout@v4
5762
- name: Build web frontend image
58-
run: docker build --build-arg MIRROR=https://registry.npmmirror.com --build-arg APK_MIRROR=tsinghua -t nexent/nexent-web -f make/web/Dockerfile .
63+
run: docker build --build-arg MIRROR=https://registry.npmmirror.com --build-arg APK_MIRROR=tsinghua -t nexent/nexent-web:${{ github.event.inputs.app_version }} -t nexent/nexent-web -f make/web/Dockerfile .
5964

6065
build-docs:
6166
runs-on: ${{ fromJson(inputs.runner_label_json) }}
6267
steps:
6368
- name: Checkout code
6469
uses: actions/checkout@v4
6570
- name: Build docs image
66-
run: docker build --progress=plain -t nexent/nexent-docs -f make/docs/Dockerfile .
71+
run: docker build --progress=plain -t nexent/nexent-docs:${{ github.event.inputs.app_version }} -t nexent/nexent-docs -f make/docs/Dockerfile .
6772

6873
deploy:
6974
runs-on: ${{ fromJson(inputs.runner_label_json) }}
@@ -76,6 +81,9 @@ jobs:
7681
rm -rf $HOME/nexent
7782
mkdir -p $HOME/nexent
7883
cp -r $GITHUB_WORKSPACE/* $HOME/nexent/
84+
- name: Force APP_VERSION to latest in deploy.sh (CI only)
85+
run: |
86+
sed -i 's/APP_VERSION="$(get_app_version)"/APP_VERSION="${{ github.event.inputs.app_version }}"/' $HOME/nexent/docker/deploy.sh
7987
- name: Start docs container
8088
run: |
8189
docker stop nexent-docs 2>/dev/null || true

frontend/app/[locale]/agents/AgentsContent.tsx

Lines changed: 0 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import {
99
} from "@/const/modelConfig";
1010

1111
import AgentConfig, {AgentConfigHandle} from "./AgentConfiguration";
12-
import SaveConfirmModal from "./components/SaveConfirmModal";
1312

1413
interface AgentsContentProps {
1514
/** Whether currently saving */
@@ -39,8 +38,6 @@ export default forwardRef<AgentConfigHandle, AgentsContentProps>(function Agents
3938
onSavingStateChange,
4039
}: AgentsContentProps, ref) {
4140
const agentConfigRef = useRef<AgentConfigHandle | null>(null);
42-
const [showSaveConfirm, setShowSaveConfirm] = useState(false);
43-
const pendingNavRef = useRef<null | (() => void)>(null);
4441

4542
// Use custom hook for common setup flow logic
4643
const {
@@ -95,32 +92,6 @@ export default forwardRef<AgentConfigHandle, AgentsContentProps>(function Agents
9592
) : null}
9693
</div>
9794
</motion.div>
98-
99-
<SaveConfirmModal
100-
open={showSaveConfirm}
101-
onCancel={async () => {
102-
// Reload data from backend to discard changes
103-
await agentConfigRef.current?.reloadCurrentAgentData?.();
104-
setShowSaveConfirm(false);
105-
const go = pendingNavRef.current;
106-
pendingNavRef.current = null;
107-
if (go) go();
108-
}}
109-
onSave={async () => {
110-
try {
111-
setInternalIsSaving(true);
112-
await agentConfigRef.current?.saveAllChanges?.();
113-
setShowSaveConfirm(false);
114-
const go = pendingNavRef.current;
115-
pendingNavRef.current = null;
116-
if (go) go();
117-
} catch (e) {
118-
// errors are surfaced by underlying save
119-
} finally {
120-
setInternalIsSaving(false);
121-
}
122-
}}
123-
/>
12495
</>
12596
);
12697
});

frontend/app/[locale]/agents/components/AgentSetupOrchestrator.tsx

Lines changed: 8 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -118,9 +118,7 @@ export default function AgentSetupOrchestrator({
118118

119119

120120

121-
// Embedding auto-unselect notice modal
122-
const [isEmbeddingAutoUnsetOpen, setIsEmbeddingAutoUnsetOpen] =
123-
useState(false);
121+
124122
const lastProcessedAgentIdForEmbedding = useRef<number | null>(null);
125123

126124
// Flag to track if we need to refresh enabledToolIds after tools update
@@ -672,7 +670,12 @@ export default function AgentSetupOrchestrator({
672670
} catch (error) {
673671
// Even if API fails, still inform user and prevent usage in UI
674672
} finally {
675-
setIsEmbeddingAutoUnsetOpen(true);
673+
confirm({
674+
title: t("embedding.agentToolAutoDeselectModal.title"),
675+
content: t("embedding.agentToolAutoDeselectModal.content"),
676+
okText: t("common.confirm"),
677+
onOk: () => {},
678+
});
676679
lastProcessedAgentIdForEmbedding.current = currentAgentId;
677680
}
678681
};
@@ -2011,32 +2014,6 @@ export default function AgentSetupOrchestrator({
20112014
});
20122015
};
20132016

2014-
// Handle exit edit mode
2015-
const handleExitEdit = () => {
2016-
setIsEditingAgent(false);
2017-
setEditingAgent(null);
2018-
// Use the parent's exit creation handler to properly clear cache
2019-
if (isCreatingNewAgent && onExitCreation) {
2020-
onExitCreation();
2021-
} else {
2022-
setIsCreatingNewAgent(false);
2023-
}
2024-
setBusinessLogic("");
2025-
setDutyContent("");
2026-
setConstraintContent("");
2027-
setFewShotsContent("");
2028-
setAgentName?.("");
2029-
setAgentDescription?.("");
2030-
// Reset mainAgentId and enabledAgentIds
2031-
setMainAgentId(null);
2032-
setEnabledAgentIds([]);
2033-
// Reset selected tools
2034-
setSelectedTools([]);
2035-
setEnabledToolIds([]);
2036-
// Notify parent component about editing state change
2037-
onEditingStateChange?.(false, null);
2038-
};
2039-
20402017
// Refresh tool list
20412018
const handleToolsRefresh = useCallback(
20422019
async (showSuccessMessage = true) => {
@@ -2295,8 +2272,6 @@ export default function AgentSetupOrchestrator({
22952272
isCreatingNewAgent={isCreatingNewAgent}
22962273
canSaveAgent={localCanSaveAgent}
22972274
getButtonTitle={getLocalButtonTitle}
2298-
onDeleteAgent={onDeleteAgent || (() => {})}
2299-
onDeleteSuccess={handleExitEdit}
23002275
editingAgent={editingAgentFromParent || editingAgent}
23012276
onViewCallRelationship={handleViewCallRelationship}
23022277
/>
@@ -2443,37 +2418,7 @@ export default function AgentSetupOrchestrator({
24432418
}
24442419
/>
24452420
{/* Auto unselect knowledge_base_search notice when embedding not configured */}
2446-
<Modal
2447-
title={t("embedding.agentToolAutoDeselectModal.title")}
2448-
open={isEmbeddingAutoUnsetOpen}
2449-
onCancel={() => setIsEmbeddingAutoUnsetOpen(false)}
2450-
centered
2451-
footer={
2452-
<div className="flex justify-end mt-6 gap-4">
2453-
<Button
2454-
type="primary"
2455-
onClick={() => setIsEmbeddingAutoUnsetOpen(false)}
2456-
>
2457-
{t("common.confirm")}
2458-
</Button>
2459-
</div>
2460-
}
2461-
width={520}
2462-
>
2463-
<div className="py-2">
2464-
<div className="flex items-center">
2465-
<WarningFilled
2466-
className="text-yellow-500 mt-1 mr-2"
2467-
style={{ fontSize: "48px" }}
2468-
/>
2469-
<div className="ml-3 mt-2">
2470-
<div className="text-sm leading-6">
2471-
{t("embedding.agentToolAutoDeselectModal.content")}
2472-
</div>
2473-
</div>
2474-
</div>
2475-
</div>
2476-
</Modal>
2421+
24772422
{/* Agent call relationship modal */}
24782423
<AgentCallRelationshipModal
24792424
visible={callRelationshipModalVisible}

frontend/app/[locale]/agents/components/PromptManager.tsx

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import { updateAgent } from "@/services/agentConfigService";
1313
import { modelService } from "@/services/modelService";
1414
import { ModelOption } from "@/types/modelConfig";
1515

16-
import AgentConfigModal from "./agent/AgentConfigModal";
16+
import AgentConfigModal, { AgentConfigModalProps } from "./agent/AgentConfigModal";
1717

1818
import log from "@/lib/logger";
1919

@@ -225,8 +225,6 @@ export interface PromptManagerProps {
225225
onGenerateAgent?: (model: ModelOption) => void;
226226
onSaveAgent?: () => void;
227227
onDebug?: () => void;
228-
onDeleteAgent?: () => void;
229-
onDeleteSuccess?: () => void;
230228
getButtonTitle?: () => string;
231229
onViewCallRelationship?: () => void;
232230

@@ -272,8 +270,6 @@ export default function PromptManager({
272270
onGenerateAgent,
273271
onSaveAgent,
274272
onDebug,
275-
onDeleteAgent,
276-
onDeleteSuccess,
277273
getButtonTitle,
278274
onViewCallRelationship,
279275
editingAgent,
@@ -691,8 +687,6 @@ export default function PromptManager({
691687
onExpandCard={handleExpandCard}
692688
isGeneratingAgent={isGeneratingAgent}
693689
onDebug={onDebug}
694-
onDeleteAgent={onDeleteAgent}
695-
onDeleteSuccess={onDeleteSuccess}
696690
onSaveAgent={onSaveAgent}
697691
isCreatingNewAgent={isCreatingNewAgent}
698692
editingAgent={editingAgent}

frontend/app/[locale]/agents/components/agent/AgentConfigModal.tsx

Lines changed: 0 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,6 @@ export interface AgentConfigModalProps {
4545
isGeneratingAgent?: boolean;
4646
// Add new props for action buttons
4747
onDebug?: () => void;
48-
onDeleteAgent?: () => void;
49-
onDeleteSuccess?: () => void; // New prop for handling delete success
5048
onSaveAgent?: () => void;
5149
isCreatingNewAgent?: boolean;
5250
editingAgent?: Agent | null;
@@ -81,8 +79,6 @@ export default function AgentConfigModal({
8179
isGeneratingAgent = false,
8280
// Add new props for action buttons
8381
onDebug,
84-
onDeleteAgent,
85-
onDeleteSuccess,
8682
onSaveAgent,
8783
isCreatingNewAgent = false,
8884
editingAgent = null,
@@ -104,9 +100,6 @@ export default function AgentConfigModal({
104100
// Add segmented state management
105101
const [activeSegment, setActiveSegment] = useState<string>("agent-info");
106102

107-
// Add state for delete confirmation modal
108-
const [isDeleteModalVisible, setIsDeleteModalVisible] = useState(false);
109-
110103
// Add state for agent name validation error
111104
const [agentNameError, setAgentNameError] = useState<string>("");
112105
// Add state for agent name status check
@@ -470,16 +463,6 @@ export default function AgentConfigModal({
470463
}
471464
}, [isCreatingNewAgent, currentDisplayName, originalDisplayName]);
472465

473-
// Handle delete confirmation
474-
const handleDeleteConfirm = useCallback(() => {
475-
setIsDeleteModalVisible(false);
476-
// Execute the delete operation
477-
onDeleteAgent?.();
478-
// Call the success callback immediately after triggering delete
479-
// The actual success/failure will be handled by the parent component
480-
onDeleteSuccess?.();
481-
}, [onDeleteAgent, onDeleteSuccess]);
482-
483466
// Optimized click handlers using useCallback
484467
const handleSegmentClick = useCallback((segment: string) => {
485468
setActiveSegment(segment);
@@ -1193,25 +1176,6 @@ export default function AgentConfigModal({
11931176
</div>
11941177
</div>
11951178
)}
1196-
1197-
{/* Delete Confirmation Modal */}
1198-
<Modal
1199-
title={t("businessLogic.config.modal.deleteTitle")}
1200-
open={isDeleteModalVisible}
1201-
onOk={handleDeleteConfirm}
1202-
onCancel={() => setIsDeleteModalVisible(false)}
1203-
okText={t("businessLogic.config.modal.button.confirm")}
1204-
cancelText={t("businessLogic.config.modal.button.cancel")}
1205-
okButtonProps={{
1206-
danger: true,
1207-
}}
1208-
>
1209-
<p>
1210-
{t("businessLogic.config.modal.deleteContent", {
1211-
name: agentName || "Unnamed Agent",
1212-
})}
1213-
</p>
1214-
</Modal>
12151179
</div>
12161180
);
12171181
}

0 commit comments

Comments
 (0)