@qwen-code/arena-agent 0.0.9-dev.2 → 0.0.9-dev.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. package/.env.example +41 -2
  2. package/README.md +143 -16
  3. package/dist/agent.d.ts +3 -1
  4. package/dist/agent.js +61 -15
  5. package/dist/agent.js.map +1 -1
  6. package/dist/anthropic.js +3 -1
  7. package/dist/anthropic.js.map +1 -1
  8. package/dist/ask-user.d.ts +20 -0
  9. package/dist/ask-user.js +388 -0
  10. package/dist/ask-user.js.map +1 -0
  11. package/dist/attachments.d.ts +1 -1
  12. package/dist/attachments.js +16 -4
  13. package/dist/attachments.js.map +1 -1
  14. package/dist/brave-search.d.ts +6 -0
  15. package/dist/brave-search.js +193 -0
  16. package/dist/brave-search.js.map +1 -0
  17. package/dist/canonical-data.d.ts +1 -0
  18. package/dist/canonical-data.js +1 -0
  19. package/dist/canonical-data.js.map +1 -1
  20. package/dist/cli.js +43 -11
  21. package/dist/cli.js.map +1 -1
  22. package/dist/code-cli.d.ts +2 -0
  23. package/dist/code-cli.js +12 -0
  24. package/dist/code-cli.js.map +1 -0
  25. package/dist/code-tools.d.ts +68 -0
  26. package/dist/code-tools.js +1925 -0
  27. package/dist/code-tools.js.map +1 -0
  28. package/dist/config.d.ts +12 -1
  29. package/dist/config.js +51 -3
  30. package/dist/config.js.map +1 -1
  31. package/dist/document-reader.js +9 -0
  32. package/dist/document-reader.js.map +1 -1
  33. package/dist/fetch-page.d.ts +2 -0
  34. package/dist/fetch-page.js +50 -21
  35. package/dist/fetch-page.js.map +1 -1
  36. package/dist/history.d.ts +2 -0
  37. package/dist/history.js +1 -0
  38. package/dist/history.js.map +1 -1
  39. package/dist/image.d.ts +14 -0
  40. package/dist/image.js +299 -0
  41. package/dist/image.js.map +1 -0
  42. package/dist/mock.d.ts +1 -0
  43. package/dist/mock.js +38 -0
  44. package/dist/mock.js.map +1 -1
  45. package/dist/mode.d.ts +6 -0
  46. package/dist/mode.js +33 -0
  47. package/dist/mode.js.map +1 -0
  48. package/dist/model-diagnostics.js +5 -2
  49. package/dist/model-diagnostics.js.map +1 -1
  50. package/dist/provider.js +14 -5
  51. package/dist/provider.js.map +1 -1
  52. package/dist/routify-web-fetch.d.ts +11 -0
  53. package/dist/routify-web-fetch.js +130 -0
  54. package/dist/routify-web-fetch.js.map +1 -0
  55. package/dist/sdk.d.ts +35 -3
  56. package/dist/sdk.js +6 -2
  57. package/dist/sdk.js.map +1 -1
  58. package/dist/server.d.ts +3 -0
  59. package/dist/server.js +86 -5
  60. package/dist/server.js.map +1 -1
  61. package/dist/spec.d.ts +11 -8
  62. package/dist/spec.js +105 -13
  63. package/dist/spec.js.map +1 -1
  64. package/dist/tools.d.ts +10 -27
  65. package/dist/tools.js +64 -59
  66. package/dist/tools.js.map +1 -1
  67. package/dist/tui.d.ts +3 -0
  68. package/dist/tui.js +11 -2
  69. package/dist/tui.js.map +1 -1
  70. package/dist/types.d.ts +9 -2
  71. package/dist/web/app.js +59 -6
  72. package/dist/web/app.js.map +1 -1
  73. package/dist/workspace.d.ts +12 -0
  74. package/dist/workspace.js +165 -0
  75. package/dist/workspace.js.map +1 -0
  76. package/docs/BINARY_DISTRIBUTION.md +231 -0
  77. package/docs/MODES_AND_RELEASES.md +123 -0
  78. package/docs/SDK.md +24 -1
  79. package/modes/code-arena/full-stack/system-prompt.txt +77 -0
  80. package/modes/code-arena/full-stack/template/.env +1 -0
  81. package/modes/code-arena/full-stack/template/drizzle.config.json +7 -0
  82. package/modes/code-arena/full-stack/template/eslint.config.mjs +9 -0
  83. package/modes/code-arena/full-stack/template/next.config.ts +5 -0
  84. package/modes/code-arena/full-stack/template/package.json +32 -0
  85. package/modes/code-arena/full-stack/template/postcss.config.mjs +7 -0
  86. package/modes/code-arena/full-stack/template/src/app/api/health/route.ts +13 -0
  87. package/modes/code-arena/full-stack/template/src/app/globals.css +1 -0
  88. package/modes/code-arena/full-stack/template/src/app/layout.tsx +16 -0
  89. package/modes/code-arena/full-stack/template/src/app/page.tsx +22 -0
  90. package/modes/code-arena/full-stack/template/src/db/index.ts +24 -0
  91. package/modes/code-arena/full-stack/template/src/db/schema.ts +3 -0
  92. package/modes/code-arena/full-stack/template/tsconfig.json +24 -0
  93. package/modes/code-arena/full-stack/tools.json +446 -0
  94. package/modes/code-arena/html/system-prompt.txt +36 -0
  95. package/modes/code-arena/html/tools.json +284 -0
  96. package/modes/code-arena/model.json +10 -0
  97. package/modes/code-arena/react/system-prompt.txt +33 -0
  98. package/modes/code-arena/react/template/index.html +12 -0
  99. package/modes/code-arena/react/template/package.json +28 -0
  100. package/modes/code-arena/react/template/src/App.tsx +28 -0
  101. package/modes/code-arena/react/template/src/index.css +1 -0
  102. package/modes/code-arena/react/template/src/main.tsx +10 -0
  103. package/modes/code-arena/react/template/src/utils/cn.ts +6 -0
  104. package/modes/code-arena/react/template/tsconfig.json +25 -0
  105. package/modes/code-arena/react/template/vite.config.ts +18 -0
  106. package/modes/code-arena/react/tools.json +410 -0
  107. package/package.json +33 -5
  108. package/web/styles.css +22 -7
