

























@@ -1449,6 +1449,31 @@ function buildWorkboardExecution(params: {
14491449};
14501450}
145114511452+async function abortWorkboardSessionRun(params: {
1453+client: GatewayBrowserClient;
1454+sessionKey: string;
1455+runId?: string;
1456+}): Promise<boolean> {
1457+let abortResult = await params.client.request("chat.abort", {
1458+sessionKey: params.sessionKey,
1459+ ...(params.runId ? { runId: params.runId } : {}),
1460+});
1461+let aborted =
1462+isRecord(abortResult) &&
1463+(abortResult.aborted === true ||
1464+(Array.isArray(abortResult.runIds) && abortResult.runIds.length > 0));
1465+if (!aborted && params.runId) {
1466+abortResult = await params.client.request("chat.abort", {
1467+sessionKey: params.sessionKey,
1468+});
1469+aborted =
1470+isRecord(abortResult) &&
1471+(abortResult.aborted === true ||
1472+(Array.isArray(abortResult.runIds) && abortResult.runIds.length > 0));
1473+}
1474+return aborted;
1475+}
1476+14521477export async function startWorkboardCard(params: {
14531478host: WorkboardHost;
14541479client: GatewayBrowserClient | null;
@@ -1472,6 +1497,8 @@ export async function startWorkboardCard(params: {
14721497state.busyCardId = params.card.id;
14731498params.requestUpdate?.();
14741499let preflightCard: WorkboardCard | null = null;
1500+let createdSessionKey: string | null = null;
1501+let createdRunId: string | undefined;
14751502try {
14761503const shouldClearManualSchedule =
14771504mode === "manual" && params.card.metadata?.automation?.scheduledAt !== undefined;
@@ -1505,6 +1532,8 @@ export async function startWorkboardCard(params: {
15051532isRecord(created) && typeof created.runId === "string" && created.runId.trim()
15061533 ? created.runId.trim()
15071534 : undefined;
1535+createdSessionKey = sessionKey;
1536+createdRunId = runId;
15081537const initialRunFailed =
15091538mode === "autonomous" && isRecord(created) && created.runStarted === false;
15101539if (initialRunFailed) {
@@ -1559,6 +1588,17 @@ export async function startWorkboardCard(params: {
15591588replaceCard(state, normalizeCardPayload(payload));
15601589return sessionKey;
15611590} catch (error) {
1591+if (mode === "autonomous" && createdSessionKey) {
1592+try {
1593+await abortWorkboardSessionRun({
1594+client: params.client,
1595+sessionKey: createdSessionKey,
1596+runId: createdRunId,
1597+});
1598+} catch {
1599+// Preserve the card-start failure; the user-facing repair is the rollback below.
1600+}
1601+}
15621602if (preflightCard) {
15631603try {
15641604const rollbackPayload = await params.client.request("workboard.cards.update", {
@@ -1598,23 +1638,11 @@ export async function stopWorkboardCard(params: {
15981638state.error = null;
15991639params.requestUpdate?.();
16001640try {
1601-let abortResult = await params.client.request("chat.abort", {
1641+const aborted = await abortWorkboardSessionRun({
1642+client: params.client,
16021643 sessionKey,
1603-...(workboardCardRunId(params.card) ? { runId: workboardCardRunId(params.card) } : {}),
1644+runId: workboardCardRunId(params.card),
16041645});
1605-let aborted =
1606-isRecord(abortResult) &&
1607-(abortResult.aborted === true ||
1608-(Array.isArray(abortResult.runIds) && abortResult.runIds.length > 0));
1609-if (!aborted && workboardCardRunId(params.card)) {
1610-abortResult = await params.client.request("chat.abort", {
1611- sessionKey,
1612-});
1613-aborted =
1614-isRecord(abortResult) &&
1615-(abortResult.aborted === true ||
1616-(Array.isArray(abortResult.runIds) && abortResult.runIds.length > 0));
1617-}
16181646if (!aborted) {
16191647return;
16201648}
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。