feat: 补齐 HWLAB 基线 AgentRun 执行元语
This commit is contained in:
+11
-2
@@ -71,10 +71,20 @@ export async function runOnce(options: RunnerOnceOptions): Promise<JsonRecord> {
|
||||
}
|
||||
await assertNotCancelled(api, options.runId, command.id);
|
||||
const result = await runBackendTurn(claimed, command, { ...options, ...(workspacePath ? { workspacePath } : {}), abortSignal: abortController.signal });
|
||||
for (const event of result.events) await api.appendEvent(options.runId, event);
|
||||
for (const event of result.events) {
|
||||
if (event.type !== "terminal_status") await api.appendEvent(options.runId, event);
|
||||
}
|
||||
await api.reportCommandStatus(command.id, { terminalStatus: result.terminalStatus, failureKind: result.failureKind, failureMessage: result.failureMessage });
|
||||
const finalRun = await api.reportStatus(options.runId, { terminalStatus: result.terminalStatus, failureKind: result.failureKind, failureMessage: result.failureMessage, ...(result.threadId ? { threadId: result.threadId } : {}), ...(result.turnId ? { turnId: result.turnId } : {}) }) as RunRecord;
|
||||
return { runner, commandId: command.id, terminalStatus: result.terminalStatus, failureKind: result.failureKind, run: finalRun } as JsonRecord;
|
||||
} catch (error) {
|
||||
const failureKind = failureKindFromError(error);
|
||||
const terminalStatus = terminalStatusForFailure(failureKind);
|
||||
const message = errorMessage(error);
|
||||
await api.appendEvent(options.runId, { type: "error", payload: { failureKind, message, phase: "runner:execute", attemptId, runnerId: runner.id } });
|
||||
await api.reportCommandStatus(command.id, { terminalStatus, failureKind, failureMessage: message });
|
||||
const finalRun = await api.reportStatus(options.runId, { terminalStatus, failureKind, failureMessage: message }) as RunRecord;
|
||||
return { runner, commandId: command.id, terminalStatus, failureKind, run: finalRun } as JsonRecord;
|
||||
} finally {
|
||||
stopCancelWatch();
|
||||
}
|
||||
@@ -109,7 +119,6 @@ function watchCancellation(api: RunnerManagerApi, runId: string, commandId: stri
|
||||
}
|
||||
|
||||
async function reportCancelled(api: RunnerManagerApi, runId: string, commandId: string, runner: RunnerRecord, claimed: RunRecord, message: string): Promise<JsonRecord> {
|
||||
await api.appendEvent(runId, { type: "terminal_status", payload: { terminalStatus: "cancelled", failureKind: "cancelled", message } });
|
||||
await api.reportCommandStatus(commandId, { terminalStatus: "cancelled", failureKind: "cancelled", failureMessage: message });
|
||||
const finalRun = await api.reportStatus(runId, { terminalStatus: "cancelled", failureKind: "cancelled", failureMessage: message });
|
||||
return { runner, commandId, claimed, terminalStatus: "cancelled", failureKind: "cancelled", run: finalRun };
|
||||
|
||||
Reference in New Issue
Block a user