aws-runtime-bridge 1.8.0 → 1.8.2
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/dist/adapter/AcodeSdkAdapter.d.ts.map +1 -1
- package/dist/adapter/AcodeSdkAdapter.js +98 -6
- package/dist/adapter/AcodeSdkAdapter.test.js +313 -2
- package/dist/adapter/OpencodeSdkAdapter.js +1 -1
- package/dist/adapter/types.d.ts.map +1 -1
- package/dist/adapter/types.js +7 -3
- package/dist/routes/ai-sources.js +5 -1
- package/dist/routes/ai-sources.test.js +21 -0
- package/dist/routes/runtime-binding.d.ts.map +1 -1
- package/dist/routes/runtime-binding.js +36 -1
- package/dist/routes/terminal.d.ts +2 -0
- package/dist/routes/terminal.d.ts.map +1 -1
- package/dist/routes/terminal.js +109 -7
- package/dist/routes/terminal.test.js +118 -1
- package/dist/services/mcp-launch-binding-queue.d.ts +7 -0
- package/dist/services/mcp-launch-binding-queue.d.ts.map +1 -1
- package/dist/services/mcp-launch-binding-queue.js +25 -0
- package/dist/services/session-output.d.ts +7 -3
- package/dist/services/session-output.d.ts.map +1 -1
- package/package/acode/dist/runtime.d.ts +1 -0
- package/package/acode/dist/runtime.d.ts.map +1 -1
- package/package/acode/dist/runtime.js +265 -31
- package/package/acode/dist/types.d.ts +1 -1
- package/package/acode/dist/types.d.ts.map +1 -1
- package/package/aws-client-agent-mcp/dist/config.d.ts +4 -0
- package/package/aws-client-agent-mcp/dist/config.d.ts.map +1 -1
- package/package/aws-client-agent-mcp/dist/config.js +15 -0
- package/package/aws-client-agent-mcp/dist/config.js.map +1 -1
- package/package/aws-client-agent-mcp/dist/http-client.d.ts +10 -0
- package/package/aws-client-agent-mcp/dist/http-client.d.ts.map +1 -1
- package/package/aws-client-agent-mcp/dist/http-client.js +79 -1
- package/package/aws-client-agent-mcp/dist/http-client.js.map +1 -1
- package/package/aws-client-agent-mcp/dist/http-client.test.js +129 -265
- package/package/aws-client-agent-mcp/dist/http-client.test.js.map +1 -1
- package/package.json +1 -1
|
@@ -25,9 +25,15 @@ const DEFAULT_PROVIDER_REQUEST_TIMEOUT_MS = 60_000;
|
|
|
25
25
|
const DEFAULT_PROVIDER_REQUEST_RETRY_COUNT = 2;
|
|
26
26
|
const DEFAULT_PROVIDER_REQUEST_RETRY_DELAY_MS = 1000;
|
|
27
27
|
const DEFAULT_MCP_TOOL_CALL_TIMEOUT_MS = 60_000;
|
|
28
|
-
const DEFAULT_MCP_POLLING_TOOL_CALL_TIMEOUT_MS =
|
|
28
|
+
const DEFAULT_MCP_POLLING_TOOL_CALL_TIMEOUT_MS = 0;
|
|
29
|
+
const MCP_SDK_MAX_SAFE_TIMEOUT_MS = 2_147_483_647;
|
|
29
30
|
const DEFAULT_RUNTIME_SHUTDOWN_TIMEOUT_MS = 10_000;
|
|
30
31
|
const MAX_INLINE_IMAGE_BYTES = 10 * 1024 * 1024;
|
|
32
|
+
const MAX_REQUEST_BODY_BYTES = 800 * 1024;
|
|
33
|
+
const CONTEXT_COMPACTION_RECENT_MESSAGE_COUNT = 12;
|
|
34
|
+
const CONTEXT_COMPACTION_MAX_SUMMARY_CHARS = 6000;
|
|
35
|
+
const CONTEXT_COMPACTION_MAX_PREVIEW_CHARS = 500;
|
|
36
|
+
const CONTEXT_COMPACTION_SUMMARY_PREFIX = "ACode context compaction summary:";
|
|
31
37
|
async function withTimeout(operation, timeoutMs, label, onTimeout) {
|
|
32
38
|
if (timeoutMs <= 0) {
|
|
33
39
|
return await operation;
|
|
@@ -69,6 +75,39 @@ function normalizePositiveInteger(value, fallback) {
|
|
|
69
75
|
const numeric = normalizeNonNegativeInteger(value, fallback);
|
|
70
76
|
return numeric > 0 ? numeric : fallback;
|
|
71
77
|
}
|
|
78
|
+
/**
|
|
79
|
+
* Estimate the token count of the initial context (system prompt + tool definitions).
|
|
80
|
+
*
|
|
81
|
+
* Uses a blended character-based heuristic: approximately 1 token per 3 characters,
|
|
82
|
+
* which balances English (~4 chars/token) and CJK (~1.5–2 chars/token) content
|
|
83
|
+
* commonly found in system prompts and MCP tool descriptions.
|
|
84
|
+
*/
|
|
85
|
+
const ESTIMATED_CHARS_PER_TOKEN = 3;
|
|
86
|
+
function estimateTokensFromText(value) {
|
|
87
|
+
if (!value)
|
|
88
|
+
return 0;
|
|
89
|
+
return Math.ceil(value.length / ESTIMATED_CHARS_PER_TOKEN);
|
|
90
|
+
}
|
|
91
|
+
function estimateContextTokens(systemPrompt, exposedTools) {
|
|
92
|
+
let charCount = systemPrompt.length;
|
|
93
|
+
for (const tool of exposedTools) {
|
|
94
|
+
const toolName = tool.kind === "mcp" ? tool.toolName : tool.toolName;
|
|
95
|
+
charCount += toolName.length;
|
|
96
|
+
if (tool.kind === "mcp") {
|
|
97
|
+
if (tool.description) {
|
|
98
|
+
charCount += tool.description.length;
|
|
99
|
+
}
|
|
100
|
+
charCount += JSON.stringify(tool.inputSchema).length;
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
const builtIn = tool;
|
|
104
|
+
if (builtIn.inputSchema) {
|
|
105
|
+
charCount += JSON.stringify(builtIn.inputSchema).length;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return Math.ceil(charCount / ESTIMATED_CHARS_PER_TOKEN);
|
|
110
|
+
}
|
|
72
111
|
async function delay(ms) {
|
|
73
112
|
await new Promise((resolve) => setTimeout(resolve, ms));
|
|
74
113
|
}
|
|
@@ -118,7 +157,7 @@ function resolveProviderConfig(config, acodeConfig) {
|
|
|
118
157
|
requestTimeoutMs: normalizeNonNegativeInteger(providerOptions?.requestTimeoutMs ?? providerOptions?.timeoutMs, DEFAULT_PROVIDER_REQUEST_TIMEOUT_MS),
|
|
119
158
|
requestRetryCount: normalizeNonNegativeInteger(providerOptions?.requestRetryCount, DEFAULT_PROVIDER_REQUEST_RETRY_COUNT),
|
|
120
159
|
mcpToolTimeoutMs: normalizePositiveInteger(providerOptions?.mcpToolTimeoutMs, DEFAULT_MCP_TOOL_CALL_TIMEOUT_MS),
|
|
121
|
-
mcpPollingToolTimeoutMs:
|
|
160
|
+
mcpPollingToolTimeoutMs: normalizeNonNegativeInteger(providerOptions?.mcpPollingToolTimeoutMs, DEFAULT_MCP_POLLING_TOOL_CALL_TIMEOUT_MS),
|
|
122
161
|
supportsImageInput: modelSupportsImageInput(model, defaultProvider, providerOptions),
|
|
123
162
|
};
|
|
124
163
|
}
|
|
@@ -323,6 +362,38 @@ function contentPreview(content) {
|
|
|
323
362
|
.join(" ")
|
|
324
363
|
.trim();
|
|
325
364
|
}
|
|
365
|
+
function truncateText(value, maxChars) {
|
|
366
|
+
if (value.length <= maxChars) {
|
|
367
|
+
return value;
|
|
368
|
+
}
|
|
369
|
+
return `${value.slice(0, maxChars)}…`;
|
|
370
|
+
}
|
|
371
|
+
function summarizeToolCalls(toolCalls) {
|
|
372
|
+
if (!toolCalls || toolCalls.length === 0) {
|
|
373
|
+
return "";
|
|
374
|
+
}
|
|
375
|
+
return toolCalls
|
|
376
|
+
.map((toolCall) => {
|
|
377
|
+
const args = truncateText(toolCall.function.arguments.replace(/\s+/g, " ").trim(), 160);
|
|
378
|
+
return `${toolCall.function.name}(${args})`;
|
|
379
|
+
})
|
|
380
|
+
.join(", ");
|
|
381
|
+
}
|
|
382
|
+
function summarizeConversationMessage(message, index) {
|
|
383
|
+
const preview = truncateText(contentPreview(message.content).replace(/\s+/g, " ").trim(), CONTEXT_COMPACTION_MAX_PREVIEW_CHARS);
|
|
384
|
+
const toolCalls = summarizeToolCalls(message.tool_calls);
|
|
385
|
+
const parts = [`${index + 1}. ${message.role}`];
|
|
386
|
+
if (toolCalls) {
|
|
387
|
+
parts.push(`tool_calls=${toolCalls}`);
|
|
388
|
+
}
|
|
389
|
+
if (message.tool_call_id) {
|
|
390
|
+
parts.push(`tool_call_id=${message.tool_call_id}`);
|
|
391
|
+
}
|
|
392
|
+
if (preview) {
|
|
393
|
+
parts.push(`content=${preview}`);
|
|
394
|
+
}
|
|
395
|
+
return parts.join(" | ");
|
|
396
|
+
}
|
|
326
397
|
/**
|
|
327
398
|
* 解析 ACode 工具权限配置。
|
|
328
399
|
* 主流程:运行时配置优先 -> `.acode/config.json` 次之 -> 兼容旧式 allowedTools/deniedTools 字段。
|
|
@@ -472,8 +543,105 @@ function toToolResultText(result) {
|
|
|
472
543
|
function getErrorMessage(error) {
|
|
473
544
|
return error instanceof Error ? error.message : String(error);
|
|
474
545
|
}
|
|
546
|
+
function estimateMessageSizeBytes(message) {
|
|
547
|
+
let size = 16;
|
|
548
|
+
if (typeof message.content === "string") {
|
|
549
|
+
size += message.content.length * 2;
|
|
550
|
+
}
|
|
551
|
+
else if (Array.isArray(message.content)) {
|
|
552
|
+
for (const part of message.content) {
|
|
553
|
+
if (typeof part === "object" && part !== null) {
|
|
554
|
+
size += JSON.stringify(part).length;
|
|
555
|
+
}
|
|
556
|
+
}
|
|
557
|
+
}
|
|
558
|
+
if (message.tool_calls) {
|
|
559
|
+
size += JSON.stringify(message.tool_calls).length;
|
|
560
|
+
}
|
|
561
|
+
if (message.tool_call_id) {
|
|
562
|
+
size += message.tool_call_id.length;
|
|
563
|
+
}
|
|
564
|
+
return size;
|
|
565
|
+
}
|
|
566
|
+
function isContextCompactionSummaryMessage(message) {
|
|
567
|
+
return (message.role === "system" &&
|
|
568
|
+
typeof message.content === "string" &&
|
|
569
|
+
message.content.startsWith(CONTEXT_COMPACTION_SUMMARY_PREFIX));
|
|
570
|
+
}
|
|
571
|
+
function truncateConversationIfNeeded(conversation, maxBytes) {
|
|
572
|
+
let totalBytes = 0;
|
|
573
|
+
for (const message of conversation) {
|
|
574
|
+
totalBytes += estimateMessageSizeBytes(message);
|
|
575
|
+
}
|
|
576
|
+
if (totalBytes <= maxBytes) {
|
|
577
|
+
return 0;
|
|
578
|
+
}
|
|
579
|
+
return compactConversationForRequestLimit(conversation, maxBytes);
|
|
580
|
+
}
|
|
581
|
+
function compactConversationForRequestLimit(conversation, maxBytes) {
|
|
582
|
+
const baseSystemMessages = conversation.filter((m) => m.role === "system" && !isContextCompactionSummaryMessage(m));
|
|
583
|
+
const compactableMessages = conversation.filter((m) => m.role !== "system" || isContextCompactionSummaryMessage(m));
|
|
584
|
+
const keptMessages = [];
|
|
585
|
+
let keptBytes = baseSystemMessages.reduce((sum, m) => sum + estimateMessageSizeBytes(m), 0);
|
|
586
|
+
for (let i = compactableMessages.length - 1; i >= 0; i--) {
|
|
587
|
+
const messageSize = estimateMessageSizeBytes(compactableMessages[i]);
|
|
588
|
+
if (keptBytes + messageSize > maxBytes && keptMessages.length > 0) {
|
|
589
|
+
break;
|
|
590
|
+
}
|
|
591
|
+
keptBytes += messageSize;
|
|
592
|
+
keptMessages.unshift(compactableMessages[i]);
|
|
593
|
+
}
|
|
594
|
+
return compactConversationWithSummary(conversation, compactableMessages.length - keptMessages.length);
|
|
595
|
+
}
|
|
596
|
+
function compactConversationForContextOverflow(conversation) {
|
|
597
|
+
const compactableMessages = conversation.filter((m) => m.role !== "system" || isContextCompactionSummaryMessage(m));
|
|
598
|
+
const removableCount = Math.max(0, compactableMessages.length - CONTEXT_COMPACTION_RECENT_MESSAGE_COUNT);
|
|
599
|
+
return compactConversationWithSummary(conversation, removableCount);
|
|
600
|
+
}
|
|
601
|
+
function compactConversationWithSummary(conversation, requestedRemovedCount) {
|
|
602
|
+
const baseSystemMessages = conversation.filter((m) => m.role === "system" && !isContextCompactionSummaryMessage(m));
|
|
603
|
+
const compactableMessages = conversation.filter((m) => m.role !== "system" || isContextCompactionSummaryMessage(m));
|
|
604
|
+
const removedCount = Math.max(0, Math.min(requestedRemovedCount, compactableMessages.length));
|
|
605
|
+
if (removedCount === 0) {
|
|
606
|
+
return 0;
|
|
607
|
+
}
|
|
608
|
+
const removedMessages = compactableMessages.slice(0, removedCount);
|
|
609
|
+
const keptMessages = compactableMessages.slice(removedCount);
|
|
610
|
+
const summaryLines = removedMessages.map((message, index) => summarizeConversationMessage(message, index));
|
|
611
|
+
const summary = truncateText(summaryLines.join("\n"), CONTEXT_COMPACTION_MAX_SUMMARY_CHARS);
|
|
612
|
+
conversation.length = 0;
|
|
613
|
+
conversation.push(...baseSystemMessages);
|
|
614
|
+
conversation.push({
|
|
615
|
+
role: "system",
|
|
616
|
+
content: [
|
|
617
|
+
CONTEXT_COMPACTION_SUMMARY_PREFIX,
|
|
618
|
+
`${removedCount} earlier compactable conversation messages were summarized to keep the provider request within context limits.`,
|
|
619
|
+
"Preserve the user's goal, decisions, tool results, file paths, errors, and unresolved tasks from this summary. Recent messages below remain authoritative.",
|
|
620
|
+
summary,
|
|
621
|
+
].join("\n"),
|
|
622
|
+
});
|
|
623
|
+
conversation.push(...keptMessages);
|
|
624
|
+
return removedCount;
|
|
625
|
+
}
|
|
626
|
+
function isContextOverflowProviderRequestError(error) {
|
|
627
|
+
const message = getErrorMessage(error).toLowerCase();
|
|
628
|
+
return (message.includes("context_length_exceeded") ||
|
|
629
|
+
message.includes("context length") ||
|
|
630
|
+
message.includes("maximum context") ||
|
|
631
|
+
message.includes("max context") ||
|
|
632
|
+
message.includes("token limit") ||
|
|
633
|
+
message.includes("tokens exceed") ||
|
|
634
|
+
message.includes("too many tokens") ||
|
|
635
|
+
message.includes("input is too long") ||
|
|
636
|
+
message.includes("prompt is too long") ||
|
|
637
|
+
message.includes("request too large") ||
|
|
638
|
+
message.includes("413"));
|
|
639
|
+
}
|
|
475
640
|
function isRetryableProviderRequestError(error) {
|
|
476
641
|
const message = getErrorMessage(error).toLowerCase();
|
|
642
|
+
if (isContextOverflowProviderRequestError(error)) {
|
|
643
|
+
return false;
|
|
644
|
+
}
|
|
477
645
|
return (message.includes("fetch failed") ||
|
|
478
646
|
message.includes("timed out") ||
|
|
479
647
|
message.includes("econnreset") ||
|
|
@@ -484,6 +652,14 @@ function isRetryableProviderRequestError(error) {
|
|
|
484
652
|
message.includes("503") ||
|
|
485
653
|
message.includes("504"));
|
|
486
654
|
}
|
|
655
|
+
function isMcpRequestTimeoutError(error) {
|
|
656
|
+
if (typeof error !== "object" || error === null) {
|
|
657
|
+
return false;
|
|
658
|
+
}
|
|
659
|
+
const code = Reflect.get(error, "code");
|
|
660
|
+
const message = getErrorMessage(error).toLowerCase();
|
|
661
|
+
return code === -32001 || message.includes("request timed out");
|
|
662
|
+
}
|
|
487
663
|
function getErrorType(error) {
|
|
488
664
|
if (typeof error === "object" && error !== null) {
|
|
489
665
|
const code = Reflect.get(error, "code");
|
|
@@ -704,6 +880,7 @@ export class ACodeRuntime extends EventEmitter {
|
|
|
704
880
|
workingDirectory: this.config.workingDirectory,
|
|
705
881
|
model: provider.model,
|
|
706
882
|
commandCount: commands.length,
|
|
883
|
+
estimatedContextTokens: estimateContextTokens(systemPrompt, exposedTools),
|
|
707
884
|
});
|
|
708
885
|
this.emitAcodeEvent("mcp_status", {
|
|
709
886
|
configPath: this.config.configPath,
|
|
@@ -882,12 +1059,17 @@ export class ACodeRuntime extends EventEmitter {
|
|
|
882
1059
|
const toolCalls = Array.isArray(message?.tool_calls)
|
|
883
1060
|
? message.tool_calls
|
|
884
1061
|
: [];
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
1062
|
+
if (response.usage) {
|
|
1063
|
+
const rtInputTokens = response.usage.prompt_tokens ?? response.usage.input_tokens;
|
|
1064
|
+
const rtOutputTokens = response.usage.completion_tokens ?? response.usage.output_tokens;
|
|
1065
|
+
if (typeof rtInputTokens === "number" &&
|
|
1066
|
+
typeof rtOutputTokens === "number") {
|
|
1067
|
+
finalUsage = {
|
|
1068
|
+
inputTokens: rtInputTokens,
|
|
1069
|
+
outputTokens: rtOutputTokens,
|
|
1070
|
+
};
|
|
1071
|
+
}
|
|
1072
|
+
}
|
|
891
1073
|
this.state.conversation.push({
|
|
892
1074
|
role: "assistant",
|
|
893
1075
|
content: content || null,
|
|
@@ -919,26 +1101,42 @@ export class ACodeRuntime extends EventEmitter {
|
|
|
919
1101
|
if (!baseURL) {
|
|
920
1102
|
throw new Error("ACode provider baseURL is not configured");
|
|
921
1103
|
}
|
|
922
|
-
const
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
const allowedTools = this.state.exposedTools.filter((tool) => isToolAllowed(tool, this.state.permissions, commandAllowedTools));
|
|
928
|
-
if (allowedTools.length > 0) {
|
|
929
|
-
body.tools = toOpenAiTools(allowedTools);
|
|
930
|
-
body.tool_choice = "auto";
|
|
1104
|
+
const truncatedCount = truncateConversationIfNeeded(this.state.conversation, MAX_REQUEST_BODY_BYTES);
|
|
1105
|
+
if (truncatedCount > 0) {
|
|
1106
|
+
this.emitAcodeEvent("warning", {
|
|
1107
|
+
message: `Conversation truncated: removed ${truncatedCount} older messages to fit within ${MAX_REQUEST_BODY_BYTES} byte request size limit`,
|
|
1108
|
+
});
|
|
931
1109
|
}
|
|
932
|
-
this.
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
1110
|
+
const allowedTools = this.state.exposedTools.filter((tool) => isToolAllowed(tool, this.state.permissions, commandAllowedTools));
|
|
1111
|
+
const buildBody = () => {
|
|
1112
|
+
const body = {
|
|
1113
|
+
model: provider.model,
|
|
1114
|
+
messages: this.state.conversation,
|
|
1115
|
+
stream: provider.stream,
|
|
1116
|
+
};
|
|
1117
|
+
if (allowedTools.length > 0) {
|
|
1118
|
+
body.tools = toOpenAiTools(allowedTools);
|
|
1119
|
+
body.tool_choice = "auto";
|
|
1120
|
+
}
|
|
1121
|
+
return body;
|
|
1122
|
+
};
|
|
1123
|
+
const emitAiRequest = (body) => {
|
|
1124
|
+
const requestBody = JSON.stringify(body, null, 2);
|
|
1125
|
+
this.emitAcodeEvent("ai_request", {
|
|
1126
|
+
model: provider.model,
|
|
1127
|
+
endpoint: summarizeProviderUrl(baseURL),
|
|
1128
|
+
stream: provider.stream,
|
|
1129
|
+
messageCount: this.state.conversation.length,
|
|
1130
|
+
toolCount: allowedTools.length,
|
|
1131
|
+
lastUserMessagePreview: summarizeLastUserMessage(this.state.conversation),
|
|
1132
|
+
estimatedContextTokens: estimateTokensFromText(requestBody),
|
|
1133
|
+
requestBody,
|
|
1134
|
+
});
|
|
1135
|
+
};
|
|
1136
|
+
let body = buildBody();
|
|
1137
|
+
emitAiRequest(body);
|
|
941
1138
|
const maxAttempts = provider.requestRetryCount + 1;
|
|
1139
|
+
let contextOverflowCompacted = false;
|
|
942
1140
|
for (let attempt = 1; attempt <= maxAttempts; attempt += 1) {
|
|
943
1141
|
this.abortController = new AbortController();
|
|
944
1142
|
let timedOut = false;
|
|
@@ -979,6 +1177,23 @@ export class ACodeRuntime extends EventEmitter {
|
|
|
979
1177
|
requestError =
|
|
980
1178
|
error instanceof Error ? error : new Error(String(error));
|
|
981
1179
|
}
|
|
1180
|
+
if (!contextOverflowCompacted &&
|
|
1181
|
+
!this.abortRequested &&
|
|
1182
|
+
!this.state.terminated &&
|
|
1183
|
+
isContextOverflowProviderRequestError(requestError)) {
|
|
1184
|
+
const compactedCount = compactConversationForContextOverflow(this.state.conversation);
|
|
1185
|
+
contextOverflowCompacted = true;
|
|
1186
|
+
if (compactedCount === 0) {
|
|
1187
|
+
throw requestError;
|
|
1188
|
+
}
|
|
1189
|
+
this.emitAcodeEvent("warning", {
|
|
1190
|
+
message: `ACode provider context limit exceeded; summarized ${compactedCount} older messages and rebuilt the request instead of retrying the same oversized payload`,
|
|
1191
|
+
});
|
|
1192
|
+
body = buildBody();
|
|
1193
|
+
emitAiRequest(body);
|
|
1194
|
+
attempt -= 1;
|
|
1195
|
+
continue;
|
|
1196
|
+
}
|
|
982
1197
|
const shouldRetry = attempt < maxAttempts &&
|
|
983
1198
|
!this.abortRequested &&
|
|
984
1199
|
!this.state.terminated &&
|
|
@@ -1149,13 +1364,11 @@ export class ACodeRuntime extends EventEmitter {
|
|
|
1149
1364
|
arguments: toolArguments,
|
|
1150
1365
|
argumentsPreview: summarizeToolArguments(toolArguments),
|
|
1151
1366
|
});
|
|
1152
|
-
const
|
|
1367
|
+
const isPollingTool = isMcpPollingToolName(tool.toolName);
|
|
1368
|
+
const toolTimeoutMs = isPollingTool
|
|
1153
1369
|
? this.state.provider.mcpPollingToolTimeoutMs
|
|
1154
1370
|
: this.state.provider.mcpToolTimeoutMs;
|
|
1155
|
-
const result = await
|
|
1156
|
-
name: tool.toolName,
|
|
1157
|
-
arguments: toolArguments,
|
|
1158
|
-
}, undefined, { timeout: toolTimeoutMs }), toolTimeoutMs, `ACode MCP tool ${tool.serverName}/${tool.toolName}`);
|
|
1371
|
+
const result = await this.callMcpToolWithTimeout(connection, tool, toolArguments, toolTimeoutMs, isPollingTool);
|
|
1159
1372
|
await this.hookBus.dispatch("PostToolUse", {
|
|
1160
1373
|
source: "mcp",
|
|
1161
1374
|
serverName: tool.serverName,
|
|
@@ -1182,6 +1395,27 @@ export class ACodeRuntime extends EventEmitter {
|
|
|
1182
1395
|
}
|
|
1183
1396
|
}
|
|
1184
1397
|
}
|
|
1398
|
+
async callMcpToolWithTimeout(connection, tool, toolArguments, timeoutMs, retrySdkTimeout) {
|
|
1399
|
+
const sdkTimeout = timeoutMs > 0 ? timeoutMs : MCP_SDK_MAX_SAFE_TIMEOUT_MS;
|
|
1400
|
+
while (true) {
|
|
1401
|
+
try {
|
|
1402
|
+
return await withTimeout(connection.client.callTool({
|
|
1403
|
+
name: tool.toolName,
|
|
1404
|
+
arguments: toolArguments,
|
|
1405
|
+
}, undefined, { timeout: sdkTimeout }), timeoutMs, `ACode MCP tool ${tool.serverName}/${tool.toolName}`);
|
|
1406
|
+
}
|
|
1407
|
+
catch (error) {
|
|
1408
|
+
if (!retrySdkTimeout ||
|
|
1409
|
+
timeoutMs > 0 ||
|
|
1410
|
+
!isMcpRequestTimeoutError(error)) {
|
|
1411
|
+
throw error;
|
|
1412
|
+
}
|
|
1413
|
+
this.emitAcodeEvent("warning", {
|
|
1414
|
+
message: `ACode MCP polling tool ${tool.serverName}/${tool.toolName} reached the MCP SDK timeout window and will continue polling.`,
|
|
1415
|
+
});
|
|
1416
|
+
}
|
|
1417
|
+
}
|
|
1418
|
+
}
|
|
1185
1419
|
async appendSyntheticMultimodalUserMessage(toolResultText) {
|
|
1186
1420
|
const parsedContent = parseAttachmentMessage(toolResultText);
|
|
1187
1421
|
if (!parsedContent.hasImages) {
|
|
@@ -45,7 +45,7 @@ export interface ACodeSkillMetadata {
|
|
|
45
45
|
description?: string;
|
|
46
46
|
directory: string;
|
|
47
47
|
}
|
|
48
|
-
export type ACodeEventType = "session_started" | "ai_request" | "thinking_delta" | "assistant_delta" | "command_status" | "mcp_status" | "skill_status" | "turn_complete" | "session_complete" | "error";
|
|
48
|
+
export type ACodeEventType = "session_started" | "ai_request" | "thinking_delta" | "assistant_delta" | "command_status" | "mcp_status" | "skill_status" | "warning" | "turn_complete" | "session_complete" | "error";
|
|
49
49
|
export interface ACodeEvent {
|
|
50
50
|
type: ACodeEventType;
|
|
51
51
|
sessionId: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,6 +21,10 @@ export declare class ConfigManager {
|
|
|
21
21
|
* 主流程:读取字符串 -> 转为整数 -> 非法值回退默认值并记录警告。
|
|
22
22
|
*/
|
|
23
23
|
private parsePositiveIntegerEnv;
|
|
24
|
+
/**
|
|
25
|
+
* 仅更新 runtimeAccessToken,供 401 恢复时调用。
|
|
26
|
+
*/
|
|
27
|
+
updateRuntimeAccessToken(newToken: string): boolean;
|
|
24
28
|
getAgentConfig(): AgentConfig;
|
|
25
29
|
getServerConfig(): ServerConfig;
|
|
26
30
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AA8GlF,qBAAa,aAAa;IACxB,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,YAAY,CAA6B;IAEjD;;;OAGG;IACH,UAAU,IAAI,IAAI;IA+ClB,yBAAyB,CAAC,OAAO,EAAE,oBAAoB,GAAG,IAAI;IAgD9D,OAAO,CAAC,gCAAgC;IAOxC;;;OAGG;IACH,OAAO,CAAC,uBAAuB;IAa/B,cAAc,IAAI,WAAW;IAO7B,eAAe,IAAI,YAAY;CAMhC;AAED,eAAO,MAAM,aAAa,eAAsB,CAAC"}
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AA8GlF,qBAAa,aAAa;IACxB,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,YAAY,CAA6B;IAEjD;;;OAGG;IACH,UAAU,IAAI,IAAI;IA+ClB,yBAAyB,CAAC,OAAO,EAAE,oBAAoB,GAAG,IAAI;IAgD9D,OAAO,CAAC,gCAAgC;IAOxC;;;OAGG;IACH,OAAO,CAAC,uBAAuB;IAa/B;;OAEG;IACH,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAanD,cAAc,IAAI,WAAW;IAO7B,eAAe,IAAI,YAAY;CAMhC;AAED,eAAO,MAAM,aAAa,eAAsB,CAAC"}
|
|
@@ -207,6 +207,21 @@ export class ConfigManager {
|
|
|
207
207
|
}
|
|
208
208
|
return parsed;
|
|
209
209
|
}
|
|
210
|
+
/**
|
|
211
|
+
* 仅更新 runtimeAccessToken,供 401 恢复时调用。
|
|
212
|
+
*/
|
|
213
|
+
updateRuntimeAccessToken(newToken) {
|
|
214
|
+
if (!this.serverConfig) {
|
|
215
|
+
return false;
|
|
216
|
+
}
|
|
217
|
+
const trimmed = newToken.trim();
|
|
218
|
+
if (!trimmed || trimmed === this.serverConfig.runtimeAccessToken) {
|
|
219
|
+
return false;
|
|
220
|
+
}
|
|
221
|
+
this.serverConfig.runtimeAccessToken = trimmed;
|
|
222
|
+
logger.info(`[Config] runtimeAccessToken 已更新(401 恢复)`);
|
|
223
|
+
return true;
|
|
224
|
+
}
|
|
210
225
|
getAgentConfig() {
|
|
211
226
|
if (!this.agentConfig) {
|
|
212
227
|
throw new Error("Configuration is not loaded. Call loadConfig() first.");
|
|
@@ -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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"}
|
|
@@ -10,6 +10,10 @@ export interface McpToolResponse {
|
|
|
10
10
|
export declare class HttpClient {
|
|
11
11
|
private serverConfig;
|
|
12
12
|
private mcpHttpUrl;
|
|
13
|
+
/**
|
|
14
|
+
* 共享的 token 刷新 Promise,避免并发请求重复刷新。
|
|
15
|
+
*/
|
|
16
|
+
private tokenRefreshPromise;
|
|
13
17
|
constructor(serverConfig: ServerConfig);
|
|
14
18
|
/**
|
|
15
19
|
* 调用 MCP Tool
|
|
@@ -32,6 +36,12 @@ export declare class HttpClient {
|
|
|
32
36
|
*/
|
|
33
37
|
private buildRequestHeaders;
|
|
34
38
|
private ensureRuntimeAccessToken;
|
|
39
|
+
/**
|
|
40
|
+
* 向 bridge 查询最新 token,若获取到新 token 则更新本地配置。
|
|
41
|
+
* 同一时刻仅一个刷新请求生效,并发调用共享同一 Promise。
|
|
42
|
+
*/
|
|
43
|
+
private tryRefreshToken;
|
|
44
|
+
private doRefreshToken;
|
|
35
45
|
/**
|
|
36
46
|
* 解析 MCP HTTP URL
|
|
37
47
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-client.d.ts","sourceRoot":"","sources":["../src/http-client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAkED,qBAAa,UAAU;IACrB,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,UAAU,CAAS;
|
|
1
|
+
{"version":3,"file":"http-client.d.ts","sourceRoot":"","sources":["../src/http-client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAkED,qBAAa,UAAU;IACrB,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,UAAU,CAAS;IAC3B;;OAEG;IACH,OAAO,CAAC,mBAAmB,CAAiC;gBAEhD,YAAY,EAAE,YAAY;IAKtC;;OAEG;IACG,QAAQ,CAAC,CAAC,GAAG,OAAO,EACxB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,CAAC,CAAC;IAsDb;;;OAGG;YACW,kBAAkB;IAkBhC;;;OAGG;YACW,gBAAgB;IAwB9B,OAAO,CAAC,uBAAuB;IAY/B;;;OAGG;IACH,OAAO,CAAC,mBAAmB;YAcb,wBAAwB;IAatC;;;OAGG;YACW,eAAe;YAef,cAAc;IAqD5B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAmBzB;;OAEG;IACH,aAAa,IAAI,MAAM;CAGxB"}
|
|
@@ -63,6 +63,10 @@ function normalizeMcpHttpUrl(value, options = {}) {
|
|
|
63
63
|
export class HttpClient {
|
|
64
64
|
serverConfig;
|
|
65
65
|
mcpHttpUrl;
|
|
66
|
+
/**
|
|
67
|
+
* 共享的 token 刷新 Promise,避免并发请求重复刷新。
|
|
68
|
+
*/
|
|
69
|
+
tokenRefreshPromise = null;
|
|
66
70
|
constructor(serverConfig) {
|
|
67
71
|
this.serverConfig = serverConfig;
|
|
68
72
|
this.mcpHttpUrl = this.resolveMcpHttpUrl();
|
|
@@ -74,7 +78,23 @@ export class HttpClient {
|
|
|
74
78
|
await this.ensureRuntimeAccessToken();
|
|
75
79
|
const response = await this.executeToolRequest(toolName, args);
|
|
76
80
|
if (response.status === 401) {
|
|
77
|
-
logger.warn(`[HttpClient] MCP Tool ${toolName} 返回 401
|
|
81
|
+
logger.warn(`[HttpClient] MCP Tool ${toolName} 返回 401,尝试向 bridge 刷新 token`);
|
|
82
|
+
const refreshed = await this.tryRefreshToken(args);
|
|
83
|
+
if (refreshed) {
|
|
84
|
+
const retryResponse = await this.executeToolRequest(toolName, args);
|
|
85
|
+
if (!retryResponse.ok) {
|
|
86
|
+
const responseBody = typeof retryResponse.text === "function"
|
|
87
|
+
? formatErrorResponseBody(await retryResponse.text().catch(() => ""))
|
|
88
|
+
: "";
|
|
89
|
+
throw new Error(`MCP tool ${toolName} call failed: ${retryResponse.status} ${retryResponse.statusText}${responseBody ? ` - ${responseBody}` : ""}`);
|
|
90
|
+
}
|
|
91
|
+
const retryResult = (await retryResponse.json());
|
|
92
|
+
if (typeof retryResult.error === "string" && retryResult.error.trim().length > 0) {
|
|
93
|
+
throw new Error(`MCP tool ${toolName} failed: ${retryResult.error}`);
|
|
94
|
+
}
|
|
95
|
+
return retryResult;
|
|
96
|
+
}
|
|
97
|
+
logger.warn(`[HttpClient] token 刷新失败或无新 token,返回原始 401 错误`);
|
|
78
98
|
}
|
|
79
99
|
if (!response.ok) {
|
|
80
100
|
const responseBody = typeof response.text === "function"
|
|
@@ -157,6 +177,64 @@ export class HttpClient {
|
|
|
157
177
|
}
|
|
158
178
|
throw new Error("runtimeAccessToken is required; MCP nodes must claim a session token from launch binding");
|
|
159
179
|
}
|
|
180
|
+
/**
|
|
181
|
+
* 向 bridge 查询最新 token,若获取到新 token 则更新本地配置。
|
|
182
|
+
* 同一时刻仅一个刷新请求生效,并发调用共享同一 Promise。
|
|
183
|
+
*/
|
|
184
|
+
async tryRefreshToken(args) {
|
|
185
|
+
if (this.tokenRefreshPromise) {
|
|
186
|
+
return this.tokenRefreshPromise;
|
|
187
|
+
}
|
|
188
|
+
this.tokenRefreshPromise = this.doRefreshToken(args);
|
|
189
|
+
try {
|
|
190
|
+
return await this.tokenRefreshPromise;
|
|
191
|
+
}
|
|
192
|
+
finally {
|
|
193
|
+
this.tokenRefreshPromise = null;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
async doRefreshToken(args) {
|
|
197
|
+
const bridgeBaseUrl = this.serverConfig.runtimeBridgeBaseUrl;
|
|
198
|
+
if (!bridgeBaseUrl) {
|
|
199
|
+
logger.warn("[HttpClient] 无 runtimeBridgeBaseUrl,无法刷新 token");
|
|
200
|
+
return false;
|
|
201
|
+
}
|
|
202
|
+
const agentId = String(args?.agentId || "").trim();
|
|
203
|
+
if (!agentId) {
|
|
204
|
+
logger.warn("[HttpClient] 无 agentId,无法刷新 token");
|
|
205
|
+
return false;
|
|
206
|
+
}
|
|
207
|
+
try {
|
|
208
|
+
const response = await fetch(`${bridgeBaseUrl}/runtime/binding/refresh-token`, {
|
|
209
|
+
method: "POST",
|
|
210
|
+
headers: { "Content-Type": "application/json" },
|
|
211
|
+
body: JSON.stringify({
|
|
212
|
+
agentId,
|
|
213
|
+
currentToken: this.serverConfig.runtimeAccessToken || "",
|
|
214
|
+
}),
|
|
215
|
+
});
|
|
216
|
+
if (!response.ok) {
|
|
217
|
+
logger.warn(`[HttpClient] bridge refresh-token 返回 ${response.status},无法刷新`);
|
|
218
|
+
return false;
|
|
219
|
+
}
|
|
220
|
+
const data = (await response.json());
|
|
221
|
+
const newToken = data.runtimeAccessToken;
|
|
222
|
+
if (!newToken) {
|
|
223
|
+
logger.warn("[HttpClient] bridge 未返回新 token");
|
|
224
|
+
return false;
|
|
225
|
+
}
|
|
226
|
+
if (newToken === this.serverConfig.runtimeAccessToken) {
|
|
227
|
+
return false;
|
|
228
|
+
}
|
|
229
|
+
this.serverConfig.runtimeAccessToken = newToken;
|
|
230
|
+
logger.info(`[HttpClient] runtimeAccessToken 已通过 bridge refresh 更新`);
|
|
231
|
+
return true;
|
|
232
|
+
}
|
|
233
|
+
catch (error) {
|
|
234
|
+
logger.warn(`[HttpClient] 刷新 token 失败: ${error instanceof Error ? error.message : String(error)}`);
|
|
235
|
+
return false;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
160
238
|
/**
|
|
161
239
|
* 解析 MCP HTTP URL
|
|
162
240
|
*/
|