package/dist/spec.js CHANGED
@@ -1,10 +1,15 @@
1
1
  import { fileURLToPath } from "node:url";
2
2
  import path from "node:path";
3
- import { messageFixtureJson, modelSpecJson } from "./canonical-data.js";
3
+ import { codeArenaModeDataJson, messageFixtureJson, modelSpecJson, } from "./canonical-data.js";
4
+ import { defaultStepLimit, isCodeArenaMode, } from "./mode.js";
4
5
  import { repoAgentSystemPromptTemplate } from "./prompts.js";
5
- const packageRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..");
6
+ import { isSingleExecutable } from "./runtime-assets.js";
7
+ const packageRoot = path.resolve(isSingleExecutable()
8
+ ? path.dirname(process.execPath)
9
+ : path.dirname(fileURLToPath(import.meta.url)), "..");
6
10
  let cachedMessageFixture;
7
11
  let cachedModelSpec;
12
+ let cachedCodeArenaModeData;
8
13
  const locationAbsentLine = "The user's approximate location was not provided by the client.";
9
14
  const clientContextPattern = /Today's date is [^\n]*\nThe user's approximate location (?:is:[^\n]*|was not provided by the client\.)/;
10
15
  const workspaceGuidancePattern = /Many of the tools are for the workspace;[\s\S]*?Turn-end snapshots are best-effort capped around 128 MB or 10,000 files\.\n\n/;
@@ -13,14 +18,36 @@ export const userInterruptionNotice = "<arena-system-message>\n" +
13
18
  "The previous assistant response was stopped by the user before it completed. " +
14
19
  "Treat that response as partial and do not assume any unfinished text or tool calls completed.\n" +
15
20
  "</arena-system-message>";
21
+ export const codeArenaUserInterruptionNotice = "<code-harness-system-message>\n" +
22
+ "The previous assistant response was stopped by the user before it completed. " +
23
+ "Treat that response as partial and do not assume any unfinished text or tool calls completed.\n" +
24
+ "</code-harness-system-message>";
25
+ export function userInterruptionNoticeForMode(mode) {
26
+ return isCodeArenaMode(mode)
27
+ ? codeArenaUserInterruptionNotice
28
+ : userInterruptionNotice;
29
+ }
16
30
  export function projectRoot() {
17
31
  return packageRoot;
18
32
  }
