fix(coding-agent): 等待最终 Promise 表达式
This commit is contained in:
@@ -29,6 +29,7 @@ type BabelExpressionStatement = {
|
||||
type: "ExpressionStatement";
|
||||
start: number;
|
||||
end: number;
|
||||
expression?: { type?: string };
|
||||
};
|
||||
|
||||
type BabelProgramNode = BabelImportDeclaration | BabelLexicalDecl | BabelExpressionStatement | { type: string };
|
||||
@@ -186,7 +187,10 @@ function returnFinalExpression(code: string): { source: string; returned: boolea
|
||||
const suffix = code.slice(expression.end);
|
||||
const semicolonMatch = statement.match(/;\s*$/);
|
||||
const trimmedStatement = semicolonMatch ? statement.slice(0, semicolonMatch.index) : statement;
|
||||
return { source: `${prefix}__omp_display__(${trimmedStatement});${suffix}`, returned: true };
|
||||
const needsAwait =
|
||||
expression.expression?.type === "AwaitExpression" || expression.expression?.type === "CallExpression";
|
||||
const displayExpression = needsAwait ? `await (${trimmedStatement})` : trimmedStatement;
|
||||
return { source: `${prefix}__omp_display__(${displayExpression});${suffix}`, returned: true };
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -270,6 +270,17 @@ describe("executeJs", () => {
|
||||
});
|
||||
});
|
||||
|
||||
it("awaits promise-valued final expressions before displaying", async () => {
|
||||
const result = await executeJs("read('config.json');", {
|
||||
sessionId,
|
||||
session,
|
||||
sessionFile,
|
||||
});
|
||||
|
||||
expect(result.exitCode).toBe(0);
|
||||
expect(result.output.trim()).toBe('{\n "name": "demo",\n "enabled": true\n}');
|
||||
});
|
||||
|
||||
it("auto-displays returned objects as structured output", async () => {
|
||||
const result = await executeJs("return { answer: 42, nested: { ok: true } };", {
|
||||
sessionId,
|
||||
|
||||
Reference in New Issue
Block a user