Clarify AI config dispatch failures
This commit is contained in:
@@ -947,7 +947,7 @@ interface LlmSectionProps {
|
||||
onOpenTerminal: (jobId?: string) => void;
|
||||
}
|
||||
|
||||
function LlmSection({ serverId, session, operations, onOpenTerminal }: LlmSectionProps) {
|
||||
export function LlmSection({ serverId, session, operations, onOpenTerminal }: LlmSectionProps) {
|
||||
const [prompt, setPrompt] = useState("");
|
||||
const [suggestion, setSuggestion] = useState<LlmSuggestionView | null>(null);
|
||||
const [busy, setBusy] = useState(false);
|
||||
@@ -968,18 +968,23 @@ function LlmSection({ serverId, session, operations, onOpenTerminal }: LlmSectio
|
||||
}
|
||||
const recommendation = response.configRecommendation;
|
||||
const execution = response.configExecution;
|
||||
if (execution?.job) {
|
||||
const operationId = operations.begin({ intent: "AI 直接写入配置", targetKind: "llm", targetId: serverId, requester: session.displayName });
|
||||
operations.succeed(operationId, "AI 建议已直接派发,写入任务 " + execution.job.id + " 已进入队列", execution.job);
|
||||
onOpenTerminal(execution.job.id);
|
||||
if (!recommendation?.suggestedConfig) {
|
||||
throw new Error("AI 未生成可写入的配置内容,请调整请求后重试。");
|
||||
}
|
||||
if (!execution?.job || execution.job.capability !== "config.write" || execution.job.serverInstanceId !== serverId) {
|
||||
throw new Error("平台未派发配置写入任务;请更新或重启 Platform 后端后重试。");
|
||||
}
|
||||
const operationId = operations.begin({ intent: "AI 直接写入配置", targetKind: "llm", targetId: serverId, requester: session.displayName });
|
||||
operations.succeed(operationId, "AI 建议已直接派发,写入任务 " + execution.job.id + " 已进入队列", execution.job);
|
||||
onOpenTerminal(execution.job.id);
|
||||
setSuggestion({
|
||||
serverInstanceId: serverId,
|
||||
source: "api",
|
||||
recommendation: response.recommendation ?? "Platform 已返回配置建议。",
|
||||
diffSummary: recommendation?.diffSummary,
|
||||
executionStatus: execution?.status,
|
||||
job: execution?.job
|
||||
executionStatus: execution.status,
|
||||
job: execution.job,
|
||||
mocked: response.usage.mocked
|
||||
});
|
||||
} catch (caught) {
|
||||
setSuggestionError(caught instanceof Error ? caught.message : "AI 建议请求失败");
|
||||
@@ -1035,28 +1040,18 @@ function LlmSection({ serverId, session, operations, onOpenTerminal }: LlmSectio
|
||||
<div style={{ display: "grid", gap: 12, marginTop: 14 }}>
|
||||
<div className="panel-header" style={{ marginBottom: 0 }}>
|
||||
<h3>AI 建议</h3>
|
||||
<span className="page-status">平台 AI Provider</span>
|
||||
<span className="page-status">{suggestion.mocked ? "模拟 AI Provider" : "平台 AI Provider"}</span>
|
||||
</div>
|
||||
<p style={{ margin: 0, color: "var(--ink-soft)", fontSize: 14 }}>{suggestion.recommendation}</p>
|
||||
{suggestion.job ? (
|
||||
<>
|
||||
<div className="console-record">
|
||||
<div className="console-record-head"><strong>AI 配置写入已派发</strong><span className="status-pill status-active">{suggestion.executionStatus ?? "queued"}</span></div>
|
||||
<div className="console-record-meta"><span>Job {suggestion.job.id}</span><span>{suggestion.job.capability}</span><span>{suggestion.job.targetKey}</span></div>
|
||||
<span className="provider-id">{suggestion.diffSummary ?? "AI 建议已直接进入 config.write 队列,日志正在实时输出。"}</span>
|
||||
</div>
|
||||
<div className="confirm-actions">
|
||||
<button type="button" onClick={() => onOpenTerminal(suggestion.job?.id)}>
|
||||
打开实时终端
|
||||
</button>
|
||||
<button type="button" className="confirm-primary" onClick={() => setSuggestion(null)}>
|
||||
清除结果
|
||||
</button>
|
||||
</div>
|
||||
</>
|
||||
) : (
|
||||
<span className="provider-id">该响应没有生成可应用的配置任务,仅供参考。</span>
|
||||
)}
|
||||
<div className="console-record">
|
||||
<div className="console-record-head"><strong>AI 配置写入已派发</strong><span className="status-pill status-active">{suggestion.executionStatus}</span></div>
|
||||
<div className="console-record-meta"><span>Job {suggestion.job.id}</span><span>{suggestion.job.capability}</span><span>{suggestion.job.targetKey}</span></div>
|
||||
<span className="provider-id">{suggestion.diffSummary ?? "AI 建议已直接进入 config.write 队列,日志正在实时输出。"}</span>
|
||||
</div>
|
||||
<div className="confirm-actions">
|
||||
<button type="button" onClick={() => onOpenTerminal(suggestion.job.id)}>打开实时终端</button>
|
||||
<button type="button" className="confirm-primary" onClick={() => setSuggestion(null)}>清除结果</button>
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
</article>
|
||||
|
||||
Reference in New Issue
Block a user