Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
7 changes: 5 additions & 2 deletions frontend/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -91,8 +91,11 @@ server that `veadk frontend` launches — no separate backend.
probes and lists confirmed API Server and A2A integration endpoints; protocols
that the Runtime does not expose are shown as unavailable. The integration
panel switches between the detected protocols and provides a Python request
example for each one. Runtime API Keys stay masked as `****` and are fetched
only after the user explicitly reveals them; examples always use placeholders
example for each one. While a deployment is running, the detail page keeps the
Agent heading and a scrollable deployment panel visible, then reloads the
normal detail tabs after the Runtime connects. Runtime API Keys stay masked as
`****` and are fetched only after the user explicitly reveals them; examples
always use placeholders
instead of credentials. Long descriptions, names, component summaries, IDs,
and environment values stay inside the scrollable panel.
- **Custom-agent workbench**: configure an agent with a rich Markdown
Expand Down
1 change: 1 addition & 0 deletions frontend/src/App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -1599,6 +1599,7 @@ export default function App() {
editingDraftBaselineRef.current = null;
setFocusedWorkspaceAgentId(agentId);
setFocusedWorkspaceAgentSection("basic");
setFocusedDeploymentTaskId("");
setCreateView(null);
setManageAgents(true);
setAppName(agentId);
Expand Down
13 changes: 13 additions & 0 deletions frontend/src/ui/AgentWorkspace.css
Original file line number Diff line number Diff line change
Expand Up @@ -1186,6 +1186,19 @@
padding: 0 24px 16px;
}

.aw-detail-deployment.is-running {
flex: 1 1 auto;
min-height: 0;
overflow-y: auto;
overscroll-behavior: contain;
}

.aw-main.is-deploying .aw-agent-tabs,
.aw-main.is-deploying .aw-content,
.aw-main.is-deploying .aw-basic-actions {
display: none;
}

