@qwen-code/arena-agent 0.0.10-dev.9 → 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 +140 -11
- package/README.md +309 -46
- package/dist/agent.d.ts +20 -6
- package/dist/agent.js +303 -73
- 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.js +63 -26
- 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 +15 -5
- package/dist/history.js +59 -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 +30 -11
- 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 +164 -54
- 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 -14
- 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 +9 -6
- 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/html/system-prompt.txt +1 -1
- package/modes/code-arena/react/dependencies.lock.json +2707 -0
- 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
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import type { ArenaConfig } from "./config.js";
|
|
2
|
+
export declare const startupMainConfigNames: {
|
|
3
|
+
readonly mode: "ARENA_HARNESS_MODE";
|
|
4
|
+
readonly model: "OPENAI_MODEL";
|
|
5
|
+
readonly workspace: null;
|
|
6
|
+
readonly stateRoot: "ARENA_HOME";
|
|
7
|
+
readonly tenantId: "ARENA_TENANT_ID";
|
|
8
|
+
readonly apiBase: "OPENAI_BASE_URL";
|
|
9
|
+
readonly apiKey: "OPENAI_API_KEY";
|
|
10
|
+
readonly openaiApi: "ARENA_OPENAI_API";
|
|
11
|
+
readonly responsesReplayReasoningState: "ARENA_RESPONSES_REPLAY_REASONING_STATE";
|
|
12
|
+
readonly maxTurns: "ARENA_MAX_TURNS";
|
|
13
|
+
readonly maxTokens: "ARENA_MAX_TOKENS";
|
|
14
|
+
readonly temperature: "ARENA_TEMPERATURE";
|
|
15
|
+
readonly incrementalOutput: null;
|
|
16
|
+
readonly resultFormat: null;
|
|
17
|
+
readonly reasoningEffort: "ARENA_REASONING_EFFORT";
|
|
18
|
+
readonly toolChoice: "ARENA_TOOL_CHOICE";
|
|
19
|
+
readonly disallowedTools: "ARENA_DISALLOWED_TOOLS";
|
|
20
|
+
readonly connectors: "ARENA_CONNECTORS";
|
|
21
|
+
readonly connectedConnectors: "ARENA_CONNECTED_CONNECTORS";
|
|
22
|
+
readonly mergeConnectors: null;
|
|
23
|
+
readonly extraBody: "ARENA_EXTRA_BODY";
|
|
24
|
+
readonly enableThinking: "ARENA_ENABLE_THINKING";
|
|
25
|
+
readonly thinkingBudget: "ARENA_THINKING_BUDGET";
|
|
26
|
+
readonly preserveThinking: "ARENA_PRESERVE_THINKING";
|
|
27
|
+
readonly systemPrompt: null;
|
|
28
|
+
readonly appendSystemPrompt: null;
|
|
29
|
+
readonly excludeQwenFromSystemPrompt: "ARENA_EXCLUDE_QWEN_FROM_SYSTEM_PROMPT";
|
|
30
|
+
readonly contextWindow: "ARENA_CONTEXT_WINDOW";
|
|
31
|
+
readonly compactionMode: "ARENA_COMPACTION_MODE";
|
|
32
|
+
readonly restoreSessionMemory: "ARENA_RESTORE_SESSION_MEMORY";
|
|
33
|
+
readonly contextCompactionRatio: "ARENA_CONTEXT_COMPACTION_RATIO";
|
|
34
|
+
readonly compactionThresholdTokens: null;
|
|
35
|
+
readonly compactionSummaryMaxTokens: "ARENA_COMPACTION_SUMMARY_MAX_TOKENS";
|
|
36
|
+
readonly memoryUpdateTokens: "ARENA_MEMORY_UPDATE_TOKENS";
|
|
37
|
+
readonly modelMaxRetries: "ARENA_MODEL_MAX_RETRIES";
|
|
38
|
+
readonly modelRetryBaseMs: "ARENA_MODEL_RETRY_BASE_MS";
|
|
39
|
+
readonly modelRetryMaxMs: "ARENA_MODEL_RETRY_MAX_MS";
|
|
40
|
+
readonly modelRetryableStatuses: "ARENA_MODEL_RETRYABLE_STATUS_CODES";
|
|
41
|
+
readonly modelStreamIdleTimeoutMs: "ARENA_MODEL_STREAM_IDLE_TIMEOUT_MS";
|
|
42
|
+
readonly modelCallLogging: "ARENA_MODEL_CALL_LOGGING";
|
|
43
|
+
readonly modelCallLogMode: "ARENA_MODEL_CALL_LOG_MODE";
|
|
44
|
+
readonly modelSupportsImageInput: "ARENA_MODEL_SUPPORTS_IMAGE_INPUT";
|
|
45
|
+
readonly modelSupportsVideoInput: "ARENA_MODEL_SUPPORTS_VIDEO_INPUT";
|
|
46
|
+
readonly modelSupportsAudioInput: "ARENA_MODEL_SUPPORTS_AUDIO_INPUT";
|
|
47
|
+
readonly imageInputFallbackModel: "ARENA_IMAGE_INPUT_FALLBACK_MODEL";
|
|
48
|
+
readonly imageInputFallbackBaseUrl: "ARENA_IMAGE_INPUT_FALLBACK_BASE_URL";
|
|
49
|
+
readonly imageInputFallbackApiKey: "ARENA_IMAGE_INPUT_FALLBACK_API_KEY";
|
|
50
|
+
readonly imageInputFallbackProtocol: "ARENA_IMAGE_INPUT_FALLBACK_PROTOCOL";
|
|
51
|
+
readonly metricsSideQueryEnabled: "ARENA_METRICS_SIDE_QUERY_ENABLED";
|
|
52
|
+
readonly metricsSideQueryModel: "ARENA_METRICS_SIDE_QUERY_MODEL";
|
|
53
|
+
readonly metricsSideQueryMaxTokens: "ARENA_METRICS_SIDE_QUERY_MAX_TOKENS";
|
|
54
|
+
readonly metricsSideQueryMaxAttempts: "ARENA_METRICS_SIDE_QUERY_MAX_ATTEMPTS";
|
|
55
|
+
readonly metricsSideQueryEnableThinking: "ARENA_METRICS_SIDE_QUERY_ENABLE_THINKING";
|
|
56
|
+
readonly metricsSideQueryThinkingBudget: "ARENA_METRICS_SIDE_QUERY_THINKING_BUDGET";
|
|
57
|
+
readonly askUserMode: "ARENA_ASK_USER_MODE";
|
|
58
|
+
readonly askUserHandlerUrl: "ARENA_ASK_USER_HANDLER_URL";
|
|
59
|
+
readonly askUserTimeoutMs: "ARENA_ASK_USER_TIMEOUT_MS";
|
|
60
|
+
};
|
|
61
|
+
export declare const startupMainEnvironmentNames: Set<string>;
|
|
62
|
+
/** Raw resolved values; the caller applies the shared startup-log sanitizer. */
|
|
63
|
+
export declare function startupMainConfig(config: ArenaConfig): Record<string, unknown>;
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
// Names identify settings, not the input that won precedence. Values always
|
|
2
|
+
// come from the resolved config; supplied environment values are logged apart.
|
|
3
|
+
// Keeping this exhaustive also makes new configuration fields visible here.
|
|
4
|
+
export const startupMainConfigNames = {
|
|
5
|
+
mode: "ARENA_HARNESS_MODE",
|
|
6
|
+
model: "OPENAI_MODEL",
|
|
7
|
+
workspace: null,
|
|
8
|
+
stateRoot: "ARENA_HOME",
|
|
9
|
+
tenantId: "ARENA_TENANT_ID",
|
|
10
|
+
apiBase: "OPENAI_BASE_URL",
|
|
11
|
+
apiKey: "OPENAI_API_KEY",
|
|
12
|
+
openaiApi: "ARENA_OPENAI_API",
|
|
13
|
+
responsesReplayReasoningState: "ARENA_RESPONSES_REPLAY_REASONING_STATE",
|
|
14
|
+
maxTurns: "ARENA_MAX_TURNS",
|
|
15
|
+
maxTokens: "ARENA_MAX_TOKENS",
|
|
16
|
+
temperature: "ARENA_TEMPERATURE",
|
|
17
|
+
incrementalOutput: null,
|
|
18
|
+
resultFormat: null,
|
|
19
|
+
reasoningEffort: "ARENA_REASONING_EFFORT",
|
|
20
|
+
toolChoice: "ARENA_TOOL_CHOICE",
|
|
21
|
+
disallowedTools: "ARENA_DISALLOWED_TOOLS",
|
|
22
|
+
connectors: "ARENA_CONNECTORS",
|
|
23
|
+
connectedConnectors: "ARENA_CONNECTED_CONNECTORS",
|
|
24
|
+
mergeConnectors: null,
|
|
25
|
+
extraBody: "ARENA_EXTRA_BODY",
|
|
26
|
+
enableThinking: "ARENA_ENABLE_THINKING",
|
|
27
|
+
thinkingBudget: "ARENA_THINKING_BUDGET",
|
|
28
|
+
preserveThinking: "ARENA_PRESERVE_THINKING",
|
|
29
|
+
systemPrompt: null,
|
|
30
|
+
appendSystemPrompt: null,
|
|
31
|
+
excludeQwenFromSystemPrompt: "ARENA_EXCLUDE_QWEN_FROM_SYSTEM_PROMPT",
|
|
32
|
+
contextWindow: "ARENA_CONTEXT_WINDOW",
|
|
33
|
+
compactionMode: "ARENA_COMPACTION_MODE",
|
|
34
|
+
restoreSessionMemory: "ARENA_RESTORE_SESSION_MEMORY",
|
|
35
|
+
contextCompactionRatio: "ARENA_CONTEXT_COMPACTION_RATIO",
|
|
36
|
+
compactionThresholdTokens: null,
|
|
37
|
+
compactionSummaryMaxTokens: "ARENA_COMPACTION_SUMMARY_MAX_TOKENS",
|
|
38
|
+
memoryUpdateTokens: "ARENA_MEMORY_UPDATE_TOKENS",
|
|
39
|
+
modelMaxRetries: "ARENA_MODEL_MAX_RETRIES",
|
|
40
|
+
modelRetryBaseMs: "ARENA_MODEL_RETRY_BASE_MS",
|
|
41
|
+
modelRetryMaxMs: "ARENA_MODEL_RETRY_MAX_MS",
|
|
42
|
+
modelRetryableStatuses: "ARENA_MODEL_RETRYABLE_STATUS_CODES",
|
|
43
|
+
modelStreamIdleTimeoutMs: "ARENA_MODEL_STREAM_IDLE_TIMEOUT_MS",
|
|
44
|
+
modelCallLogging: "ARENA_MODEL_CALL_LOGGING",
|
|
45
|
+
modelCallLogMode: "ARENA_MODEL_CALL_LOG_MODE",
|
|
46
|
+
modelSupportsImageInput: "ARENA_MODEL_SUPPORTS_IMAGE_INPUT",
|
|
47
|
+
modelSupportsVideoInput: "ARENA_MODEL_SUPPORTS_VIDEO_INPUT",
|
|
48
|
+
modelSupportsAudioInput: "ARENA_MODEL_SUPPORTS_AUDIO_INPUT",
|
|
49
|
+
imageInputFallbackModel: "ARENA_IMAGE_INPUT_FALLBACK_MODEL",
|
|
50
|
+
imageInputFallbackBaseUrl: "ARENA_IMAGE_INPUT_FALLBACK_BASE_URL",
|
|
51
|
+
imageInputFallbackApiKey: "ARENA_IMAGE_INPUT_FALLBACK_API_KEY",
|
|
52
|
+
imageInputFallbackProtocol: "ARENA_IMAGE_INPUT_FALLBACK_PROTOCOL",
|
|
53
|
+
metricsSideQueryEnabled: "ARENA_METRICS_SIDE_QUERY_ENABLED",
|
|
54
|
+
metricsSideQueryModel: "ARENA_METRICS_SIDE_QUERY_MODEL",
|
|
55
|
+
metricsSideQueryMaxTokens: "ARENA_METRICS_SIDE_QUERY_MAX_TOKENS",
|
|
56
|
+
metricsSideQueryMaxAttempts: "ARENA_METRICS_SIDE_QUERY_MAX_ATTEMPTS",
|
|
57
|
+
metricsSideQueryEnableThinking: "ARENA_METRICS_SIDE_QUERY_ENABLE_THINKING",
|
|
58
|
+
metricsSideQueryThinkingBudget: "ARENA_METRICS_SIDE_QUERY_THINKING_BUDGET",
|
|
59
|
+
askUserMode: "ARENA_ASK_USER_MODE",
|
|
60
|
+
askUserHandlerUrl: "ARENA_ASK_USER_HANDLER_URL",
|
|
61
|
+
askUserTimeoutMs: "ARENA_ASK_USER_TIMEOUT_MS",
|
|
62
|
+
};
|
|
63
|
+
const mergeConfigNames = {
|
|
64
|
+
accessKey: "ARENA_MERGE_ACCESS_KEY",
|
|
65
|
+
toolPackId: "ARENA_MERGE_TOOL_PACK_ID",
|
|
66
|
+
registeredUserId: "ARENA_MERGE_REGISTERED_USER_ID",
|
|
67
|
+
apiBase: "ARENA_MERGE_API_BASE",
|
|
68
|
+
timeoutMs: "ARENA_CONNECTOR_TIMEOUT_MS",
|
|
69
|
+
};
|
|
70
|
+
export const startupMainEnvironmentNames = new Set([
|
|
71
|
+
...Object.values(startupMainConfigNames).flatMap(name => name === null ? [] : [name]),
|
|
72
|
+
...Object.values(mergeConfigNames),
|
|
73
|
+
]);
|
|
74
|
+
/** Raw resolved values; the caller applies the shared startup-log sanitizer. */
|
|
75
|
+
export function startupMainConfig(config) {
|
|
76
|
+
const snapshot = {};
|
|
77
|
+
for (const field of Object.keys(startupMainConfigNames)) {
|
|
78
|
+
if (field === "mergeConnectors")
|
|
79
|
+
continue;
|
|
80
|
+
snapshot[startupMainConfigNames[field] ?? field] = config[field] ?? null;
|
|
81
|
+
}
|
|
82
|
+
snapshot.ARENA_MAX_TURNS = config.maxTurns ?? "unlimited";
|
|
83
|
+
snapshot.ARENA_MODEL_RETRYABLE_STATUS_CODES = config.modelRetryableStatuses
|
|
84
|
+
? [
|
|
85
|
+
...config.modelRetryableStatuses.exact,
|
|
86
|
+
...config.modelRetryableStatuses.classes.map(status => `${status}xx`),
|
|
87
|
+
]
|
|
88
|
+
: null;
|
|
89
|
+
for (const field of Object.keys(mergeConfigNames)) {
|
|
90
|
+
snapshot[mergeConfigNames[field]] = config.mergeConnectors?.[field] ?? null;
|
|
91
|
+
}
|
|
92
|
+
return snapshot;
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=startup-main-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"startup-main-config.js","sourceRoot":"","sources":["../src/startup-main-config.ts"],"names":[],"mappings":"AAGA,4EAA4E;AAC5E,+EAA+E;AAC/E,4EAA4E;AAC5E,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,IAAI,EAAE,oBAAoB;IAC1B,KAAK,EAAE,cAAc;IACrB,SAAS,EAAE,IAAI;IACf,SAAS,EAAE,YAAY;IACvB,QAAQ,EAAE,iBAAiB;IAC3B,OAAO,EAAE,iBAAiB;IAC1B,MAAM,EAAE,gBAAgB;IACxB,SAAS,EAAE,kBAAkB;IAC7B,6BAA6B,EAAE,wCAAwC;IACvE,QAAQ,EAAE,iBAAiB;IAC3B,SAAS,EAAE,kBAAkB;IAC7B,WAAW,EAAE,mBAAmB;IAChC,iBAAiB,EAAE,IAAI;IACvB,YAAY,EAAE,IAAI;IAClB,eAAe,EAAE,wBAAwB;IACzC,UAAU,EAAE,mBAAmB;IAC/B,eAAe,EAAE,wBAAwB;IACzC,UAAU,EAAE,kBAAkB;IAC9B,mBAAmB,EAAE,4BAA4B;IACjD,eAAe,EAAE,IAAI;IACrB,SAAS,EAAE,kBAAkB;IAC7B,cAAc,EAAE,uBAAuB;IACvC,cAAc,EAAE,uBAAuB;IACvC,gBAAgB,EAAE,yBAAyB;IAC3C,YAAY,EAAE,IAAI;IAClB,kBAAkB,EAAE,IAAI;IACxB,2BAA2B,EAAE,uCAAuC;IACpE,aAAa,EAAE,sBAAsB;IACrC,cAAc,EAAE,uBAAuB;IACvC,oBAAoB,EAAE,8BAA8B;IACpD,sBAAsB,EAAE,gCAAgC;IACxD,yBAAyB,EAAE,IAAI;IAC/B,0BAA0B,EAAE,qCAAqC;IACjE,kBAAkB,EAAE,4BAA4B;IAChD,eAAe,EAAE,yBAAyB;IAC1C,gBAAgB,EAAE,2BAA2B;IAC7C,eAAe,EAAE,0BAA0B;IAC3C,sBAAsB,EAAE,oCAAoC;IAC5D,wBAAwB,EAAE,oCAAoC;IAC9D,gBAAgB,EAAE,0BAA0B;IAC5C,gBAAgB,EAAE,2BAA2B;IAC7C,uBAAuB,EAAE,kCAAkC;IAC3D,uBAAuB,EAAE,kCAAkC;IAC3D,uBAAuB,EAAE,kCAAkC;IAC3D,uBAAuB,EAAE,kCAAkC;IAC3D,yBAAyB,EAAE,qCAAqC;IAChE,wBAAwB,EAAE,oCAAoC;IAC9D,0BAA0B,EAAE,qCAAqC;IACjE,uBAAuB,EAAE,kCAAkC;IAC3D,qBAAqB,EAAE,gCAAgC;IACvD,yBAAyB,EAAE,qCAAqC;IAChE,2BAA2B,EAAE,uCAAuC;IACpE,8BAA8B,EAAE,0CAA0C;IAC1E,8BAA8B,EAAE,0CAA0C;IAC1E,WAAW,EAAE,qBAAqB;IAClC,iBAAiB,EAAE,4BAA4B;IAC/C,gBAAgB,EAAE,2BAA2B;CACc,CAAC;AAE9D,MAAM,gBAAgB,GAAG;IACvB,SAAS,EAAE,wBAAwB;IACnC,UAAU,EAAE,0BAA0B;IACtC,gBAAgB,EAAE,gCAAgC;IAClD,OAAO,EAAE,sBAAsB;IAC/B,SAAS,EAAE,4BAA4B;CACsB,CAAC;AAEhE,MAAM,CAAC,MAAM,2BAA2B,GAAG,IAAI,GAAG,CAAS;IACzD,GAAG,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACrF,GAAG,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC;CACnC,CAAC,CAAC;AAEH,gFAAgF;AAChF,MAAM,UAAU,iBAAiB,CAAC,MAAmB;IACnD,MAAM,QAAQ,GAA4B,EAAE,CAAC;IAC7C,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAA0B,EAAE,CAAC;QACjF,IAAI,KAAK,KAAK,iBAAiB;YAAE,SAAS;QAC1C,QAAQ,CAAC,sBAAsB,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;IAC3E,CAAC;IACD,QAAQ,CAAC,eAAe,GAAG,MAAM,CAAC,QAAQ,IAAI,WAAW,CAAC;IAC1D,QAAQ,CAAC,kCAAkC,GAAG,MAAM,CAAC,sBAAsB;QACzE,CAAC,CAAC;YACA,GAAG,MAAM,CAAC,sBAAsB,CAAC,KAAK;YACtC,GAAG,MAAM,CAAC,sBAAsB,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,IAAI,CAAC;SACtE;QACD,CAAC,CAAC,IAAI,CAAC;IACT,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAmC,EAAE,CAAC;QACpF,QAAQ,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,eAAe,EAAE,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;IAC9E,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { HarnessMode } from "./mode.js";
|
|
2
|
+
/**
|
|
3
|
+
* Settings read lazily by tools rather than configFromEnv. Match each tool's
|
|
4
|
+
* parsing rules without importing its executor or triggering tool work.
|
|
5
|
+
* Null means unset or unused by this headless entry point / harness mode.
|
|
6
|
+
* Endpoint defaults describe available services, not requests already made.
|
|
7
|
+
*/
|
|
8
|
+
export declare function startupToolConfig(mode: HarnessMode, env: NodeJS.ProcessEnv, hostEnv: NodeJS.ProcessEnv): Record<string, unknown>;
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { tmpdir } from "node:os";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { arenaImageAlternativeModel, defaultArenaImageModels, defaultCodeArenaImageModels } from "./image-model.js";
|
|
4
|
+
function positiveInteger(value, fallback) {
|
|
5
|
+
if (!value)
|
|
6
|
+
return fallback;
|
|
7
|
+
const parsed = Number(value);
|
|
8
|
+
return Number.isInteger(parsed) && parsed > 0 ? parsed : fallback;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Settings read lazily by tools rather than configFromEnv. Match each tool's
|
|
12
|
+
* parsing rules without importing its executor or triggering tool work.
|
|
13
|
+
* Null means unset or unused by this headless entry point / harness mode.
|
|
14
|
+
* Endpoint defaults describe available services, not requests already made.
|
|
15
|
+
*/
|
|
16
|
+
export function startupToolConfig(mode, env, hostEnv) {
|
|
17
|
+
const arena = mode === "arena";
|
|
18
|
+
const code = !arena;
|
|
19
|
+
const codeImage = code && mode !== "html";
|
|
20
|
+
const mediaGeneration = arena || codeImage;
|
|
21
|
+
const fullStack = mode === "full-stack";
|
|
22
|
+
const configuredMediaRetries = Number(env.ROUTIFY_MEDIA_MAX_RETRIES || env.CODE_HARNESS_TOOL_MAX_RETRIES || 5);
|
|
23
|
+
const mediaRetries = Number.isSafeInteger(configuredMediaRetries) && configuredMediaRetries >= 0
|
|
24
|
+
? configuredMediaRetries : 5;
|
|
25
|
+
const configuredCacheTtl = Number(env.CODE_HARNESS_MEDIA_CACHE_TTL_MS);
|
|
26
|
+
const cacheTtl = Number.isFinite(configuredCacheTtl) && configuredCacheTtl >= 0
|
|
27
|
+
? configuredCacheTtl : 24 * 60 * 60 * 1000;
|
|
28
|
+
const webFetchBytesText = env.CODE_HARNESS_WEB_FETCH_MAX_BYTES?.trim() || "";
|
|
29
|
+
const parsedWebFetchBytes = /^\d+$/.test(webFetchBytesText) ? Number(webFetchBytesText) : NaN;
|
|
30
|
+
const webFetchBytes = Number.isSafeInteger(parsedWebFetchBytes) && parsedWebFetchBytes > 0
|
|
31
|
+
? parsedWebFetchBytes : 40_000;
|
|
32
|
+
const configuredBashTimeout = Number(env.CODE_HARNESS_BASH_TIMEOUT_SECONDS || 180);
|
|
33
|
+
const bashTimeout = Number.isFinite(configuredBashTimeout) && configuredBashTimeout > 0
|
|
34
|
+
? configuredBashTimeout : 180;
|
|
35
|
+
const previewPort = positiveInteger(env.CODE_HARNESS_PREVIEW_PORT, 3000);
|
|
36
|
+
const sandboxId = env.E2B_SANDBOX_ID?.trim() || null;
|
|
37
|
+
const previewHostTemplate = env.ARENA_PREVIEW_HOST_TEMPLATE?.trim()
|
|
38
|
+
|| (sandboxId ? `{port}-${sandboxId}.e2b.app` : null);
|
|
39
|
+
const checkpointHook = hostEnv.ARENA_MIDTURN_CHECKPOINT_HOOK?.trim();
|
|
40
|
+
const arenaImagePrimary = env.ARENA_IMAGE_MODEL || defaultArenaImageModels[0];
|
|
41
|
+
return {
|
|
42
|
+
ARENA_CONFIG_LOGGING: !["0", "false", "no"].includes((env.ARENA_CONFIG_LOGGING ?? "").toLowerCase()),
|
|
43
|
+
// CLI naming and checkpoint configuration are captured before workspace .env.
|
|
44
|
+
ARENA_CLI_NAME: hostEnv.ARENA_CLI_NAME === "code-harness" ? "code-harness" : "arena",
|
|
45
|
+
ARENA_MIDTURN_CHECKPOINT_HOOK: checkpointHook ? path.resolve(checkpointHook) : null,
|
|
46
|
+
HARBOR_REMOTE_COMMAND_BASE_URL: hostEnv.HARBOR_REMOTE_COMMAND_BASE_URL?.trim().replace(/\/+$/, "") || null,
|
|
47
|
+
HARBOR_REMOTE_COMMAND_API_KEY: hostEnv.HARBOR_REMOTE_COMMAND_API_KEY?.trim() || null,
|
|
48
|
+
ARENA_SESSION_WORKSPACE_MODE: null,
|
|
49
|
+
NO_COLOR: null,
|
|
50
|
+
ARENA_WEB_SEARCH_MODEL: arena ? env.ARENA_WEB_SEARCH_MODEL || "brave.llm-context" : null,
|
|
51
|
+
CODE_HARNESS_WEB_SEARCH_MODEL: code
|
|
52
|
+
? env.CODE_HARNESS_WEB_SEARCH_MODEL || env.ARENA_WEB_SEARCH_MODEL || "brave.llm-context" : null,
|
|
53
|
+
ROUTIFY_API_KEY: env.ROUTIFY_API_KEY || null,
|
|
54
|
+
ROUTIFY_WEB_SEARCH_API_KEY: env.ROUTIFY_WEB_SEARCH_API_KEY?.trim() || env.ROUTIFY_API_KEY || null,
|
|
55
|
+
ROUTIFY_IMAGE_SEARCH_API_KEY: arena
|
|
56
|
+
? env.ROUTIFY_IMAGE_SEARCH_API_KEY?.trim() || env.ROUTIFY_API_KEY || null : null,
|
|
57
|
+
ROUTIFY_GENERATE_IMAGE_API_KEY: mediaGeneration
|
|
58
|
+
? env.ROUTIFY_GENERATE_IMAGE_API_KEY?.trim() || env.ROUTIFY_API_KEY?.trim() || null : null,
|
|
59
|
+
ROUTIFY_WEB_SEARCH_URL: env.ROUTIFY_WEB_SEARCH_URL?.trim()
|
|
60
|
+
|| "https://routify-pub.alibaba-inc.com/protocol/compatible-mode/res/v1/llm/context",
|
|
61
|
+
ROUTIFY_IMAGE_SEARCH_URL: arena
|
|
62
|
+
? env.ROUTIFY_IMAGE_SEARCH_URL?.trim()
|
|
63
|
+
|| "https://routify-pub.alibaba-inc.com/protocol/brave/res/v1/images/search" : null,
|
|
64
|
+
CODE_HARNESS_ROUTIFY_WEB_FETCH_ENABLED: code
|
|
65
|
+
? ["1", "true", "yes", "on"].includes(env.CODE_HARNESS_ROUTIFY_WEB_FETCH_ENABLED?.trim().toLowerCase() || "") : null,
|
|
66
|
+
CODE_HARNESS_WEB_FETCH_MAX_BYTES: code ? webFetchBytes : null,
|
|
67
|
+
// Arrays describe per-call random selection; startup must not sample it.
|
|
68
|
+
ARENA_IMAGE_MODEL: arena ? env.ARENA_IMAGE_MODEL || defaultArenaImageModels : null,
|
|
69
|
+
ARENA_IMAGE_ALTERNATIVE_MODEL: arena
|
|
70
|
+
? arenaImageAlternativeModel(arenaImagePrimary, env) : null,
|
|
71
|
+
ARENA_IMAGE_SIZE: arena ? env.ARENA_IMAGE_SIZE || "1024*1024" : null,
|
|
72
|
+
CODE_HARNESS_IMAGE_MODEL: codeImage
|
|
73
|
+
? env.CODE_HARNESS_IMAGE_MODEL || env.ARENA_IMAGE_MODEL || defaultCodeArenaImageModels : null,
|
|
74
|
+
CODE_HARNESS_IMAGE_SIZE: codeImage
|
|
75
|
+
? env.CODE_HARNESS_IMAGE_SIZE || env.ARENA_IMAGE_SIZE || "1024*1024" : null,
|
|
76
|
+
// Remote input attachments use these limits in every mode.
|
|
77
|
+
ARENA_IMAGE_MAX_EDGE: positiveInteger(env.ARENA_IMAGE_MAX_EDGE, 1568),
|
|
78
|
+
ARENA_IMAGE_MAX_PATCHES: positiveInteger(env.ARENA_IMAGE_MAX_PATCHES, 1568),
|
|
79
|
+
ARENA_SPEECH_MODEL: arena ? env.ARENA_SPEECH_MODEL || "gemini-3.1-flash-tts-preview" : null,
|
|
80
|
+
// The default voice depends on the voice selected by each tool call.
|
|
81
|
+
ARENA_SPEECH_VOICE: arena ? env.ARENA_SPEECH_VOICE || null : null,
|
|
82
|
+
ROUTIFY_VERTEX_BASE_URL: mediaGeneration
|
|
83
|
+
? (env.ROUTIFY_VERTEX_BASE_URL || "https://routify-pub.alibaba-inc.com/protocol/vertex/v1beta").replace(/\/+$/, "") : null,
|
|
84
|
+
ROUTIFY_OPENAI_BASE_URL: mediaGeneration
|
|
85
|
+
? (env.ROUTIFY_OPENAI_BASE_URL || "https://routify-pub.alibaba-inc.com/protocol/openai/v1").replace(/\/+$/, "") : null,
|
|
86
|
+
ROUTIFY_MEDIA_MAX_RETRIES: mediaGeneration ? mediaRetries : null,
|
|
87
|
+
PEXELS_API_KEY: code ? env.PEXELS_API_KEY || null : null,
|
|
88
|
+
CODE_HARNESS_MEDIA_CACHE_TTL_MS: code ? cacheTtl : null,
|
|
89
|
+
CODE_HARNESS_MEDIA_CACHE_DIR: code
|
|
90
|
+
? env.CODE_HARNESS_MEDIA_CACHE_DIR || path.join(tmpdir(), "code-harness", "fetch-media-cache-v1") : null,
|
|
91
|
+
ARENA_SOFFICE_PATH: arena ? env.ARENA_SOFFICE_PATH || "soffice" : null,
|
|
92
|
+
// The actual privilege gate also checks platform, workspace, Docker and uid.
|
|
93
|
+
ARENA_SANDBOX_PRIVILEGED_FILE_CREATION: arena ? env.ARENA_SANDBOX_PRIVILEGED_FILE_CREATION || null : null,
|
|
94
|
+
ARENA_PREVIEW_HOST_TEMPLATE: arena ? previewHostTemplate : null,
|
|
95
|
+
E2B_SANDBOX_ID: arena ? sandboxId : null,
|
|
96
|
+
CODE_HARNESS_APPLY_PATCH_TOOL: code
|
|
97
|
+
? env.CODE_HARNESS_APPLY_PATCH_TOOL !== undefined
|
|
98
|
+
&& !["0", "false", "no"].includes(env.CODE_HARNESS_APPLY_PATCH_TOOL.toLowerCase()) : null,
|
|
99
|
+
CODE_HARNESS_NPM_CLI_JS: code ? env.CODE_HARNESS_NPM_CLI_JS || null : null,
|
|
100
|
+
CODE_HARNESS_BASH_TIMEOUT_SECONDS: codeImage ? bashTimeout : null,
|
|
101
|
+
// Preserve non-finite Number results for the caller's invalid-value marker.
|
|
102
|
+
CODE_HARNESS_FULLSTACK_BUILD_TIMEOUT_MS: fullStack
|
|
103
|
+
? Number(env.CODE_HARNESS_FULLSTACK_BUILD_TIMEOUT_MS || 300_000) : null,
|
|
104
|
+
CODE_HARNESS_PREVIEW_PORT: fullStack ? previewPort : null,
|
|
105
|
+
CODE_HARNESS_PREVIEW_URL: fullStack
|
|
106
|
+
? env.CODE_HARNESS_PREVIEW_URL || `http://127.0.0.1:${previewPort}` : null,
|
|
107
|
+
// Both executors load the recording lazily; only the exit hook is eager.
|
|
108
|
+
CODE_HARNESS_REPLAY_RESPONSES: env.CODE_HARNESS_REPLAY_RESPONSES
|
|
109
|
+
? path.resolve(env.CODE_HARNESS_REPLAY_RESPONSES) : null,
|
|
110
|
+
replayExitSummaryEnabled: Boolean(hostEnv.CODE_HARNESS_REPLAY_RESPONSES),
|
|
111
|
+
HTTP_PROXY: env.http_proxy ?? env.HTTP_PROXY ?? null,
|
|
112
|
+
HTTPS_PROXY: env.https_proxy ?? env.HTTPS_PROXY ?? null,
|
|
113
|
+
NO_PROXY: env.no_proxy ?? env.NO_PROXY ?? null,
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=startup-tool-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"startup-tool-config.js","sourceRoot":"","sources":["../src/startup-tool-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { Message, ModelClient, ModelUsage, ToolDefinition } from "./types.js";
|
|
2
|
+
export interface CompactionSettings {
|
|
3
|
+
contextWindow: number;
|
|
4
|
+
triggerRatio: number;
|
|
5
|
+
summaryMaxTokens: number;
|
|
6
|
+
imageTokenEstimate?: number;
|
|
7
|
+
compactionThresholdTokens?: number;
|
|
8
|
+
/** Shared runtime accounting, supplied by compaction.ts for both arenas. */
|
|
9
|
+
estimateTokens?: typeof estimateContextTokens;
|
|
10
|
+
estimateLocalTokens?: typeof estimateContextTokens;
|
|
11
|
+
allowMidturn?: boolean;
|
|
12
|
+
onBeforeCompaction?: (estimatedTokensBefore: number, thresholdTokens: number) => Promise<void>;
|
|
13
|
+
}
|
|
14
|
+
export interface CompactionResult {
|
|
15
|
+
compacted: boolean;
|
|
16
|
+
estimatedTokensBefore: number;
|
|
17
|
+
estimatedTokensAfter: number;
|
|
18
|
+
usage?: ModelUsage;
|
|
19
|
+
memory?: string;
|
|
20
|
+
/** Exclusive boundary in the input context, including its system prefix. */
|
|
21
|
+
coveredMessages?: number;
|
|
22
|
+
}
|
|
23
|
+
/** Keep the newest complete step, including all parallel results and images. */
|
|
24
|
+
export declare function latestCompleteStepStart(messages: readonly Message[]): number;
|
|
25
|
+
/** Omit accounting metadata and tool correlation IDs, including embedded signatures. */
|
|
26
|
+
export declare function contextTokenReplacer(this: Record<string, unknown>, key: string, value: unknown): unknown;
|
|
27
|
+
export declare function estimateContextTokens(messages: readonly Message[], tools: readonly ToolDefinition[], imageTokenEstimate?: number): number;
|
|
28
|
+
export declare function continuationSummaryBlock(summary: string): string;
|
|
29
|
+
export declare function compactMessagesIfNeeded(messages: Message[], tools: readonly ToolDefinition[], client: ModelClient, model: string, settings: CompactionSettings, signal?: AbortSignal): Promise<CompactionResult>;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { assertCompleteTextResponse } from "./model-stream.js";
|
|
1
2
|
const continuationPreamble = "Another language model started to solve this problem and produced a summary " +
|
|
2
3
|
"of its thinking process. You also have access to the state of the tools that " +
|
|
3
4
|
"were used by that language model. Use this to build on the work that has " +
|
|
@@ -44,6 +45,29 @@ function latestHumanUserIndex(messages) {
|
|
|
44
45
|
}
|
|
45
46
|
return -1;
|
|
46
47
|
}
|
|
48
|
+
/** Keep the newest complete step, including all parallel results and images. */
|
|
49
|
+
export function latestCompleteStepStart(messages) {
|
|
50
|
+
const pending = new Set();
|
|
51
|
+
let start = -1;
|
|
52
|
+
for (let index = 1; index < messages.length; index++) {
|
|
53
|
+
const message = messages[index];
|
|
54
|
+
if (message.role === "assistant" || (message.role === "user" && !isVisualToolResult(message))) {
|
|
55
|
+
if (pending.size)
|
|
56
|
+
return -1;
|
|
57
|
+
start = index;
|
|
58
|
+
while (start > 1 && messages[start - 1]?.role === "user" && !isVisualToolResult(messages[start - 1]))
|
|
59
|
+
start--;
|
|
60
|
+
if (message.role === "assistant") {
|
|
61
|
+
for (const call of message.tool_calls ?? [])
|
|
62
|
+
pending.add(call.id);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
else if (message.role === "tool" && !pending.delete(message.tool_call_id)) {
|
|
66
|
+
return -1;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return pending.size ? -1 : start;
|
|
70
|
+
}
|
|
47
71
|
function addCharacterCounts(counts, value) {
|
|
48
72
|
for (const character of value) {
|
|
49
73
|
if (character.codePointAt(0) <= 0x7f)
|
|
@@ -52,9 +76,23 @@ function addCharacterCounts(counts, value) {
|
|
|
52
76
|
counts.nonAscii += 1;
|
|
53
77
|
}
|
|
54
78
|
}
|
|
79
|
+
/** Omit accounting metadata and tool correlation IDs, including embedded signatures. */
|
|
80
|
+
export function contextTokenReplacer(key, value) {
|
|
81
|
+
if (key === "image" && typeof value === "string")
|
|
82
|
+
return "<image>";
|
|
83
|
+
if (key === "usage" && this.role === "assistant")
|
|
84
|
+
return undefined;
|
|
85
|
+
if (key === "tool_call_id" && this.role === "tool")
|
|
86
|
+
return undefined;
|
|
87
|
+
if (key === "id" && this.type === "function" && this.function)
|
|
88
|
+
return undefined;
|
|
89
|
+
if ((key === "id" || key === "call_id") &&
|
|
90
|
+
(this.type === "function_call" || this.type === "function_call_output"))
|
|
91
|
+
return undefined;
|
|
92
|
+
return value;
|
|
93
|
+
}
|
|
55
94
|
function serializedContextTokens(messages, tools) {
|
|
56
95
|
const counts = { ascii: 0, nonAscii: 0 };
|
|
57
|
-
const replacer = (key, value) => key === "image" && typeof value === "string" ? "<image>" : value;
|
|
58
96
|
addCharacterCounts(counts, '{"messages":[');
|
|
59
97
|
for (let index = 0; index < messages.length; index += 1) {
|
|
60
98
|
if (index)
|
|
@@ -66,10 +104,10 @@ function serializedContextTokens(messages, tools) {
|
|
|
66
104
|
openai_response_items: message.openai_response_items,
|
|
67
105
|
}
|
|
68
106
|
: message;
|
|
69
|
-
addCharacterCounts(counts, JSON.stringify(modelVisible,
|
|
107
|
+
addCharacterCounts(counts, JSON.stringify(modelVisible, contextTokenReplacer));
|
|
70
108
|
}
|
|
71
109
|
addCharacterCounts(counts, '],"tools":');
|
|
72
|
-
addCharacterCounts(counts, JSON.stringify(tools,
|
|
110
|
+
addCharacterCounts(counts, JSON.stringify(tools, contextTokenReplacer));
|
|
73
111
|
addCharacterCounts(counts, "}");
|
|
74
112
|
return Math.ceil(counts.ascii / 4 + counts.nonAscii);
|
|
75
113
|
}
|
|
@@ -144,20 +182,26 @@ async function generateSummary(client, model, sourceMessages, maxTokens, signal)
|
|
|
144
182
|
};
|
|
145
183
|
const content = [];
|
|
146
184
|
let usage;
|
|
185
|
+
let finishReason;
|
|
147
186
|
for await (const chunk of client.stream(request)) {
|
|
148
187
|
if (chunk.usage)
|
|
149
188
|
usage = chunk.usage;
|
|
189
|
+
if (chunk.choices?.[0]?.finish_reason)
|
|
190
|
+
finishReason = chunk.choices[0].finish_reason;
|
|
150
191
|
const value = chunk.choices?.[0]?.delta?.content;
|
|
151
192
|
if (value)
|
|
152
193
|
content.push(String(value));
|
|
153
194
|
}
|
|
195
|
+
assertCompleteTextResponse(finishReason);
|
|
154
196
|
return { summary: safeSummary(content.join("")), usage };
|
|
155
197
|
}
|
|
156
198
|
export async function compactMessagesIfNeeded(messages, tools, client, model, settings, signal) {
|
|
157
199
|
const imageTokens = settings.imageTokenEstimate ?? 2048;
|
|
158
|
-
const
|
|
159
|
-
const
|
|
160
|
-
|
|
200
|
+
const estimate = settings.estimateTokens ?? estimateContextTokens;
|
|
201
|
+
const estimateLocal = settings.estimateLocalTokens ?? estimateContextTokens;
|
|
202
|
+
const before = estimate(messages, tools, imageTokens);
|
|
203
|
+
const threshold = settings.compactionThresholdTokens ?? (Math.max(1, settings.contextWindow) *
|
|
204
|
+
Math.min(1, Math.max(0, settings.triggerRatio)));
|
|
161
205
|
if (before < threshold) {
|
|
162
206
|
return {
|
|
163
207
|
compacted: false,
|
|
@@ -166,14 +210,21 @@ export async function compactMessagesIfNeeded(messages, tools, client, model, se
|
|
|
166
210
|
};
|
|
167
211
|
}
|
|
168
212
|
const currentTurnStart = latestHumanUserIndex(messages);
|
|
169
|
-
|
|
213
|
+
let boundary = currentTurnStart;
|
|
214
|
+
if (settings.allowMidturn && (boundary <= 1 ||
|
|
215
|
+
estimateLocal([messages[0], ...messages.slice(boundary)], tools, imageTokens) >= threshold)) {
|
|
216
|
+
boundary = latestCompleteStepStart(messages);
|
|
217
|
+
}
|
|
218
|
+
if (boundary <= 1) {
|
|
170
219
|
return {
|
|
171
220
|
compacted: false,
|
|
172
221
|
estimatedTokensBefore: before,
|
|
173
222
|
estimatedTokensAfter: before,
|
|
174
223
|
};
|
|
175
224
|
}
|
|
176
|
-
|
|
225
|
+
if (settings.onBeforeCompaction)
|
|
226
|
+
await settings.onBeforeCompaction(before, threshold);
|
|
227
|
+
const { summary, usage } = await generateSummary(client, model, messages.slice(1, boundary), Math.max(1, Math.floor(settings.summaryMaxTokens)), signal);
|
|
177
228
|
if (!summary) {
|
|
178
229
|
return {
|
|
179
230
|
compacted: false,
|
|
@@ -182,8 +233,8 @@ export async function compactMessagesIfNeeded(messages, tools, client, model, se
|
|
|
182
233
|
usage,
|
|
183
234
|
};
|
|
184
235
|
}
|
|
185
|
-
const
|
|
186
|
-
if (
|
|
236
|
+
const firstRetained = messages[boundary];
|
|
237
|
+
if (!firstRetained || (firstRetained.role !== "user" && firstRetained.role !== "assistant")) {
|
|
187
238
|
return {
|
|
188
239
|
compacted: false,
|
|
189
240
|
estimatedTokensBefore: before,
|
|
@@ -193,15 +244,29 @@ export async function compactMessagesIfNeeded(messages, tools, client, model, se
|
|
|
193
244
|
}
|
|
194
245
|
const compactedMessages = [
|
|
195
246
|
messages[0],
|
|
196
|
-
|
|
197
|
-
|
|
247
|
+
...(firstRetained.role === "user"
|
|
248
|
+
? [prependSummary(firstRetained, continuationSummaryBlock(summary)), ...messages.slice(boundary + 1)]
|
|
249
|
+
: [{ role: "user", content: [{ text: continuationSummaryBlock(summary) }] }, ...messages.slice(boundary)]),
|
|
198
250
|
];
|
|
251
|
+
if (settings.allowMidturn) {
|
|
252
|
+
// The retained requests used the old prefix. Raw history keeps their usage;
|
|
253
|
+
// the next request will establish a fresh baseline for this shorter context.
|
|
254
|
+
for (let index = 1; index < compactedMessages.length; index++) {
|
|
255
|
+
const message = compactedMessages[index];
|
|
256
|
+
if (message.role === "assistant") {
|
|
257
|
+
const { usage: _usage, ...rest } = message;
|
|
258
|
+
compactedMessages[index] = rest;
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
}
|
|
199
262
|
messages.splice(0, messages.length, ...compactedMessages);
|
|
200
263
|
return {
|
|
201
264
|
compacted: true,
|
|
202
265
|
estimatedTokensBefore: before,
|
|
203
|
-
estimatedTokensAfter:
|
|
266
|
+
estimatedTokensAfter: estimateLocal(messages, tools, imageTokens),
|
|
204
267
|
usage,
|
|
268
|
+
memory: summary,
|
|
269
|
+
coveredMessages: boundary,
|
|
205
270
|
};
|
|
206
271
|
}
|
|
207
|
-
//# sourceMappingURL=
|
|
272
|
+
//# sourceMappingURL=summary-compaction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"summary-compaction.js","sourceRoot":"","sources":["../src/summary-compaction.ts"],"names":[],"mappings":"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"}
|
package/dist/tools.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { type ArenaConfig } from "./config.js";
|
|
2
2
|
import { type ModelConnectionOptions } from "./provider.js";
|
|
3
3
|
import type { CheckpointHookToolCall } from "./midturn-checkpoint-hook.js";
|
|
4
|
-
import type { AskUserHandler, AskUserContext, MultimodalUserMessage, ModelClient, ToolCall, ToolDefinition, ToolMessage, WorkspaceContext } from "./types.js";
|
|
4
|
+
import type { AskUserHandler, AskUserContext, MultimodalUserMessage, ModelClient, ToolCall, ToolDefinition, ToolMessage, Message, WorkspaceContext } from "./types.js";
|
|
5
5
|
interface ToolExecutorOptions {
|
|
6
6
|
askUserHandler?: AskUserHandler;
|
|
7
7
|
modelClient?: ModelClient;
|
|
@@ -21,6 +21,10 @@ export declare class ToolExecutor {
|
|
|
21
21
|
get workspace(): string;
|
|
22
22
|
get askUserEnabled(): boolean;
|
|
23
23
|
availableTools(): ToolDefinition[];
|
|
24
|
+
historyCall(call: ToolCall): ToolCall;
|
|
25
|
+
takeInteractionBoundary(callId: string): boolean;
|
|
26
|
+
beginConnectorTurn(history?: readonly Message[]): Promise<void>;
|
|
27
|
+
closeConnectors(): Promise<void>;
|
|
24
28
|
inspect(call: ToolCall): CheckpointHookToolCall;
|
|
25
29
|
execute(call: ToolCall, context?: AskUserContext): Promise<ToolMessage>;
|
|
26
30
|
takeVisualMessage(toolCallIds: string[]): MultimodalUserMessage | undefined;
|