@qwen-code/arena-agent 0.0.10-dev.8-test.0 → 0.0.10-test.0
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.
- package/.env.example +61 -10
- package/CHANGELOG.md +148 -17
- package/README.md +309 -46
- package/dist/agent.d.ts +20 -6
- package/dist/agent.js +353 -72
- package/dist/agent.js.map +1 -1
- package/dist/anthropic.d.ts +1 -1
- package/dist/anthropic.js +46 -57
- package/dist/anthropic.js.map +1 -1
- package/dist/arena-history.d.ts +12 -0
- package/dist/arena-history.js +119 -0
- package/dist/arena-history.js.map +1 -0
- package/dist/ask-user.js +44 -2
- package/dist/ask-user.js.map +1 -1
- package/dist/attachment-limits.d.ts +4 -0
- package/dist/attachment-limits.js +10 -0
- package/dist/attachment-limits.js.map +1 -0
- package/dist/attachments.d.ts +4 -2
- package/dist/attachments.js +9 -11
- package/dist/attachments.js.map +1 -1
- package/dist/brave-search.js +11 -7
- package/dist/brave-search.js.map +1 -1
- package/dist/canonical-data.d.ts +9 -0
- package/dist/canonical-data.js +12 -3
- package/dist/canonical-data.js.map +1 -1
- package/dist/cli.js +140 -40
- package/dist/cli.js.map +1 -1
- package/dist/code-tool-schema.d.ts +3 -0
- package/dist/code-tool-schema.js +92 -0
- package/dist/code-tool-schema.js.map +1 -0
- package/dist/code-tools.d.ts +2 -1
- package/dist/code-tools.js +103 -31
- package/dist/code-tools.js.map +1 -1
- package/dist/compaction-threshold.d.ts +3 -0
- package/dist/compaction-threshold.js +6 -0
- package/dist/compaction-threshold.js.map +1 -0
- package/dist/compaction.d.ts +24 -7
- package/dist/compaction.js +242 -66
- package/dist/compaction.js.map +1 -1
- package/dist/config.d.ts +17 -0
- package/dist/config.js +30 -5
- package/dist/config.js.map +1 -1
- package/dist/connector-errors.d.ts +16 -0
- package/dist/connector-errors.js +69 -0
- package/dist/connector-errors.js.map +1 -0
- package/dist/connector-files.d.ts +31 -0
- package/dist/connector-files.js +249 -0
- package/dist/connector-files.js.map +1 -0
- package/dist/connector-input.d.ts +10 -0
- package/dist/connector-input.js +79 -0
- package/dist/connector-input.js.map +1 -0
- package/dist/connector-mcp.d.ts +60 -0
- package/dist/connector-mcp.js +474 -0
- package/dist/connector-mcp.js.map +1 -0
- package/dist/connectors.d.ts +13 -0
- package/dist/connectors.js +69 -0
- package/dist/connectors.js.map +1 -0
- package/dist/fetch-page.js +2 -2
- package/dist/fetch-page.js.map +1 -1
- package/dist/history.d.ts +16 -5
- package/dist/history.js +73 -14
- package/dist/history.js.map +1 -1
- package/dist/image-choice.d.ts +23 -0
- package/dist/image-choice.js +190 -0
- package/dist/image-choice.js.map +1 -0
- package/dist/image-input-fallback.js +5 -0
- package/dist/image-input-fallback.js.map +1 -1
- package/dist/image-model.d.ts +6 -0
- package/dist/image-model.js +32 -0
- package/dist/image-model.js.map +1 -0
- package/dist/midturn-checkpoint-hook.d.ts +14 -1
- package/dist/midturn-checkpoint-hook.js.map +1 -1
- package/dist/mode.js +1 -1
- package/dist/mode.js.map +1 -1
- package/dist/model-capabilities.js +18 -8
- package/dist/model-capabilities.js.map +1 -1
- package/dist/model-router-media.js +55 -3
- package/dist/model-router-media.js.map +1 -1
- package/dist/model-stream.d.ts +16 -0
- package/dist/model-stream.js +129 -0
- package/dist/model-stream.js.map +1 -0
- package/dist/openai-responses.d.ts +2 -1
- package/dist/openai-responses.js +85 -88
- package/dist/openai-responses.js.map +1 -1
- package/dist/process-manager.js +9 -9
- package/dist/process-manager.js.map +1 -1
- package/dist/prompts.d.ts +0 -2
- package/dist/prompts.js +10 -60
- package/dist/prompts.js.map +1 -1
- package/dist/protocol.d.ts +5 -1
- package/dist/protocol.js +23 -2
- package/dist/protocol.js.map +1 -1
- package/dist/provider.d.ts +18 -0
- package/dist/provider.js +120 -51
- package/dist/provider.js.map +1 -1
- package/dist/repo.d.ts +1 -1
- package/dist/repo.js +26 -4
- package/dist/repo.js.map +1 -1
- package/dist/routify-web-fetch.js +2 -2
- package/dist/routify-web-fetch.js.map +1 -1
- package/dist/server.js +55 -27
- package/dist/server.js.map +1 -1
- package/dist/session-memory-prompts.d.ts +3 -1
- package/dist/session-memory-prompts.js +4 -2
- package/dist/session-memory-prompts.js.map +1 -1
- package/dist/side-query.js +5 -0
- package/dist/side-query.js.map +1 -1
- package/dist/spec.d.ts +5 -4
- package/dist/spec.js +31 -23
- package/dist/spec.js.map +1 -1
- package/dist/startup-config.d.ts +39 -0
- package/dist/startup-config.js +347 -0
- package/dist/startup-config.js.map +1 -0
- package/dist/startup-main-config.d.ts +63 -0
- package/dist/startup-main-config.js +94 -0
- package/dist/startup-main-config.js.map +1 -0
- package/dist/startup-tool-config.d.ts +8 -0
- package/dist/startup-tool-config.js +116 -0
- package/dist/startup-tool-config.js.map +1 -0
- package/dist/summary-compaction.d.ts +29 -0
- package/dist/{legacy-compaction.js → summary-compaction.js} +79 -14
- package/dist/summary-compaction.js.map +1 -0
- package/dist/tools.d.ts +5 -1
- package/dist/tools.js +195 -68
- package/dist/tools.js.map +1 -1
- package/dist/tui.js +26 -6
- package/dist/tui.js.map +1 -1
- package/dist/types.d.ts +21 -1
- package/dist/web/app.js +30 -5
- package/dist/web/app.js.map +1 -1
- package/dist/workspace.js +61 -13
- package/dist/workspace.js.map +1 -1
- package/docs/BINARY_DISTRIBUTION.md +44 -8
- package/docs/MODES_AND_RELEASES.md +79 -6
- package/docs/SDK.md +1 -0
- package/modes/code-arena/capture-provenance.json +57 -0
- package/modes/code-arena/full-stack/dependencies.lock.json +8670 -0
- package/modes/code-arena/full-stack/system-prompt.txt +1 -1
- package/modes/code-arena/full-stack/template/eslint.config.mjs +3 -4
- package/modes/code-arena/full-stack/template/postcss.config.mjs +2 -2
- package/modes/code-arena/full-stack/tools.json +186 -186
- package/modes/code-arena/html/system-prompt.txt +1 -1
- package/modes/code-arena/html/tools.json +123 -123
- package/modes/code-arena/react/dependencies.lock.json +2707 -0
- package/modes/code-arena/react/system-prompt.txt +4 -3
- package/modes/code-arena/react/tools.json +178 -184
- package/package.json +7 -2
- package/scripts/README.md +23 -4
- package/web/styles.css +22 -0
- package/dist/legacy-compaction.d.ts +0 -16
- package/dist/legacy-compaction.js.map +0 -1
package/dist/config.js
CHANGED
|
@@ -1,8 +1,18 @@
|
|
|
1
1
|
import os from "node:os";
|
|
2
2
|
import path from "node:path";
|
|
3
|
+
import { agentArenaCompactionThreshold } from "./compaction-threshold.js";
|
|
4
|
+
import { connectorsFromEnv, connectedConnectorsFromEnv } from "./connectors.js";
|
|
5
|
+
import { mergeConnectorConfigFromEnv } from "./connector-mcp.js";
|
|
3
6
|
export { modelInputCapabilities, normalizeModelId, supportsImageInput, supportsModelInput, } from "./model-capabilities.js";
|
|
4
7
|
import { defaultStepLimit, isCodeArenaMode, parseHarnessMode, } from "./mode.js";
|
|
5
8
|
import { modelSpec } from "./spec.js";
|
|
9
|
+
function parseCompactionMode(value) {
|
|
10
|
+
if (value === undefined || value === "rolling")
|
|
11
|
+
return "rolling";
|
|
12
|
+
if (value === "summary")
|
|
13
|
+
return "summary";
|
|
14
|
+
throw new Error("ARENA_COMPACTION_MODE must be rolling or summary");
|
|
15
|
+
}
|
|
6
16
|
function booleanValue(value, fallback) {
|
|
7
17
|
if (value === undefined)
|
|
8
18
|
return fallback;
|
|
@@ -210,6 +220,12 @@ export function configFromEnv(workspace = process.cwd(), modeOverride) {
|
|
|
210
220
|
process.env.CODE_HARNESS_MODE ||
|
|
211
221
|
process.env.ARENA_MODE);
|
|
212
222
|
const source = modelSpec(mode);
|
|
223
|
+
const connectors = isCodeArenaMode(mode) ? [] : connectorsFromEnv(process.env.ARENA_CONNECTORS);
|
|
224
|
+
const connectedConnectors = isCodeArenaMode(mode) ? undefined : connectedConnectorsFromEnv(process.env.ARENA_CONNECTED_CONNECTORS);
|
|
225
|
+
const compactionMode = isCodeArenaMode(mode) ? "summary"
|
|
226
|
+
: parseCompactionMode(process.env.ARENA_COMPACTION_MODE);
|
|
227
|
+
const contextWindow = positiveNumber(process.env.ARENA_CONTEXT_WINDOW, 1_000_000, true);
|
|
228
|
+
const contextCompactionRatio = ratio(process.env.ARENA_CONTEXT_COMPACTION_RATIO, isCodeArenaMode(mode) ? 0.7 : 0.8);
|
|
213
229
|
const model = process.env.OPENAI_MODEL ||
|
|
214
230
|
process.env.ARENA_MODEL ||
|
|
215
231
|
"openai/qwen-latest-series-invite-beta-v92";
|
|
@@ -225,26 +241,35 @@ export function configFromEnv(workspace = process.cwd(), modeOverride) {
|
|
|
225
241
|
apiBase: process.env.OPENAI_BASE_URL || process.env.ARENA_API_BASE || undefined,
|
|
226
242
|
apiKey: process.env.OPENAI_API_KEY || process.env.ARENA_API_KEY || undefined,
|
|
227
243
|
openaiApi: openaiApi(process.env.ARENA_OPENAI_API),
|
|
244
|
+
responsesReplayReasoningState: booleanValue(process.env.ARENA_RESPONSES_REPLAY_REASONING_STATE, true),
|
|
228
245
|
maxTurns: process.env.ARENA_MAX_TURNS
|
|
229
|
-
? positiveNumber(process.env.ARENA_MAX_TURNS, 500, true)
|
|
246
|
+
? positiveNumber(process.env.ARENA_MAX_TURNS, isCodeArenaMode(mode) ? 500 : 250, true)
|
|
230
247
|
: isCodeArenaMode(mode)
|
|
231
248
|
? positiveNumber(process.env.CODE_HARNESS_MAX_STEPS ||
|
|
232
249
|
process.env.ARENA_MAX_AGENT_STEPS, defaultStepLimit(mode), true)
|
|
233
|
-
:
|
|
250
|
+
: defaultStepLimit(mode),
|
|
234
251
|
maxTokens: Number(process.env.ARENA_MAX_TOKENS || source.max_tokens),
|
|
235
252
|
temperature: nonNegativeNumber(process.env.ARENA_TEMPERATURE, 1),
|
|
236
253
|
reasoningEffort: reasoningEffort(process.env.ARENA_REASONING_EFFORT),
|
|
237
254
|
toolChoice: process.env.ARENA_TOOL_CHOICE || "auto",
|
|
238
255
|
disallowedTools: stringArray(process.env.ARENA_DISALLOWED_TOOLS, "ARENA_DISALLOWED_TOOLS"),
|
|
256
|
+
connectors,
|
|
257
|
+
connectedConnectors,
|
|
258
|
+
mergeConnectors: connectors.length || connectedConnectors !== undefined ? mergeConnectorConfigFromEnv() : undefined,
|
|
239
259
|
extraBody: jsonObject(process.env.ARENA_EXTRA_BODY, "ARENA_EXTRA_BODY"),
|
|
240
260
|
enableThinking,
|
|
241
261
|
thinkingBudget,
|
|
242
262
|
preserveThinking: booleanValue(process.env.ARENA_PRESERVE_THINKING, true),
|
|
243
263
|
excludeQwenFromSystemPrompt: booleanValue(process.env.ARENA_EXCLUDE_QWEN_FROM_SYSTEM_PROMPT, false),
|
|
244
|
-
contextWindow
|
|
245
|
-
|
|
264
|
+
contextWindow,
|
|
265
|
+
compactionMode,
|
|
266
|
+
contextCompactionRatio,
|
|
267
|
+
...(isCodeArenaMode(mode) ? {} : {
|
|
268
|
+
compactionThresholdTokens: agentArenaCompactionThreshold(contextWindow, contextCompactionRatio),
|
|
269
|
+
}),
|
|
270
|
+
restoreSessionMemory: booleanValue(process.env.ARENA_RESTORE_SESSION_MEMORY, true),
|
|
246
271
|
memoryUpdateTokens: positiveNumber(process.env.ARENA_MEMORY_UPDATE_TOKENS, 24_000, true),
|
|
247
|
-
compactionSummaryMaxTokens: positiveNumber(process.env.ARENA_COMPACTION_SUMMARY_MAX_TOKENS,
|
|
272
|
+
compactionSummaryMaxTokens: positiveNumber(process.env.ARENA_COMPACTION_SUMMARY_MAX_TOKENS, compactionMode === "summary" ? 8192 : 131072, true),
|
|
248
273
|
modelMaxRetries: nonNegativeNumber(process.env.ARENA_MODEL_MAX_RETRIES, 10, true),
|
|
249
274
|
modelRetryBaseMs: nonNegativeNumber(process.env.ARENA_MODEL_RETRY_BASE_MS, 1000),
|
|
250
275
|
modelRetryMaxMs: nonNegativeNumber(process.env.ARENA_MODEL_RETRY_MAX_MS, 120_000),
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { CallToolResult } from "@modelcontextprotocol/sdk/types.js";
|
|
2
|
+
export type ConnectorErrorCode = "invalid_request" | "provider_unavailable" | "unknown" | "file_transfer_failed";
|
|
3
|
+
export interface ConnectorFailure {
|
|
4
|
+
code: ConnectorErrorCode;
|
|
5
|
+
error: string;
|
|
6
|
+
}
|
|
7
|
+
export declare const connectorRepeatGuidance = "Do not repeat this exact call. If the error names an input to correct, change only that input. Otherwise, tell the user what happened.";
|
|
8
|
+
export declare function connectorErrorText(failure: ConnectorFailure): string;
|
|
9
|
+
export declare function repeatedConnectorFailure(code: ConnectorErrorCode): ConnectorFailure;
|
|
10
|
+
/** Conservative effect classification; SQL execution can mutate even through a CTE. */
|
|
11
|
+
export declare function connectorWrites(name: string): boolean;
|
|
12
|
+
export declare function completedConnectorWrite(running: boolean): ConnectorFailure;
|
|
13
|
+
/** Inspect provider error envelopes, never words inside successful document data. */
|
|
14
|
+
export declare function connectorResultFailure(result: CallToolResult, write: boolean, name?: string): ConnectorFailure | undefined;
|
|
15
|
+
/** Prefixes and guidance are captured; provider details are capped at 400 code points. */
|
|
16
|
+
export declare function describeConnectorFailure(reason: string, write: boolean, rawCode?: unknown, rawStatus?: unknown): ConnectorFailure;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
export const connectorRepeatGuidance = "Do not repeat this exact call. If the error names an input to correct, change only that input. Otherwise, tell the user what happened.";
|
|
2
|
+
const invalidGuidance = "Do not repeat this exact call. Change the arguments, or tell the user what happened.";
|
|
3
|
+
const writeGuidance = "The call may have already taken effect. Do not repeat it. Check the state in the app first.";
|
|
4
|
+
export function connectorErrorText(failure) {
|
|
5
|
+
return JSON.stringify({ status: "error", code: failure.code, error: failure.error });
|
|
6
|
+
}
|
|
7
|
+
export function repeatedConnectorFailure(code) {
|
|
8
|
+
return { code, error: "This exact call already failed in this reply, so Arena did not send it again. " +
|
|
9
|
+
(code === "invalid_request" ? invalidGuidance : connectorRepeatGuidance) };
|
|
10
|
+
}
|
|
11
|
+
/** Conservative effect classification; SQL execution can mutate even through a CTE. */
|
|
12
|
+
export function connectorWrites(name) {
|
|
13
|
+
const tool = name.split("__")[1] || name;
|
|
14
|
+
return !/^(get_|list_|search(?:_|$)|query_|find_|read_|download_|export_|validate_|check_|batch_get_|count_)/.test(tool);
|
|
15
|
+
}
|
|
16
|
+
export function completedConnectorWrite(running) {
|
|
17
|
+
return { code: "unknown", error: running
|
|
18
|
+
? "This exact write is still running in this reply, so Arena did not send it again. Wait for the first call to finish before you act on its result."
|
|
19
|
+
: "This exact write already completed in this reply, so Arena did not send it again. Use the first result." };
|
|
20
|
+
}
|
|
21
|
+
function object(value) {
|
|
22
|
+
return value !== null && typeof value === "object" && !Array.isArray(value) ? value : undefined;
|
|
23
|
+
}
|
|
24
|
+
/** Inspect provider error envelopes, never words inside successful document data. */
|
|
25
|
+
export function connectorResultFailure(result, write, name) {
|
|
26
|
+
for (const part of result.content) {
|
|
27
|
+
if (part.type !== "text")
|
|
28
|
+
continue;
|
|
29
|
+
let body;
|
|
30
|
+
try {
|
|
31
|
+
body = object(JSON.parse(part.text));
|
|
32
|
+
}
|
|
33
|
+
catch { /* MCP errors may be plain text. */ }
|
|
34
|
+
// The capture returns extraction availability as data, including
|
|
35
|
+
// success:false / extraction_status:failed|unsupported / error:null.
|
|
36
|
+
const extractionReport = name === "google_drive__read_file_text" && body?.error === null
|
|
37
|
+
&& ["failed", "unsupported"].includes(String(body?.extraction_status));
|
|
38
|
+
if (result.isError || (!extractionReport && body?.success === false) || body?.status === "error" || body?.error_code || body?.error_reason || body?.error) {
|
|
39
|
+
const nested = object(body?.error);
|
|
40
|
+
const reason = body?.error_reason ?? nested?.message ?? nested?.error_reason ?? body?.error ?? body?.message;
|
|
41
|
+
const detail = typeof reason === "string" ? reason : result.isError ? part.text : "The provider returned an error.";
|
|
42
|
+
return describeConnectorFailure(detail, write, body?.error_code ?? nested?.code, body?.status_code ?? nested?.status_code);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
if (result.isError)
|
|
46
|
+
return describeConnectorFailure("The provider returned an error.", write);
|
|
47
|
+
return undefined;
|
|
48
|
+
}
|
|
49
|
+
/** Prefixes and guidance are captured; provider details are capped at 400 code points. */
|
|
50
|
+
export function describeConnectorFailure(reason, write, rawCode, rawStatus) {
|
|
51
|
+
const detailChars = Array.from(reason);
|
|
52
|
+
const detail = detailChars.slice(0, 400).join("") + (detailChars.length > 400 ? "…" : "");
|
|
53
|
+
const code = String(rawCode || "").toLowerCase();
|
|
54
|
+
const status = Number(rawStatus) || Number(/\b(400|401|403|404|409|422|429|5\d\d)\b/.exec(reason)?.[1]);
|
|
55
|
+
if (status === 404 || /not_found|notfound/.test(code)) {
|
|
56
|
+
return { code: "invalid_request", error: `The app could not find the target for this call. The app reported: ${detail} Use the exact target ID from a list or search result, or from the user. Never reconstruct or modify it. Find the target again by name or another supported attribute with a list or search tool. Copy the returned ID exactly. Do not repeat the identical failed call or change unrelated arguments to bypass the block. If access still fails, explain the issue or use ask_user when clarification is necessary.` };
|
|
57
|
+
}
|
|
58
|
+
if (status === 401 || status === 403 || /permission|access_denied|forbidden|unauthorized/.test(code)) {
|
|
59
|
+
return { code: "invalid_request", error: `The app denied access for this call. The app reported: ${detail} Do not repeat this exact call. Other arguments or flags for the same target do not fix an access denial. Tell the user what happened.` };
|
|
60
|
+
}
|
|
61
|
+
if ([400, 409, 422].includes(status) || /invalid|validation|bad_request|unsupported_operation/.test(code)) {
|
|
62
|
+
return { code: "invalid_request", error: `The app rejected the arguments for this tool. The app reported: ${detail} ${invalidGuidance}` };
|
|
63
|
+
}
|
|
64
|
+
const unavailable = status === 429 || status >= 500 || /unavailable|timeout|rate_limit|credential/.test(code)
|
|
65
|
+
|| /credential refresh|timed? out|timeout/i.test(reason);
|
|
66
|
+
return { code: unavailable ? "provider_unavailable" : "unknown",
|
|
67
|
+
error: `${unavailable ? "The app is unavailable." : "The tool call failed."} The app reported: ${detail} ${write ? writeGuidance : connectorRepeatGuidance}` };
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=connector-errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connector-errors.js","sourceRoot":"","sources":["../src/connector-errors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { CallToolResult } from "@modelcontextprotocol/sdk/types.js";
|
|
2
|
+
import type { MergeConnectorConfig } from "./connector-mcp.js";
|
|
3
|
+
export declare const connectorFileLimit = 104857600;
|
|
4
|
+
export declare const connectorUploadTools: Set<string>;
|
|
5
|
+
export declare const connectorDownloadTools: Set<string>;
|
|
6
|
+
export declare class ConnectorFileError extends Error {
|
|
7
|
+
readonly cacheFailure: boolean;
|
|
8
|
+
constructor(message: string, cacheFailure?: boolean);
|
|
9
|
+
}
|
|
10
|
+
export declare function oversizedConnectorDownload(size: number): ConnectorFileError;
|
|
11
|
+
export declare function connectorApiBase(config: MergeConnectorConfig): URL;
|
|
12
|
+
export declare function connectorResultObjects(result: CallToolResult): Record<string, any>[];
|
|
13
|
+
export interface ConnectorFileOptions {
|
|
14
|
+
workspace?: string;
|
|
15
|
+
resolvePath?: (raw: string) => Promise<string>;
|
|
16
|
+
}
|
|
17
|
+
/** File bytes go through Merge's files API, never through the model context. */
|
|
18
|
+
export declare class ConnectorFiles {
|
|
19
|
+
private readonly config;
|
|
20
|
+
private readonly options;
|
|
21
|
+
private readonly signal?;
|
|
22
|
+
private uploadBlocked?;
|
|
23
|
+
constructor(config: MergeConnectorConfig, options: ConnectorFileOptions, signal?: AbortSignal | undefined);
|
|
24
|
+
reset(): void;
|
|
25
|
+
restoreFailure(message: string): void;
|
|
26
|
+
private requestSignal;
|
|
27
|
+
private fileUrl;
|
|
28
|
+
private uploadFailure;
|
|
29
|
+
upload(name: string, args: Record<string, any>): Promise<Record<string, any>>;
|
|
30
|
+
download(name: string, result: CallToolResult, args: Record<string, any>): Promise<string | undefined>;
|
|
31
|
+
}
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
import { constants } from "node:fs";
|
|
2
|
+
import { mkdir, open, rename, rm } from "node:fs/promises";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { randomUUID } from "node:crypto";
|
|
5
|
+
import mime from "mime/lite";
|
|
6
|
+
import { connectorRepeatGuidance } from "./connector-errors.js";
|
|
7
|
+
export const connectorFileLimit = 104_857_600;
|
|
8
|
+
export const connectorUploadTools = new Set(["google_drive__upload_file", "dropbox__upload_file", "gmail__create_draft"]);
|
|
9
|
+
export const connectorDownloadTools = new Set(["google_drive__download_file", "google_drive__export_file", "dropbox__get_file_content", "gmail__get_attachment"]);
|
|
10
|
+
export class ConnectorFileError extends Error {
|
|
11
|
+
cacheFailure;
|
|
12
|
+
constructor(message, cacheFailure = false) {
|
|
13
|
+
super(message);
|
|
14
|
+
this.cacheFailure = cacheFailure;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export function oversizedConnectorDownload(size) {
|
|
18
|
+
return new ConnectorFileError(`Arena did not send this download. File metadata reports ${size} bytes, more than the 100 MiB (104857600 byte) workspace file limit. Tell the user that the file is too large. Share its Drive link if available.`, true);
|
|
19
|
+
}
|
|
20
|
+
export function connectorApiBase(config) {
|
|
21
|
+
const url = new URL(config.apiBase || "https://ah-api.merge.dev");
|
|
22
|
+
const loopback = ["localhost", "127.0.0.1", "[::1]"].includes(url.hostname);
|
|
23
|
+
if ((url.protocol !== "https:" && !(url.protocol === "http:" && loopback)) ||
|
|
24
|
+
url.username || url.password || url.search || url.hash) {
|
|
25
|
+
throw new Error("ARENA_MERGE_API_BASE must be an HTTPS origin (HTTP loopback is allowed for testing)");
|
|
26
|
+
}
|
|
27
|
+
return url;
|
|
28
|
+
}
|
|
29
|
+
export function connectorResultObjects(result) {
|
|
30
|
+
return result.content.flatMap(part => {
|
|
31
|
+
if (part.type !== "text")
|
|
32
|
+
return [];
|
|
33
|
+
try {
|
|
34
|
+
const value = JSON.parse(part.text);
|
|
35
|
+
return value && typeof value === "object" && !Array.isArray(value) ? [value] : [];
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return [];
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
/** File bytes go through Merge's files API, never through the model context. */
|
|
43
|
+
export class ConnectorFiles {
|
|
44
|
+
config;
|
|
45
|
+
options;
|
|
46
|
+
signal;
|
|
47
|
+
uploadBlocked;
|
|
48
|
+
constructor(config, options, signal) {
|
|
49
|
+
this.config = config;
|
|
50
|
+
this.options = options;
|
|
51
|
+
this.signal = signal;
|
|
52
|
+
}
|
|
53
|
+
reset() { this.uploadBlocked = undefined; }
|
|
54
|
+
restoreFailure(message) {
|
|
55
|
+
if (message.startsWith("Merge is rate-limiting file uploads."))
|
|
56
|
+
this.uploadBlocked = message;
|
|
57
|
+
}
|
|
58
|
+
requestSignal() {
|
|
59
|
+
const timeout = AbortSignal.timeout(this.config.timeoutMs ?? 60_000);
|
|
60
|
+
return this.signal ? AbortSignal.any([this.signal, timeout]) : timeout;
|
|
61
|
+
}
|
|
62
|
+
fileUrl(raw, action) {
|
|
63
|
+
const base = connectorApiBase(this.config), url = new URL(raw);
|
|
64
|
+
const prefix = `${base.pathname.replace(/\/$/, "")}/api/v1/files/`;
|
|
65
|
+
// The files service returns authenticated same-origin URLs. Never forward
|
|
66
|
+
// the access key to a connector-supplied host or through a redirect.
|
|
67
|
+
if (url.origin !== base.origin || !url.pathname.startsWith(prefix) || !url.pathname.endsWith(`/${action}/`)
|
|
68
|
+
|| url.username || url.password || url.search || url.hash)
|
|
69
|
+
throw new ConnectorFileError("The connector returned an invalid file-transfer URL.");
|
|
70
|
+
return url;
|
|
71
|
+
}
|
|
72
|
+
async uploadFailure(response, rawPath) {
|
|
73
|
+
if (response.status === 429) {
|
|
74
|
+
const seconds = Math.max(1, Number(response.headers.get("retry-after")) || 15);
|
|
75
|
+
this.uploadBlocked = `Merge is rate-limiting file uploads. Arena did not send this file to the app. Do not upload more files in this reply. Tell the user that the upload limit was reached, and that they can try again in at least ${seconds} seconds.`;
|
|
76
|
+
throw new ConnectorFileError(this.uploadBlocked);
|
|
77
|
+
}
|
|
78
|
+
const text = await response.text();
|
|
79
|
+
if (/security.{0,30}(?:filter|block)|content.{0,30}block|guardrail/i.test(text)) {
|
|
80
|
+
throw new ConnectorFileError(`A security filter at the connector provider blocked the file at ${JSON.stringify(rawPath)} because of its content. The file was not sent. Do not send this content again, and do not change it to get past the filter. Tell the user that the connector provider blocked it.`, true);
|
|
81
|
+
}
|
|
82
|
+
throw new ConnectorFileError(`Arena could not upload the workspace file (HTTP ${response.status}), so it did not send the file to the app. ${connectorRepeatGuidance}`);
|
|
83
|
+
}
|
|
84
|
+
async upload(name, args) {
|
|
85
|
+
const input = args.input;
|
|
86
|
+
if (!connectorUploadTools.has(name) || !input || typeof input.file_path !== "string")
|
|
87
|
+
return args;
|
|
88
|
+
if (this.uploadBlocked)
|
|
89
|
+
throw new ConnectorFileError(this.uploadBlocked);
|
|
90
|
+
const rawPath = input.file_path;
|
|
91
|
+
let handle;
|
|
92
|
+
let phase = "read";
|
|
93
|
+
try {
|
|
94
|
+
if (!this.options.resolvePath)
|
|
95
|
+
throw new Error("No workspace resolver");
|
|
96
|
+
const target = await this.options.resolvePath(rawPath);
|
|
97
|
+
handle = await open(target, constants.O_RDONLY | constants.O_NOFOLLOW);
|
|
98
|
+
const metadata = await handle.stat();
|
|
99
|
+
if (!metadata.isFile())
|
|
100
|
+
throw new Error("Not a regular file");
|
|
101
|
+
if (!metadata.size)
|
|
102
|
+
throw new ConnectorFileError(`The file at ${JSON.stringify(rawPath)} is empty. The app rejects an empty file.`);
|
|
103
|
+
if (metadata.size > connectorFileLimit)
|
|
104
|
+
throw new ConnectorFileError(`The file at ${JSON.stringify(rawPath)} is larger than the 100 MiB (104857600 byte) workspace file limit. Arena did not send it to the app. Compress or split the file, or tell the user that it is too large.`);
|
|
105
|
+
const filename = path.basename(target), contentType = input.content_mime_type || mime.getType(filename) || "application/octet-stream";
|
|
106
|
+
const base = connectorApiBase(this.config);
|
|
107
|
+
base.pathname = `${base.pathname.replace(/\/$/, "")}/api/v1/files/`;
|
|
108
|
+
const headers = { Authorization: `Bearer ${this.config.accessKey}`, "Content-Type": "application/json" };
|
|
109
|
+
phase = "upload";
|
|
110
|
+
const reservation = await fetch(base, { method: "POST", headers, body: JSON.stringify({ filename, content_type: contentType, size_bytes: metadata.size }),
|
|
111
|
+
signal: this.requestSignal(), redirect: "error" });
|
|
112
|
+
if (!reservation.ok)
|
|
113
|
+
await this.uploadFailure(reservation, rawPath);
|
|
114
|
+
const slot = await reservation.json();
|
|
115
|
+
if (!slot.file_reference || !slot.upload?.url || slot.upload.method !== "PUT")
|
|
116
|
+
throw new ConnectorFileError("The connector provider returned an invalid upload reservation.");
|
|
117
|
+
if (slot.max_size_bytes !== undefined && metadata.size > slot.max_size_bytes)
|
|
118
|
+
throw new ConnectorFileError("The workspace file exceeds the connector provider's upload limit.");
|
|
119
|
+
const stream = handle.createReadStream({ autoClose: false, end: metadata.size - 1 });
|
|
120
|
+
let uploaded;
|
|
121
|
+
try {
|
|
122
|
+
uploaded = await fetch(this.fileUrl(slot.upload.url, "upload"), { method: "PUT", headers: { Authorization: headers.Authorization,
|
|
123
|
+
"Content-Type": contentType, "Content-Length": String(metadata.size) }, body: stream,
|
|
124
|
+
duplex: "half", signal: this.requestSignal(), redirect: "error" });
|
|
125
|
+
}
|
|
126
|
+
finally {
|
|
127
|
+
stream.destroy();
|
|
128
|
+
}
|
|
129
|
+
if (!uploaded.ok)
|
|
130
|
+
await this.uploadFailure(uploaded, rawPath);
|
|
131
|
+
const receipt = await uploaded.json();
|
|
132
|
+
if (receipt.size_bytes !== undefined && receipt.size_bytes !== metadata.size)
|
|
133
|
+
throw new ConnectorFileError("The connector provider received an incomplete file. Arena did not send it to the app.");
|
|
134
|
+
const result = structuredClone(args);
|
|
135
|
+
delete result.input.file_path;
|
|
136
|
+
result.input.file_reference = slot.file_reference;
|
|
137
|
+
if (name === "gmail__create_draft")
|
|
138
|
+
result.input.file_reference_filename = filename;
|
|
139
|
+
return result;
|
|
140
|
+
}
|
|
141
|
+
catch (error) {
|
|
142
|
+
if (this.signal?.aborted || error instanceof ConnectorFileError)
|
|
143
|
+
throw error;
|
|
144
|
+
if (phase === "upload")
|
|
145
|
+
throw new ConnectorFileError(`The workspace file upload failed before it was sent to the app. ${connectorRepeatGuidance}`);
|
|
146
|
+
if (error.code === "ENOENT")
|
|
147
|
+
throw new ConnectorFileError(`No file exists at ${JSON.stringify(rawPath)}. List the workspace to find the right path.`);
|
|
148
|
+
throw new ConnectorFileError(`Arena could not read the file from the workspace, so it did not send the file to the app. ${connectorRepeatGuidance}`);
|
|
149
|
+
}
|
|
150
|
+
finally {
|
|
151
|
+
await handle?.close();
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
async download(name, result, args) {
|
|
155
|
+
if (!connectorDownloadTools.has(name))
|
|
156
|
+
return undefined;
|
|
157
|
+
const objects = connectorResultObjects(result);
|
|
158
|
+
const payload = objects.map(value => value.data && typeof value.data === "object" ? value.data : value)
|
|
159
|
+
.find(value => value.download || (typeof value.content === "string" && value.encoding));
|
|
160
|
+
if (!payload)
|
|
161
|
+
return undefined;
|
|
162
|
+
if (!this.options.resolvePath)
|
|
163
|
+
throw new ConnectorFileError("No workspace is configured for connector file downloads.");
|
|
164
|
+
const transfer = payload.download;
|
|
165
|
+
const originalName = transfer?.filename || payload.name || payload.filename || args.input?.filename || (args.input?.path && path.posix.basename(args.input.path));
|
|
166
|
+
if (typeof originalName !== "string" || !originalName)
|
|
167
|
+
throw new ConnectorFileError("The connector did not return a file name.");
|
|
168
|
+
const filename = path.posix.basename(originalName.replaceAll("\\", "/")).replace(/[\x00-\x1f\x7f]/g, "_");
|
|
169
|
+
if (!filename || filename === "." || filename === "..")
|
|
170
|
+
throw new ConnectorFileError("The connector returned an invalid file name.");
|
|
171
|
+
const expectedSize = Number(transfer?.size_bytes ?? payload.size);
|
|
172
|
+
if (expectedSize > connectorFileLimit)
|
|
173
|
+
throw oversizedConnectorDownload(expectedSize);
|
|
174
|
+
const relative = `${name.split("__")[0]}/${filename}`;
|
|
175
|
+
let temporary;
|
|
176
|
+
let handle;
|
|
177
|
+
try {
|
|
178
|
+
const target = await this.options.resolvePath(relative);
|
|
179
|
+
await mkdir(path.dirname(target), { recursive: true });
|
|
180
|
+
// Resolve again after creating the directory; never follow a changed parent.
|
|
181
|
+
if (await this.options.resolvePath(relative) !== target)
|
|
182
|
+
throw new Error("Download directory changed");
|
|
183
|
+
temporary = path.join(path.dirname(target), `.arena-download-${randomUUID()}`);
|
|
184
|
+
handle = await open(temporary, "wx", 0o600);
|
|
185
|
+
let size = 0;
|
|
186
|
+
const append = async (chunk) => {
|
|
187
|
+
size += chunk.byteLength;
|
|
188
|
+
if (size > connectorFileLimit)
|
|
189
|
+
throw oversizedConnectorDownload(size);
|
|
190
|
+
await handle.writeFile(chunk);
|
|
191
|
+
};
|
|
192
|
+
let contentType = transfer?.content_type || payload.mime_type || payload.content_type || "application/octet-stream";
|
|
193
|
+
if (transfer) {
|
|
194
|
+
if (transfer.method !== "GET" || typeof transfer.url !== "string")
|
|
195
|
+
throw new ConnectorFileError("The connector returned an invalid download descriptor.");
|
|
196
|
+
const response = await fetch(this.fileUrl(transfer.url, "download"), { headers: { Authorization: `Bearer ${this.config.accessKey}` },
|
|
197
|
+
signal: this.requestSignal(), redirect: "error" });
|
|
198
|
+
if (!response.ok || !response.body)
|
|
199
|
+
throw new ConnectorFileError(`The connector file download failed (HTTP ${response.status}).`);
|
|
200
|
+
const length = Number(response.headers.get("content-length"));
|
|
201
|
+
if (length > connectorFileLimit) {
|
|
202
|
+
await response.body.cancel();
|
|
203
|
+
throw oversizedConnectorDownload(length);
|
|
204
|
+
}
|
|
205
|
+
contentType = transfer.content_type || response.headers.get("content-type") || contentType;
|
|
206
|
+
const reader = response.body.getReader();
|
|
207
|
+
try {
|
|
208
|
+
while (true) {
|
|
209
|
+
const next = await reader.read();
|
|
210
|
+
if (next.done)
|
|
211
|
+
break;
|
|
212
|
+
await append(next.value);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
finally {
|
|
216
|
+
await reader.cancel().catch(() => { });
|
|
217
|
+
reader.releaseLock();
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
else {
|
|
221
|
+
const encoding = String(payload.encoding).toLowerCase();
|
|
222
|
+
if (!["utf-8", "utf8", "text", "base64", "base64url"].includes(encoding))
|
|
223
|
+
throw new ConnectorFileError("The connector returned an unsupported file encoding.");
|
|
224
|
+
if (encoding.startsWith("base64") && !/^[a-zA-Z0-9+/_=\-\s]*$/.test(payload.content))
|
|
225
|
+
throw new ConnectorFileError("The connector returned invalid base64 file bytes.");
|
|
226
|
+
await append(Buffer.from(payload.content, encoding === "base64url" ? "base64url" : encoding === "base64" ? "base64" : "utf8"));
|
|
227
|
+
}
|
|
228
|
+
if (Number.isFinite(expectedSize) && expectedSize >= 0 && expectedSize !== size)
|
|
229
|
+
throw new ConnectorFileError("The connector file download is incomplete. Arena did not save a partial file.");
|
|
230
|
+
await handle.close();
|
|
231
|
+
handle = undefined;
|
|
232
|
+
this.signal?.throwIfAborted();
|
|
233
|
+
await rename(temporary, target);
|
|
234
|
+
temporary = undefined;
|
|
235
|
+
return JSON.stringify({ file_path: relative, name: filename, mime_type: contentType, size });
|
|
236
|
+
}
|
|
237
|
+
catch (error) {
|
|
238
|
+
if (this.signal?.aborted || error instanceof ConnectorFileError)
|
|
239
|
+
throw error;
|
|
240
|
+
throw new ConnectorFileError(`Arena could not save the connector file in the workspace. ${connectorRepeatGuidance}`);
|
|
241
|
+
}
|
|
242
|
+
finally {
|
|
243
|
+
await handle?.close();
|
|
244
|
+
if (temporary)
|
|
245
|
+
await rm(temporary, { force: true }).catch(() => { });
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
//# sourceMappingURL=connector-files.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connector-files.js","sourceRoot":"","sources":["../src/connector-files.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
type Schema = Record<string, any>;
|
|
2
|
+
/** Captured model schemas use anyOf for optional objects. Keep their property order. */
|
|
3
|
+
export declare function connectorSchemaValue(value: unknown, schema: Schema, root?: Schema): unknown;
|
|
4
|
+
/** Documented Notion JSON fields accept an object or a well-formed JSON string. */
|
|
5
|
+
export declare function normalizeConnectorInput(name: string, value: unknown): unknown;
|
|
6
|
+
/** The MCP schema requires explicit nullable fields that Arena omits from its model contract.
|
|
7
|
+
* Apply these only to the backend request, without changing model-visible history.
|
|
8
|
+
*/
|
|
9
|
+
export declare function connectorBackendInput(value: unknown, schema: Schema, root?: Schema): unknown;
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
const isObject = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
|
|
2
|
+
function resolve(schema, root) {
|
|
3
|
+
const seen = new Set();
|
|
4
|
+
while (typeof schema.$ref === "string" && schema.$ref.startsWith("#/") && !seen.has(schema.$ref)) {
|
|
5
|
+
seen.add(schema.$ref);
|
|
6
|
+
const target = schema.$ref.slice(2).split("/").reduce((node, key) => node?.[key.replaceAll("~1", "/").replaceAll("~0", "~")], root);
|
|
7
|
+
if (!isObject(target))
|
|
8
|
+
break;
|
|
9
|
+
const { $ref, ...rest } = schema;
|
|
10
|
+
schema = { ...target, ...rest };
|
|
11
|
+
}
|
|
12
|
+
return schema;
|
|
13
|
+
}
|
|
14
|
+
function matchesKind(value, schema, root) {
|
|
15
|
+
schema = resolve(schema, root);
|
|
16
|
+
if (schema.anyOf || schema.oneOf)
|
|
17
|
+
return (schema.anyOf || schema.oneOf).some((s) => matchesKind(value, s, root));
|
|
18
|
+
const type = schema.type;
|
|
19
|
+
if (Array.isArray(type))
|
|
20
|
+
return type.some(t => matchesKind(value, { type: t }, root));
|
|
21
|
+
return !type || (type === "null" ? value === null : type === "object" ? isObject(value)
|
|
22
|
+
: type === "array" ? Array.isArray(value) : type === "integer" ? Number.isInteger(value) : typeof value === type);
|
|
23
|
+
}
|
|
24
|
+
function branch(value, schema, root) {
|
|
25
|
+
schema = resolve(schema, root);
|
|
26
|
+
const alternatives = schema.anyOf || schema.oneOf;
|
|
27
|
+
const selected = alternatives?.find((s) => matchesKind(value, s, root));
|
|
28
|
+
return selected ? branch(value, selected, root) : schema;
|
|
29
|
+
}
|
|
30
|
+
/** Captured model schemas use anyOf for optional objects. Keep their property order. */
|
|
31
|
+
export function connectorSchemaValue(value, schema, root = schema) {
|
|
32
|
+
schema = branch(value, schema, root);
|
|
33
|
+
if (Array.isArray(value))
|
|
34
|
+
return value.map(v => connectorSchemaValue(v, schema.items || {}, root));
|
|
35
|
+
if (!isObject(value) || !schema.properties)
|
|
36
|
+
return value;
|
|
37
|
+
const entries = Object.entries(schema.properties).flatMap(([key, child]) => Object.hasOwn(value, key)
|
|
38
|
+
? [[key, connectorSchemaValue(value[key], child, root)]] : []);
|
|
39
|
+
entries.push(...Object.entries(value).filter(([key]) => !Object.hasOwn(schema.properties, key)));
|
|
40
|
+
return Object.fromEntries(entries);
|
|
41
|
+
}
|
|
42
|
+
/** Documented Notion JSON fields accept an object or a well-formed JSON string. */
|
|
43
|
+
export function normalizeConnectorInput(name, value) {
|
|
44
|
+
const result = structuredClone(value);
|
|
45
|
+
if (!isObject(result) || !isObject(result.input) || !name.startsWith("notion__"))
|
|
46
|
+
return result;
|
|
47
|
+
const fields = name === "notion__search" ? ["sort", "filter"]
|
|
48
|
+
: name === "notion__query_database" ? ["filter"]
|
|
49
|
+
: name === "notion__update_database" ? ["properties"]
|
|
50
|
+
: name === "notion__create_page" || name === "notion__update_page" ? ["properties", "children"] : [];
|
|
51
|
+
for (const field of fields)
|
|
52
|
+
if (typeof result.input[field] === "string")
|
|
53
|
+
result.input[field] = JSON.parse(result.input[field]);
|
|
54
|
+
return result;
|
|
55
|
+
}
|
|
56
|
+
/** The MCP schema requires explicit nullable fields that Arena omits from its model contract.
|
|
57
|
+
* Apply these only to the backend request, without changing model-visible history.
|
|
58
|
+
*/
|
|
59
|
+
export function connectorBackendInput(value, schema, root = schema) {
|
|
60
|
+
schema = branch(value, schema, root);
|
|
61
|
+
if ((isObject(value) || Array.isArray(value)) && !matchesKind(value, schema, root) && matchesKind("", schema, root))
|
|
62
|
+
return JSON.stringify(value);
|
|
63
|
+
if (Array.isArray(value))
|
|
64
|
+
return value.map(v => connectorBackendInput(v, schema.items || {}, root));
|
|
65
|
+
if (!isObject(value))
|
|
66
|
+
return value;
|
|
67
|
+
const result = structuredClone(value);
|
|
68
|
+
for (const [key, child] of Object.entries(schema.properties || {})) {
|
|
69
|
+
if (Object.hasOwn(result, key)) {
|
|
70
|
+
// Some connector revisions encode JSON dictionaries as strings. Adapt at
|
|
71
|
+
// that boundary only; a native object schema retains native objects.
|
|
72
|
+
result[key] = connectorBackendInput(result[key], child, root);
|
|
73
|
+
}
|
|
74
|
+
else if (schema.required?.includes(key) && matchesKind(null, child, root))
|
|
75
|
+
result[key] = null;
|
|
76
|
+
}
|
|
77
|
+
return result;
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=connector-input.js.map
|