.aw-deploy-progress-head,
.aw-deploy-progress-head > div,
.aw-deploy-progress-icon {
Expand Down
7 changes: 5 additions & 2 deletions frontend/src/ui/AgentWorkspace.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -1318,6 +1318,7 @@ export function AgentWorkspace({
|| focusedDeploymentTaskActive
),
);
const deploymentInProgress = deploymentTask?.status === "running";
const draftFlowKey = useMemo(() => canvasDraftKey(draft), [draft]);
const displayCurrentVersion =
selectedAgent?.currentVersion ?? runtimeDetail?.currentVersion ?? null;
Expand Down Expand Up @@ -2422,7 +2423,7 @@ export function AgentWorkspace({
<p>未选择智能体</p>
</main>
) : (
<main className="aw-main">
<main className={`aw-main${deploymentInProgress ? " is-deploying" : ""}`}>
{selectedAgent && !selectedAgentInfo && loadingAgentInfo && (
<div className="aw-detail-loading" role="status" aria-live="polite">
<div className="aw-detail-loading-card">
Expand Down Expand Up @@ -2495,7 +2496,9 @@ export function AgentWorkspace({
)}
</div>
{deploymentTask && shouldShowDeploymentTask && (
<div className="aw-detail-deployment">
<div
className={`aw-detail-deployment${deploymentInProgress ? " is-running" : ""}`}
>
<DeploymentProgressCard task={deploymentTask} />
</div>
)}
Expand Down
16 changes: 14 additions & 2 deletions frontend/tests/agentWorkspace.test.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -248,7 +248,7 @@ test("workspace publish flow restores PR 748 deployment lifecycle hooks", () =>
);
assert.match(
appSource,
/const finishDeployment = useCallback[\s\S]*?removeWorkspaceDraft\(editingDraftId\)[\s\S]*?setFocusedWorkspaceAgentId\(agentId\)[\s\S]*?setManageAgents\(true\)/,
/const finishDeployment = useCallback[\s\S]*?removeWorkspaceDraft\(editingDraftId\)[\s\S]*?setFocusedWorkspaceAgentId\(agentId\)[\s\S]*?setFocusedDeploymentTaskId\(""\)[\s\S]*?setManageAgents\(true\)/,
);
assert.match(appSource, /onDeploymentStarted=\{startDeployment\}/);
assert.match(appSource, /onDeploymentComplete=\{finishDeployment\}/);
Expand Down Expand Up @@ -301,11 +301,15 @@ test("workspace publish flow restores PR 748 deployment lifecycle hooks", () =>
workspaceSource,
/const shouldShowDeploymentTask = Boolean\([\s\S]*?deploymentTask\.status !== "success"[\s\S]*?focusedDeploymentTaskActive/,
);
assert.match(
workspaceSource,
/const deploymentInProgress = deploymentTask\?\.status === "running"/,
);
assert.match(workspaceSource, /if \(!focusedDeploymentTaskId\) return;/);
assert.doesNotMatch(workspaceSource, /activeDeploymentTaskId/);
assert.match(
workspaceSource,
/className="aw-agent-head"[\s\S]*?\{deploymentTask && shouldShowDeploymentTask && \([\s\S]*?className="aw-detail-deployment"[\s\S]*?<DeploymentProgressCard task=\{deploymentTask\} \/>[\s\S]*?<nav className="aw-agent-tabs"/,
/className=\{`aw-main\$\{deploymentInProgress \? " is-deploying" : ""\}`\}[\s\S]*?className="aw-agent-head"[\s\S]*?\{deploymentTask && shouldShowDeploymentTask && \([\s\S]*?className=\{`aw-detail-deployment\$\{deploymentInProgress \? " is-running" : ""\}`\}[\s\S]*?<DeploymentProgressCard task=\{deploymentTask\} \/>[\s\S]*?<nav[\s\S]*?className="aw-agent-tabs"/,
);
assert.match(workspaceSource, /const BUILD_STEP_INDEX = DEPLOYMENT_STEPS\.findIndex/);
assert.match(workspaceSource, /const shouldAutoExpand = Boolean\([\s\S]*?deploymentStepIndex\(task\) === BUILD_STEP_INDEX/);
Expand All @@ -327,6 +331,14 @@ test("workspace publish flow restores PR 748 deployment lifecycle hooks", () =>
/className="aw-basic-stack">\s*\{deploymentTask && <DeploymentProgressCard/,
);
assert.match(workspaceStyles, /\.aw-detail-deployment\s*\{[\s\S]*?padding:\s*0 24px 16px;/);
assert.match(
workspaceStyles,
/\.aw-detail-deployment\.is-running\s*\{[\s\S]*?flex:\s*1 1 auto;[\s\S]*?min-height:\s*0;[\s\S]*?overflow-y:\s*auto;[\s\S]*?overscroll-behavior:\s*contain;/,
);
assert.match(
workspaceStyles,
/\.aw-main\.is-deploying \.aw-agent-tabs,[\s\S]*?\.aw-main\.is-deploying \.aw-content,[\s\S]*?\.aw-main\.is-deploying \.aw-basic-actions\s*\{[\s\S]*?display:\s*none;/,
);
assert.match(projectPreviewSource, /await onDeploymentComplete\?\.\(result\)/);
assert.match(projectPreviewSource, /runtimeId: result\.runtimeId \|\| deploymentRuntimeId/);
});
Expand Down
2 changes: 0 additions & 2 deletions tests/cli/test_studio_deploy_target.py
Original file line number Diff line number Diff line change
Expand Up @@ -376,8 +376,6 @@ def register_callback_for_user_pool_client(self, **kwargs: object) -> None:
"openclaw-tool",
"--sandbox-chat-hermes-tool-id",
"hermes-tool",
"--sandbox-skill-creator-tool-id",
"skill-tool",
*provider_args,
*dev_args,
],
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Large diffs are not rendered by default.

Loading
Loading