

















@@ -14,22 +14,22 @@ async function loadCallGateway() {
1414throw new Error(`unable to find callGateway export in /app/dist (${candidates.join(", ")})`);
1515}
161617-const callGateway = await loadCallGateway();
17+const DEFAULT_RAW_SCHEMA_ERROR =
18+"400 The following tools cannot be used with reasoning.effort 'minimal': web_search.";
181919-const port = process.env.PORT;
20-const token = process.env.OPENCLAW_GATEWAY_TOKEN;
21-const mode = process.argv[2];
22-const sessionKey = `agent:main:openai-web-search-minimal:${mode}`;
23-const message =
24-mode === "reject" ? "FORCE_SCHEMA_REJECT" : "Return exactly OPENCLAW_SCHEMA_E2E_OK.";
25-const id = mode === "reject" ? "schema-reject" : "schema-success";
26-27-if (!port || !token) {
28-throw new Error("missing PORT/OPENCLAW_GATEWAY_TOKEN");
20+function readExpectedRawSchemaError() {
21+return process.env.RAW_SCHEMA_ERROR?.trim() || DEFAULT_RAW_SCHEMA_ERROR;
2922}
30233124async function gatewayAgent(params) {
25+const port = process.env.PORT;
26+const token = process.env.OPENCLAW_GATEWAY_TOKEN;
27+if (!port || !token) {
28+throw new Error("missing PORT/OPENCLAW_GATEWAY_TOKEN");
29+}
30+3231try {
32+const callGateway = await loadCallGateway();
3333return {
3434ok: true,
3535value: await callGateway({
@@ -51,24 +51,51 @@ async function gatewayAgent(params) {
5151}
5252}
535354-const result = await gatewayAgent({
55- sessionKey,
56- message,
57-thinking: "minimal",
58-deliver: false,
59-timeout: 180,
60-idempotencyKey: id,
61-});
62-63-if (mode === "reject") {
64-console.error(result.ok ? JSON.stringify(result.value) : String(result.error));
65-process.exit(0);
54+function stringifyError(value) {
55+return value instanceof Error ? value.message || String(value) : String(value);
6656}
67-if (!result.ok) {
68-throw toLintErrorObject(result.error, "Non-Error thrown");
57+58+function validateRejectResult(result, expectedRawSchemaError = readExpectedRawSchemaError()) {
59+if (result.ok) {
60+throw new Error(`reject mode unexpectedly completed: ${JSON.stringify(result.value)}`);
61+}
62+const errorText = stringifyError(result.error);
63+if (!errorText.includes(expectedRawSchemaError)) {
64+throw new Error(
65+`reject mode failed for an unexpected reason; expected ${JSON.stringify(
66+ expectedRawSchemaError,
67+ )} in ${JSON.stringify(errorText)}`,
68+);
69+}
70+return errorText;
6971}
70-if (result.value?.status !== "ok") {
71-throw new Error(`agent run did not complete successfully: ${JSON.stringify(result.value)}`);
72+73+async function main() {
74+const mode = process.argv[2];
75+const sessionKey = `agent:main:openai-web-search-minimal:${mode}`;
76+const message =
77+mode === "reject" ? "FORCE_SCHEMA_REJECT" : "Return exactly OPENCLAW_SCHEMA_E2E_OK.";
78+const id = mode === "reject" ? "schema-reject" : "schema-success";
79+80+const result = await gatewayAgent({
81+ sessionKey,
82+ message,
83+thinking: "minimal",
84+deliver: false,
85+timeout: 180,
86+idempotencyKey: id,
87+});
88+89+if (mode === "reject") {
90+console.error(validateRejectResult(result));
91+return;
92+}
93+if (!result.ok) {
94+throw toLintErrorObject(result.error, "Non-Error thrown");
95+}
96+if (result.value?.status !== "ok") {
97+throw new Error(`agent run did not complete successfully: ${JSON.stringify(result.value)}`);
98+}
7299}
7310074101function toLintErrorObject(value, fallbackMessage) {
@@ -84,3 +111,17 @@ function toLintErrorObject(value, fallbackMessage) {
84111}
85112return error;
86113}
114+115+if (import.meta.url === pathToFileURL(process.argv[1] ?? "").href) {
116+try {
117+await main();
118+} catch (error) {
119+console.error(error instanceof Error ? error.stack || error.message : String(error));
120+process.exit(1);
121+}
122+}
123+124+export const testing = {
125+DEFAULT_RAW_SCHEMA_ERROR,
126+ validateRejectResult,
127+};
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。