19
- export function messageFixture() {
33
+ function codeArenaModeData(mode) {
34
+ cachedCodeArenaModeData ??= JSON.parse(codeArenaModeDataJson);
35
+ return cachedCodeArenaModeData[mode];
36
+ }
37
+ export function messageFixture(mode = "arena") {
38
+ if (isCodeArenaMode(mode)) {
39
+ return {
40
+ messages: [
41
+ { role: "system", content: codeArenaModeData(mode).systemPrompt },
42
+ ],
43
+ };
44
+ }
20
45
  cachedMessageFixture ??= JSON.parse(messageFixtureJson);
21
46
  return cachedMessageFixture;
22
47
  }
23
- export function modelSpec() {
48
+ export function modelSpec(mode = "arena") {
49
+ if (isCodeArenaMode(mode))
50
+ return codeArenaModeData(mode).modelSpec;
24
51
  cachedModelSpec ??= JSON.parse(modelSpecJson);
25
52
  return cachedModelSpec;
26
53
  }
@@ -104,7 +131,33 @@ function applyWorkspaceContext(message, workspaceContext) {
104
131
  }
105
132
  return message;
106
133
  }
107
- export function systemMessage(context, workspaceContext) {
134
+ function codeArenaPromptForStepLimit(mode, stepLimit = defaultStepLimit(mode)) {
135
+ const content = codeArenaModeData(mode).systemPrompt;
136
+ if (!stepLimit)
137
+ return content;
138
+ return content.replace(/maximum of \d+ sequential tool-calling steps/, `maximum of ${stepLimit} sequential tool-calling steps`);
139
+ }
140
+ function applyCodeArenaWorkspaceContext(content, workspaceContext) {
141
+ if (!workspaceContext)
142
+ return content;
143
+ const root = path.resolve(workspaceContext.root);
144
+ const cwd = path.resolve(workspaceContext.cwd);
145
+ const rootLine = root === cwd ? "" : `\nThe workspace root is \`${root}\`.`;
146
+ return (`${content.trimEnd()}\n\n` +
147
+ "## Local Workspace\n\n" +
148
+ `The current project root and default working directory is \`${cwd}\`.` +
149
+ rootLine +
150
+ " Relative paths resolve from the current project root. When an absolute " +
151
+ "path is needed, use this real local path. Do not use virtual sandbox " +
152
+ "aliases such as `/app` or `/home/user`.\n");
153
+ }
154
+ export function systemMessage(context, workspaceContext, mode = "arena", stepLimit) {
155
+ if (isCodeArenaMode(mode)) {
156
+ return {
157
+ role: "system",
158
+ content: applyCodeArenaWorkspaceContext(codeArenaPromptForStepLimit(mode, stepLimit), workspaceContext),
159
+ };
160
+ }
108
161
  const fixture = messageFixture().messages;
109
162
  const canonical = structuredClone(fixture[0]);
110
163
  const currentDate = cleanContextValue(context.currentDate);
@@ -118,7 +171,10 @@ export function systemMessage(context, workspaceContext) {
118
171
  canonical.content = canonical.content.replace(clientContextPattern, dynamicContext);
119
172
  return applyWorkspaceContext(canonical, workspaceContext);
120
173
  }
121
- export function repoSystemMessage(context, repo) {
174
+ export function repoSystemMessage(context, repo, mode = "arena", workspaceContext, stepLimit) {
175
+ if (isCodeArenaMode(mode)) {
176
+ return systemMessage(context, workspaceContext, mode, stepLimit);
177
+ }
122
178
  return {
123
179
  role: "system",
124
180
  content: renderTemplate(repoAgentSystemPromptTemplate, {
@@ -148,27 +204,34 @@ export function repoContextFromSystemMessage(message) {
148
204
  baseBranch: branch[3],
149
205
  };
150
206
  }
151
- export function isCanonicalSystemMessage(message, expectedOrWorkspace) {
207
+ export function isCanonicalSystemMessage(message, expectedOrWorkspace, mode = "arena", stepLimit) {
152
208
  if (message?.role !== "system" ||
153
209
  typeof message.content !== "string" ||
154
210
  !message.content) {
155
211
  return false;
156
212
  }
213
+ if (isCodeArenaMode(mode)) {
214
+ const normalize = (content) => content.replace(/maximum of \d+ sequential tool-calling steps/, "maximum of <steps> sequential tool-calling steps");
215
+ const expected = expectedOrWorkspace && "role" in expectedOrWorkspace
216
+ ? expectedOrWorkspace.content
217
+ : applyCodeArenaWorkspaceContext(codeArenaPromptForStepLimit(mode, stepLimit), expectedOrWorkspace);
218
+ return normalize(message.content) === normalize(expected);
219
+ }
157
220
  const canonical = expectedOrWorkspace && "role" in expectedOrWorkspace
158
221
  ? expectedOrWorkspace
159
222
  : systemMessage(defaultClientContext(), expectedOrWorkspace);
160
223
  return (message.content.replace(clientContextPattern, "<client-context>") ===
161
224
  canonical.content.replace(clientContextPattern, "<client-context>"));
162
225
  }
163
- export function initialMessages(prompt, context = defaultClientContext(), workspaceContext, repo) {
226
+ export function initialMessages(prompt, context = defaultClientContext(), workspaceContext, repo, mode = "arena", stepLimit) {
164
227
  return [
165
228
  repo
166
- ? repoSystemMessage(context, repo)
167
- : systemMessage(context, workspaceContext),
229
+ ? repoSystemMessage(context, repo, mode, workspaceContext, stepLimit)
230
+ : systemMessage(context, workspaceContext, mode, stepLimit),
168
231
  { role: "user", content: prompt },
169
232
  ];
170
233
  }
171
- export function interruptedUserMessage(promptOrMessage) {
234
+ export function interruptedUserMessage(promptOrMessage, mode = "arena") {
172
235
  const content = typeof promptOrMessage === "string"
173
236
  ? [{ text: promptOrMessage }]
174
237
  : typeof promptOrMessage.content === "string"
@@ -177,7 +240,7 @@ export function interruptedUserMessage(promptOrMessage) {
177
240
  return {
178
241
  role: "user",
179
242
  content: [
180
- { text: userInterruptionNotice },
243
+ { text: userInterruptionNoticeForMode(mode) },
181
244
  ...content,
182
245
  ],
183
246
  };
@@ -192,7 +255,36 @@ function parameterProperty(definition, name) {
192
255
  }
193
256
  return property;
194
257
  }
195
- export function toolDefinitions(workspaceContext) {
258
+ function codeArenaToolDefinitions(mode, workspaceContext) {
259
+ const definitions = structuredClone(modelSpec(mode).tools);
260
+ if (!workspaceContext || mode !== "full-stack")
261
+ return definitions;
262
+ const cwd = path.resolve(workspaceContext.cwd);
263
+ const bash = definitions.find((definition) => definition.function.name === "bash");
264
+ if (!bash)
265
+ return definitions;
266
+ bash.function.description =
267
+ `Execute a bash command directly in the local workspace at \`${cwd}\`. ` +
268
+ "Node.js and common CLI tools are available. Commands and output use real " +
269
+ "local paths; there is no `/app` virtual-path alias.\n\n" +
270
+ "Guidelines:\n" +
271
+ `- Use \`.\` for the project root (\`${cwd}\`) or pass a relative ` +
272
+ "subdirectory as `workdir`. Never pass a path outside the workspace.\n" +
273
+ "- Prefer specialized tools (create_file, edit_file, read_file) for file operations when possible.\n" +
274
+ "- Include a short `description` summarizing what the command does in 5-10 words.\n" +
275
+ "- The command runs with `/bin/bash -c` and captures both stdout and stderr.\n";
276
+ const properties = bash.function.parameters.properties;
277
+ if (properties?.workdir) {
278
+ properties.workdir.description =
279
+ `Working directory relative to the real project root \`${cwd}\` ` +
280
+ "(use `.` for the project root)";
281
+ }
282
+ return definitions;
283
+ }
284
+ export function toolDefinitions(workspaceContext, mode = "arena") {
285
+ if (isCodeArenaMode(mode)) {
286
+ return codeArenaToolDefinitions(mode, workspaceContext);
287
+ }
196
288
  const definitions = structuredClone(modelSpec().tools);
197
289
  if (!workspaceContext)
198
290
  return definitions;
package/dist/spec.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"spec.js","sourceRoot":"","sources":["../src/spec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"spec.js","sourceRoot":"","sources":["../src/spec.ts"],"names":[],"mappings":"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"}
package/dist/tools.d.ts CHANGED
@@ -1,39 +1,22 @@
1
1
  import { type ArenaConfig } from "./config.js";
2
- import type { AskUserHandler, MultimodalUserMessage, ToolCall, ToolDefinition, ToolMessage, WorkspaceContext } from "./types.js";
2
+ import type { AskUserHandler, AskUserContext, MultimodalUserMessage, ToolCall, ToolDefinition, ToolMessage, WorkspaceContext } from "./types.js";
3
3
  interface ToolExecutorOptions {
4
4
  askUserHandler?: AskUserHandler;
5
5
  signal?: AbortSignal;
6
6
  workspaceContext?: WorkspaceContext;
7
7
  }
8
+ /**
9
+ * Mode-aware tool facade. The Arena executor stays byte-compatible with the
10
+ * existing harness, while the three Code Arena modes use their captured tool
11
+ * contracts and implementations behind the same agent-loop interface.
12
+ */
8
13
  export declare class ToolExecutor {
9
- private readonly config;
10
- readonly workspace: string;
11
- private readonly workspaceReal;
12
- private readonly validators;
13
- private readonly pendingVisualContent;
14
- private readonly askUserHandler?;
15
- private readonly signal?;
16
- private readonly workspaceContext?;
17
- private readonly pageReader;
18
- private readonly ajv;
19
- readonly askUserEnabled: boolean;
14
+ private readonly implementation;
20
15
  constructor(config: ArenaConfig, options?: ToolExecutorOptions);
16
+ get workspace(): string;
17
+ get askUserEnabled(): boolean;
21
18
  availableTools(): ToolDefinition[];
22
- execute(call: ToolCall): Promise<ToolMessage>;
19
+ execute(call: ToolCall, context?: AskUserContext): Promise<ToolMessage>;
23
20
  takeVisualMessage(toolCallIds: string[]): MultimodalUserMessage | undefined;
24
- private dispatch;
25
- private confinedPath;
26
- private relativePath;
27
- private virtualizeBashOutput;
28
- private bash;
29
- private askUser;
30
- private editFile;
31
- private readWorkspaceFile;
32
- private writeWorkspaceFile;
33
- private webSearch;
34
- private imageSearch;
35
- private presentFile;
36
- private generateImage;
37
- private generateSpeech;
38
21
  }
39
22
  export {};
package/dist/tools.js CHANGED
@@ -8,9 +8,14 @@ import addFormats from "ajv-formats";
8
8
  import { detect as detectEncoding } from "chardet";
9
9
  import iconv from "iconv-lite";
10
10
  import mime from "mime/lite";
11
+ import { AskUserHandlerError } from "./ask-user.js";
12
+ import { executeBraveWebSearch } from "./brave-search.js";
13
+ import { CodeToolExecutor } from "./code-tools.js";
11
14
  import { supportsImageInput } from "./config.js";
12
15
  import { extractStructuredDocument, isStructuredDocument, } from "./document-reader.js";
13
16
  import { FetchPageReader } from "./fetch-page.js";
17
+ import { prepareImageForModel } from "./image.js";
18
+ import { isCodeArenaMode } from "./mode.js";
14
19
  import { toolDefinitions } from "./spec.js";
15
20
  const knownTextApplicationMimeTypes = new Set([
16
21
  "application/ecmascript",
@@ -412,7 +417,7 @@ async function responseBytes(response, limit = 4 * 1024 * 1024) {
412
417
  }
413
418
  return bytes;
414
419
  }
415
- export class ToolExecutor {
420
+ class ArenaToolExecutor {
416
421
  config;
417
422
  workspace;
418
423
  workspaceReal;
@@ -423,9 +428,9 @@ export class ToolExecutor {
423
428
  workspaceContext;
424
429
  pageReader;
425
430
  ajv = new Ajv({ allErrors: true, strict: false });
426
- // ask_user needs an interactive front-end (TUI/WebUI) to collect answers.
427
- // Headless `-p` supplies no handler, so the tool is withheld from the model
428
- // entirely rather than offered and then dead-ending on needs_input.
431
+ // ask_user needs a handler: TUI/WebUI collect real user input, while
432
+ // headless `-p` may delegate to a configured remote User Agent. Without a
433
+ // handler the tool is withheld rather than dead-ending on needs_input.
429
434
  askUserEnabled;
430
435
  constructor(config, options = {}) {
431
436
  this.config = config;
@@ -444,7 +449,7 @@ export class ToolExecutor {
444
449
  }
445
450
  // The tool schemas offered to the model for this session. Identical to the
446
451
  // canonical trace set, adjusted for the selected workspace runtime and minus
447
- // ask_user when no interactive handler is wired.
452
+ // ask_user when no handler is wired.
448
453
  availableTools() {
449
454
  let definitions = toolDefinitions(this.workspaceContext);
450
455
  if (!this.askUserEnabled) {
@@ -453,7 +458,7 @@ export class ToolExecutor {
453
458
  const disallowed = new Set(this.config.disallowedTools || []);
454
459
  return definitions.filter((definition) => !disallowed.has(definition.function.name));
455
460
  }
456
- async execute(call) {
461
+ async execute(call, context) {
457
462
  const callId = String(call.id || "");
458
463
  const name = String(call.function?.name || "");
459
464
  this.pendingVisualContent.delete(callId);
@@ -476,7 +481,7 @@ export class ToolExecutor {
476
481
  .join("; ");
477
482
  throw new Error(`invalid arguments: ${errors}`);
478
483
  }
479
- const result = await this.dispatch(name, argumentsValue, callId);
484
+ const result = await this.dispatch(name, argumentsValue, callId, context);
480
485
  const content = typeof result === "string" ? result : json(result);
481
486
  if (content.length > toolResultCharacterLimit) {
482
487
  return {
@@ -497,6 +502,13 @@ export class ToolExecutor {
497
502
  };
498
503
  }
499
504
  catch (error) {
505
+ if (error instanceof AskUserHandlerError) {
506
+ return {
507
+ role: "tool",
508
+ tool_call_id: callId,
509
+ content: json({ status: "error", message: error.message }),
510
+ };
511
+ }
500
512
  return {
501
513
  role: "tool",
502
514
  tool_call_id: callId,
@@ -524,7 +536,7 @@ export class ToolExecutor {
524
536
  content: [{ text: visualIntroText }, ...images],
525
537
  };
526
538
  }
527
- async dispatch(name, values, toolCallId) {
539
+ async dispatch(name, values, toolCallId, context) {
528
540
  switch (name) {
529
541
  case "bash":
530
542
  return this.bash(String(values.command), String(values.cwd ||
@@ -532,7 +544,7 @@ export class ToolExecutor {
532
544
  ? path.resolve(this.workspaceContext.cwd)
533
545
  : "/home/user")), Number(values.timeout || 30));
534
546
  case "ask_user":
535
- return this.askUser(values.questions, toolCallId);
547
+ return this.askUser(values.questions, toolCallId, context);
536
548
  case "edit_file":
537
549
  return this.editFile(String(values.path), String(values.old_text), String(values.new_text));
538
550
  case "read_file":
@@ -623,7 +635,6 @@ export class ToolExecutor {
623
635
  return new Promise((resolve, reject) => {
624
636
  const env = {
625
637
  ...process.env,
626
- HOME: this.workspace,
627
638
  ARENA_WORKSPACE: this.workspace,
628
639
  // 生产 sandbox 是 C collation(参考 find|sort 为逐字节序),宿主
629
640
  // 常见 en_US.UTF-8 会翻转大小写次序;统一成 C.UTF-8 对齐生产。
@@ -741,9 +752,12 @@ export class ToolExecutor {
741
752
  child.once("close", (code) => finish(code));
742
753
  });
743
754
  }
744
- async askUser(questions, toolCallId) {
755
+ async askUser(questions, toolCallId, context) {
745
756
  if (this.askUserHandler) {
746
- return this.askUserHandler(toolCallId, questions);
757
+ return this.askUserHandler(toolCallId, questions, context ? {
758
+ ...context,
759
+ signal: this.signal || context.signal,
760
+ } : undefined);
747
761
  }
748
762
  // ask_user is not offered in non-interactive sessions; if the model still
749
763
  // emits it (e.g. resumed history or a hallucinated call), report an error
@@ -864,9 +878,17 @@ export class ToolExecutor {
864
878
  mimeTypes[extension] ||
865
879
  "application/octet-stream";
866
880
  if (kind === "image") {
881
+ const prepared = await prepareImageForModel(data, mimeType);
882
+ if (!prepared.dataUri) {
883
+ return {
884
+ status: "error",
885
+ message: `Image could not be provided to the model: ${rawPath} ` +
886
+ `(${prepared.omittedReason || "exceeds the inline image limits"}).`,
887
+ };
888
+ }
867
889
  this.pendingVisualContent.set(toolCallId, [
868
890
  {
869
- image: `data:${mimeType};base64,${data.toString("base64")}`,
891
+ image: prepared.dataUri,
870
892
  },
871
893
  ]);
872
894
  return [{ type: "text", text: imageResultPlaceholder }];
@@ -885,52 +907,7 @@ export class ToolExecutor {
885
907
  return { status: "success" };
886
908
  }
887
909
  async webSearch(query, depth) {
888
- const model = process.env.ARENA_WEB_SEARCH_MODEL || "qwen-plus";
889
- const searchStrategy = depth === "1" ? "turbo" : "max";
890
- const payload = await dashScopeJson("api", "/services/aigc/text-generation/generation", {
891
- method: "POST",
892
- headers: { "content-type": "application/json" },
893
- body: JSON.stringify({
894
- model,
895
- input: {
896
- messages: [{ role: "user", content: query }],
897
- },
898
- parameters: {
899
- enable_search: true,
900
- result_format: "message",
901
- search_options: {
902
- forced_search: true,
903
- enable_source: true,
904
- enable_citation: true,
905
- citation_format: "[<number>]",
906
- search_strategy: searchStrategy,
907
- },
908
- },
909
- }),
910
- signal: this.signal,
911
- }, "web_search");
912
- const output = record(payload.output);
913
- const searchInfo = record(output.search_info);
914
- const searchResults = Array.isArray(searchInfo.search_results)
915
- ? searchInfo.search_results
916
- : [];
917
- const limit = { "1": 3, "2": 5, "3": 8 }[depth] || 5;
918
- // 参考轨迹条目:{id, url, title, description[, pageAge]};
919
- // DashScope 无 pageAge,按可选键省略。
920
- return {
921
- status: "success",
922
- results: searchResults.slice(0, limit).map((value, index) => {
923
- const item = record(value);
924
- return {
925
- id: Number(item.index) || index + 1,
926
- url: stringValue(item.url),
927
- title: stringValue(item.title),
928
- description: stringValue(item.content) ||
929
- stringValue(item.snippet) ||
930
- stringValue(item.summary),
931
- };
932
- }),
933
- };
910
+ return executeBraveWebSearch(query, depth, { signal: this.signal });
934
911
  }
935
912
  async imageSearch(query, count) {
936
913
  const model = process.env.ARENA_IMAGE_SEARCH_MODEL || "qwen3.7-plus";
@@ -1199,4 +1176,32 @@ export class ToolExecutor {
1199
1176
  };
1200
1177
  }
1201
1178
  }
1179
+ /**
1180
+ * Mode-aware tool facade. The Arena executor stays byte-compatible with the
1181
+ * existing harness, while the three Code Arena modes use their captured tool
1182
+ * contracts and implementations behind the same agent-loop interface.
1183
+ */
1184
+ export class ToolExecutor {
1185
+ implementation;
1186
+ constructor(config, options = {}) {
1187
+ this.implementation = isCodeArenaMode(config.mode)
1188
+ ? new CodeToolExecutor(config, options)
1189
+ : new ArenaToolExecutor(config, options);
1190
+ }
1191
+ get workspace() {
1192
+ return this.implementation.workspace;
1193
+ }
1194
+ get askUserEnabled() {
1195
+ return this.implementation.askUserEnabled;
1196
+ }
1197
+ availableTools() {
1198
+ return this.implementation.availableTools();
1199
+ }
1200
+ execute(call, context) {
1201
+ return this.implementation.execute(call, context);
1202
+ }
1203
+ takeVisualMessage(toolCallIds) {
1204
+ return this.implementation.takeVisualMessage(toolCallIds);
1205
+ }
1206
+ }
1202
1207
  //# sourceMappingURL=tools.js.map