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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AcodeSdkAdapter.d.ts","sourceRoot":"","sources":["../../src/adapter/AcodeSdkAdapter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"AcodeSdkAdapter.d.ts","sourceRoot":"","sources":["../../src/adapter/AcodeSdkAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,7 +11,7 @@ import { v4 as uuidv4 } from "uuid";
|
|
|
11
11
|
import { getAcodeConfigFile, getAcodeSkillsDir, getRuntimeHomeDir, } from "../config.js";
|
|
12
12
|
import { getReleasedAcodeEntryPath } from "../services/acode-package.js";
|
|
13
13
|
import { IdlePollLoop } from "./idle-poll-loop.js";
|
|
14
|
-
import { getCanonicalMcpDetail, getToolActionInfo
|
|
14
|
+
import { getCanonicalMcpDetail, getToolActionInfo } from "./types.js";
|
|
15
15
|
const ACODE_AUTO_POLL_PROMPT = [
|
|
16
16
|
"Continue the AgentsWork message loop now.",
|
|
17
17
|
"You MUST call the exact MCP tool named aws-mcp__poll_message as your next action and wait for the next assigned message or task.",
|
|
@@ -46,6 +46,9 @@ function toUsage(value) {
|
|
|
46
46
|
const usage = value;
|
|
47
47
|
const inputTokens = toFiniteTokenCount(usage.inputTokens, usage.input_tokens, usage.promptTokens, usage.prompt_tokens);
|
|
48
48
|
const outputTokens = toFiniteTokenCount(usage.outputTokens, usage.output_tokens, usage.completionTokens, usage.completion_tokens);
|
|
49
|
+
if (inputTokens === 0 && outputTokens === 0) {
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
49
52
|
return {
|
|
50
53
|
inputTokens,
|
|
51
54
|
outputTokens,
|
|
@@ -60,6 +63,9 @@ function toFiniteTokenCount(...values) {
|
|
|
60
63
|
}
|
|
61
64
|
return 0;
|
|
62
65
|
}
|
|
66
|
+
function toEstimatedContextTokens(data) {
|
|
67
|
+
return toFiniteTokenCount(data.estimatedContextTokens, data.contextTokens, data.context_tokens, data.contextUsedTokens, data.context_used_tokens);
|
|
68
|
+
}
|
|
63
69
|
/**
|
|
64
70
|
* Check whether an ACode turn_complete event represents a failed turn.
|
|
65
71
|
* Main flow: only explicit failed=true prevents error status from being reset to waiting_input.
|
|
@@ -77,6 +83,36 @@ function toAcodeMcpActionDetail(actionDetail, server, tool) {
|
|
|
77
83
|
}
|
|
78
84
|
return getCanonicalMcpDetail(actionDetail.replace("/", "__"));
|
|
79
85
|
}
|
|
86
|
+
function isAcodeSemanticToolAction(actionType) {
|
|
87
|
+
return (actionType === "read_file" ||
|
|
88
|
+
actionType === "edit_file" ||
|
|
89
|
+
actionType === "write_file" ||
|
|
90
|
+
actionType === "bash");
|
|
91
|
+
}
|
|
92
|
+
function hasPollingMessages(result) {
|
|
93
|
+
const parsed = parseToolResultObject(result);
|
|
94
|
+
if (!parsed) {
|
|
95
|
+
return typeof result === "string" && result.trim().length > 0;
|
|
96
|
+
}
|
|
97
|
+
return [parsed.directMessages, parsed.groupMessages, parsed.messages].some((value) => Array.isArray(value) && value.length > 0);
|
|
98
|
+
}
|
|
99
|
+
function parseToolResultObject(result) {
|
|
100
|
+
if (result && typeof result === "object" && !Array.isArray(result)) {
|
|
101
|
+
return result;
|
|
102
|
+
}
|
|
103
|
+
if (typeof result !== "string" || !result.trim()) {
|
|
104
|
+
return undefined;
|
|
105
|
+
}
|
|
106
|
+
try {
|
|
107
|
+
const parsed = JSON.parse(result);
|
|
108
|
+
return parsed && typeof parsed === "object" && !Array.isArray(parsed)
|
|
109
|
+
? parsed
|
|
110
|
+
: undefined;
|
|
111
|
+
}
|
|
112
|
+
catch {
|
|
113
|
+
return undefined;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
80
116
|
export class AcodeSdkAdapter extends EventEmitter {
|
|
81
117
|
constructor() {
|
|
82
118
|
super(...arguments);
|
|
@@ -107,7 +143,9 @@ export class AcodeSdkAdapter extends EventEmitter {
|
|
|
107
143
|
try {
|
|
108
144
|
await entry.runtime.start();
|
|
109
145
|
session.status = "waiting_input";
|
|
110
|
-
this.emit("status-change", sessionId, "waiting_input"
|
|
146
|
+
this.emit("status-change", sessionId, "waiting_input", {
|
|
147
|
+
usage: entry.adapterSession.totalUsage,
|
|
148
|
+
});
|
|
111
149
|
if (config.initialPrompt?.trim()) {
|
|
112
150
|
this.startInitialPromptTurn(sessionId, config.initialPrompt);
|
|
113
151
|
}
|
|
@@ -280,6 +318,9 @@ export class AcodeSdkAdapter extends EventEmitter {
|
|
|
280
318
|
}
|
|
281
319
|
if (event.type === "assistant_delta") {
|
|
282
320
|
const text = typeof event.data.text === "string" ? event.data.text : "";
|
|
321
|
+
if (entry.autoPollActive) {
|
|
322
|
+
entry.autoPollObservedAssistantText = true;
|
|
323
|
+
}
|
|
283
324
|
entry.adapterSession.messages.push({
|
|
284
325
|
id: uuidv4(),
|
|
285
326
|
sessionId: event.sessionId,
|
|
@@ -296,6 +337,14 @@ export class AcodeSdkAdapter extends EventEmitter {
|
|
|
296
337
|
return;
|
|
297
338
|
}
|
|
298
339
|
if (event.type === "ai_request") {
|
|
340
|
+
const estimatedTokens = toEstimatedContextTokens(event.data);
|
|
341
|
+
if (estimatedTokens > 0) {
|
|
342
|
+
entry.adapterSession.totalUsage.inputTokens = estimatedTokens;
|
|
343
|
+
entry.adapterSession.totalUsage.outputTokens = 0;
|
|
344
|
+
this.emit("status-change", event.sessionId, entry.adapterSession.status, {
|
|
345
|
+
usage: entry.adapterSession.totalUsage,
|
|
346
|
+
});
|
|
347
|
+
}
|
|
299
348
|
this.emitProviderEvent(event, "ai_request", {
|
|
300
349
|
model: typeof event.data.model === "string" ? event.data.model : undefined,
|
|
301
350
|
endpoint: typeof event.data.endpoint === "string"
|
|
@@ -354,6 +403,13 @@ export class AcodeSdkAdapter extends EventEmitter {
|
|
|
354
403
|
this.emit("status-change", event.sessionId, "waiting_input", {
|
|
355
404
|
usage: entry.adapterSession.totalUsage,
|
|
356
405
|
});
|
|
406
|
+
if (entry.autoPollActive &&
|
|
407
|
+
entry.autoPollObservedAssistantText &&
|
|
408
|
+
!entry.autoPollObservedPollingTool) {
|
|
409
|
+
entry.stopAutoPollAfterCurrentTurn = true;
|
|
410
|
+
console.warn(`[${this.displayName}] Auto-poll turn produced assistant text without calling poll_message; stopping auto-poll rearm for session ${event.sessionId}`);
|
|
411
|
+
return;
|
|
412
|
+
}
|
|
357
413
|
this.armIdleLoopOrAutoPoll(event.sessionId);
|
|
358
414
|
return;
|
|
359
415
|
}
|
|
@@ -415,8 +471,19 @@ export class AcodeSdkAdapter extends EventEmitter {
|
|
|
415
471
|
const server = typeof event.data.server === "string" ? event.data.server : "mcp";
|
|
416
472
|
const tool = typeof event.data.tool === "string" ? event.data.tool : "";
|
|
417
473
|
const toolName = server && tool ? `${server}__${tool}` : tool || server;
|
|
418
|
-
const
|
|
419
|
-
|
|
474
|
+
const toolInput = event.data.arguments &&
|
|
475
|
+
typeof event.data.arguments === "object" &&
|
|
476
|
+
!Array.isArray(event.data.arguments)
|
|
477
|
+
? event.data.arguments
|
|
478
|
+
: undefined;
|
|
479
|
+
const actionInfo = getToolActionInfo(toolName, toolInput);
|
|
480
|
+
if (entry.autoPollActive && actionInfo.actionType === "idle") {
|
|
481
|
+
entry.autoPollObservedPollingTool = true;
|
|
482
|
+
}
|
|
483
|
+
const actionDetail = isAcodeSemanticToolAction(actionInfo.actionType)
|
|
484
|
+
? actionInfo.actionDetail ||
|
|
485
|
+
toAcodeMcpActionDetail(undefined, server, tool)
|
|
486
|
+
: toAcodeMcpActionDetail(actionInfo.actionDetail, server, tool);
|
|
420
487
|
const toolUseId = typeof event.data.toolUseId === "string"
|
|
421
488
|
? event.data.toolUseId
|
|
422
489
|
: undefined;
|
|
@@ -425,6 +492,7 @@ export class AcodeSdkAdapter extends EventEmitter {
|
|
|
425
492
|
actionType: actionInfo.actionType,
|
|
426
493
|
actionLabel: actionInfo.actionLabel,
|
|
427
494
|
actionDetail,
|
|
495
|
+
...(toolInput ? { toolInput } : {}),
|
|
428
496
|
...(toolUseId ? { toolUseId, actionId: toolUseId } : {}),
|
|
429
497
|
};
|
|
430
498
|
if (event.data.action === "tool_result") {
|
|
@@ -434,8 +502,12 @@ export class AcodeSdkAdapter extends EventEmitter {
|
|
|
434
502
|
? event.data.result
|
|
435
503
|
: JSON.stringify(event.data.result ?? ""),
|
|
436
504
|
});
|
|
437
|
-
|
|
438
|
-
|
|
505
|
+
const status = actionInfo.actionType === "idle" &&
|
|
506
|
+
!hasPollingMessages(event.data.result)
|
|
507
|
+
? "waiting_input"
|
|
508
|
+
: "thinking";
|
|
509
|
+
entry.adapterSession.status = status;
|
|
510
|
+
this.emit("status-change", event.sessionId, status);
|
|
439
511
|
return;
|
|
440
512
|
}
|
|
441
513
|
const status = actionInfo.actionType === "idle" ? "waiting_input" : "tool_using";
|
|
@@ -444,6 +516,17 @@ export class AcodeSdkAdapter extends EventEmitter {
|
|
|
444
516
|
this.emit("status-change", event.sessionId, status, eventData);
|
|
445
517
|
return;
|
|
446
518
|
}
|
|
519
|
+
if (event.type === "session_started") {
|
|
520
|
+
const estimatedTokens = toEstimatedContextTokens(event.data);
|
|
521
|
+
if (estimatedTokens > 0) {
|
|
522
|
+
entry.adapterSession.totalUsage.inputTokens = estimatedTokens;
|
|
523
|
+
entry.adapterSession.totalUsage.outputTokens = 0;
|
|
524
|
+
this.emit("status-change", event.sessionId, entry.adapterSession.status, {
|
|
525
|
+
usage: entry.adapterSession.totalUsage,
|
|
526
|
+
});
|
|
527
|
+
}
|
|
528
|
+
return;
|
|
529
|
+
}
|
|
447
530
|
this.emitProviderEvent(event, "thinking", {
|
|
448
531
|
text: JSON.stringify(event.data),
|
|
449
532
|
});
|
|
@@ -489,6 +572,9 @@ export class AcodeSdkAdapter extends EventEmitter {
|
|
|
489
572
|
if (!entry || this.isTerminalStatus(entry.adapterSession.status))
|
|
490
573
|
return;
|
|
491
574
|
entry.autoPollActive = true;
|
|
575
|
+
entry.autoPollObservedPollingTool = false;
|
|
576
|
+
entry.autoPollObservedAssistantText = false;
|
|
577
|
+
entry.stopAutoPollAfterCurrentTurn = false;
|
|
492
578
|
entry.adapterSession.status = "thinking";
|
|
493
579
|
this.emit("status-change", sessionId, "thinking");
|
|
494
580
|
void entry.runtime
|
|
@@ -511,6 +597,12 @@ export class AcodeSdkAdapter extends EventEmitter {
|
|
|
511
597
|
latestEntry.failedTurnRecoveryScheduled = false;
|
|
512
598
|
return;
|
|
513
599
|
}
|
|
600
|
+
if (latestEntry.stopAutoPollAfterCurrentTurn) {
|
|
601
|
+
latestEntry.stopAutoPollAfterCurrentTurn = false;
|
|
602
|
+
latestEntry.autoPollObservedPollingTool = false;
|
|
603
|
+
latestEntry.autoPollObservedAssistantText = false;
|
|
604
|
+
return;
|
|
605
|
+
}
|
|
514
606
|
if (latestEntry.adapterSession.status === "error") {
|
|
515
607
|
this.recoverTurnFailure(sessionId, latestEntry);
|
|
516
608
|
return;
|
|
@@ -46,6 +46,30 @@ class McpStatusRuntime extends EventEmitter {
|
|
|
46
46
|
async abort() { }
|
|
47
47
|
async stop() { }
|
|
48
48
|
}
|
|
49
|
+
class BuiltinReadStatusRuntime extends EventEmitter {
|
|
50
|
+
constructor(config) {
|
|
51
|
+
super();
|
|
52
|
+
this.config = config;
|
|
53
|
+
}
|
|
54
|
+
async start() { }
|
|
55
|
+
async submit(_message) {
|
|
56
|
+
this.emit("event", {
|
|
57
|
+
type: "mcp_status",
|
|
58
|
+
sessionId: this.config.sessionId,
|
|
59
|
+
timestamp: new Date(0).toISOString(),
|
|
60
|
+
data: {
|
|
61
|
+
action: "call_tool",
|
|
62
|
+
server: "builtin",
|
|
63
|
+
tool: "read_file",
|
|
64
|
+
exposedName: "builtin/read_file",
|
|
65
|
+
toolUseId: "tool-read-1",
|
|
66
|
+
arguments: { path: "src/views/App.vue" },
|
|
67
|
+
},
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
async abort() { }
|
|
71
|
+
async stop() { }
|
|
72
|
+
}
|
|
49
73
|
class McpResultRuntime extends EventEmitter {
|
|
50
74
|
constructor(config) {
|
|
51
75
|
super();
|
|
@@ -97,6 +121,65 @@ class PollMessageStatusRuntime extends EventEmitter {
|
|
|
97
121
|
async abort() { }
|
|
98
122
|
async stop() { }
|
|
99
123
|
}
|
|
124
|
+
class EmptyPollResultRuntime extends EventEmitter {
|
|
125
|
+
constructor(config) {
|
|
126
|
+
super();
|
|
127
|
+
this.config = config;
|
|
128
|
+
}
|
|
129
|
+
async start() { }
|
|
130
|
+
async submit(_message) {
|
|
131
|
+
this.emit("event", {
|
|
132
|
+
type: "mcp_status",
|
|
133
|
+
sessionId: this.config.sessionId,
|
|
134
|
+
timestamp: new Date(0).toISOString(),
|
|
135
|
+
data: { action: "call_tool", server: "aws-mcp", tool: "poll_message" },
|
|
136
|
+
});
|
|
137
|
+
this.emit("event", {
|
|
138
|
+
type: "mcp_status",
|
|
139
|
+
sessionId: this.config.sessionId,
|
|
140
|
+
timestamp: new Date(0).toISOString(),
|
|
141
|
+
data: {
|
|
142
|
+
action: "tool_result",
|
|
143
|
+
server: "aws-mcp",
|
|
144
|
+
tool: "poll_message",
|
|
145
|
+
result: JSON.stringify({ directMessages: [], groupMessages: [] }),
|
|
146
|
+
},
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
async abort() { }
|
|
150
|
+
async stop() { }
|
|
151
|
+
}
|
|
152
|
+
class PollResultWithMessageRuntime extends EventEmitter {
|
|
153
|
+
constructor(config) {
|
|
154
|
+
super();
|
|
155
|
+
this.config = config;
|
|
156
|
+
}
|
|
157
|
+
async start() { }
|
|
158
|
+
async submit(_message) {
|
|
159
|
+
this.emit("event", {
|
|
160
|
+
type: "mcp_status",
|
|
161
|
+
sessionId: this.config.sessionId,
|
|
162
|
+
timestamp: new Date(0).toISOString(),
|
|
163
|
+
data: { action: "call_tool", server: "aws-mcp", tool: "poll_message" },
|
|
164
|
+
});
|
|
165
|
+
this.emit("event", {
|
|
166
|
+
type: "mcp_status",
|
|
167
|
+
sessionId: this.config.sessionId,
|
|
168
|
+
timestamp: new Date(0).toISOString(),
|
|
169
|
+
data: {
|
|
170
|
+
action: "tool_result",
|
|
171
|
+
server: "aws-mcp",
|
|
172
|
+
tool: "poll_message",
|
|
173
|
+
result: JSON.stringify({
|
|
174
|
+
directMessages: [{ senderName: "User", content: "ping" }],
|
|
175
|
+
groupMessages: [],
|
|
176
|
+
}),
|
|
177
|
+
},
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
async abort() { }
|
|
181
|
+
async stop() { }
|
|
182
|
+
}
|
|
100
183
|
class CommandStatusRuntime extends EventEmitter {
|
|
101
184
|
constructor(config) {
|
|
102
185
|
super();
|
|
@@ -132,6 +215,7 @@ class AiRequestRuntime extends EventEmitter {
|
|
|
132
215
|
messageCount: 3,
|
|
133
216
|
toolCount: 2,
|
|
134
217
|
lastUserMessagePreview: "inspect status",
|
|
218
|
+
estimatedContextTokens: 6800,
|
|
135
219
|
requestBody: '{"model":"test-model"}',
|
|
136
220
|
},
|
|
137
221
|
});
|
|
@@ -294,6 +378,56 @@ class AutoPollRuntime extends EventEmitter {
|
|
|
294
378
|
async stop() { }
|
|
295
379
|
}
|
|
296
380
|
AutoPollRuntime.submitMessages = [];
|
|
381
|
+
class NonPollingAutoPollRuntime extends EventEmitter {
|
|
382
|
+
constructor(config) {
|
|
383
|
+
super();
|
|
384
|
+
this.config = config;
|
|
385
|
+
}
|
|
386
|
+
async start() { }
|
|
387
|
+
async submit(message) {
|
|
388
|
+
NonPollingAutoPollRuntime.submitMessages.push(message);
|
|
389
|
+
this.emit("event", {
|
|
390
|
+
type: "assistant_delta",
|
|
391
|
+
sessionId: this.config.sessionId,
|
|
392
|
+
timestamp: new Date(0).toISOString(),
|
|
393
|
+
data: { text: "I cannot call poll_message." },
|
|
394
|
+
});
|
|
395
|
+
this.emit("event", {
|
|
396
|
+
type: "turn_complete",
|
|
397
|
+
sessionId: this.config.sessionId,
|
|
398
|
+
timestamp: new Date(0).toISOString(),
|
|
399
|
+
data: { usage: { inputTokens: 1, outputTokens: 1 } },
|
|
400
|
+
});
|
|
401
|
+
}
|
|
402
|
+
async abort() { }
|
|
403
|
+
async stop() { }
|
|
404
|
+
}
|
|
405
|
+
NonPollingAutoPollRuntime.submitMessages = [];
|
|
406
|
+
class PollingAutoPollRuntime extends EventEmitter {
|
|
407
|
+
constructor(config) {
|
|
408
|
+
super();
|
|
409
|
+
this.config = config;
|
|
410
|
+
}
|
|
411
|
+
async start() { }
|
|
412
|
+
async submit(message) {
|
|
413
|
+
PollingAutoPollRuntime.submitMessages.push(message);
|
|
414
|
+
this.emit("event", {
|
|
415
|
+
type: "mcp_status",
|
|
416
|
+
sessionId: this.config.sessionId,
|
|
417
|
+
timestamp: new Date(0).toISOString(),
|
|
418
|
+
data: { action: "call_tool", server: "aws-mcp", tool: "poll_message" },
|
|
419
|
+
});
|
|
420
|
+
this.emit("event", {
|
|
421
|
+
type: "turn_complete",
|
|
422
|
+
sessionId: this.config.sessionId,
|
|
423
|
+
timestamp: new Date(0).toISOString(),
|
|
424
|
+
data: { usage: { inputTokens: 1, outputTokens: 1 } },
|
|
425
|
+
});
|
|
426
|
+
}
|
|
427
|
+
async abort() { }
|
|
428
|
+
async stop() { }
|
|
429
|
+
}
|
|
430
|
+
PollingAutoPollRuntime.submitMessages = [];
|
|
297
431
|
class TerminalAfterTurnRuntime extends EventEmitter {
|
|
298
432
|
constructor(config) {
|
|
299
433
|
super();
|
|
@@ -546,7 +680,11 @@ describe("AcodeSdkAdapter turn completion state", () => {
|
|
|
546
680
|
const adapter = new AcodeSdkAdapter();
|
|
547
681
|
adapter.setRuntimeConstructorForTest(ResponseBodyTurnCompleteRuntime);
|
|
548
682
|
const events = [];
|
|
683
|
+
const statuses = [];
|
|
549
684
|
adapter.on("event", (event) => events.push(event));
|
|
685
|
+
adapter.on("status-change", (_sessionId, status, actionInfo) => {
|
|
686
|
+
statuses.push({ status, usage: actionInfo?.usage });
|
|
687
|
+
});
|
|
550
688
|
await adapter.startSession("session-response-body", {
|
|
551
689
|
command: "acode",
|
|
552
690
|
workingDirectory: process.cwd(),
|
|
@@ -633,6 +771,42 @@ describe("AcodeSdkAdapter turn completion state", () => {
|
|
|
633
771
|
});
|
|
634
772
|
expect(adapter.getSessionStatus("session-mcp")).toBe("waiting_input");
|
|
635
773
|
});
|
|
774
|
+
it("preserves built-in file tool arguments in ACode provider events and statuses", async () => {
|
|
775
|
+
const adapter = new AcodeSdkAdapter();
|
|
776
|
+
adapter.setRuntimeConstructorForTest(BuiltinReadStatusRuntime);
|
|
777
|
+
const events = [];
|
|
778
|
+
const statuses = [];
|
|
779
|
+
adapter.on("event", (event) => events.push(event));
|
|
780
|
+
adapter.on("status-change", (_sessionId, status, actionInfo) => {
|
|
781
|
+
statuses.push({
|
|
782
|
+
status,
|
|
783
|
+
actionType: actionInfo?.actionType,
|
|
784
|
+
actionDetail: actionInfo?.actionDetail,
|
|
785
|
+
});
|
|
786
|
+
});
|
|
787
|
+
await adapter.startSession("session-builtin-read", {
|
|
788
|
+
command: "acode",
|
|
789
|
+
workingDirectory: process.cwd(),
|
|
790
|
+
autoAccept: true,
|
|
791
|
+
extraMcpServers: {},
|
|
792
|
+
envOverrides: {},
|
|
793
|
+
});
|
|
794
|
+
await adapter.sendMessage("session-builtin-read", "read file");
|
|
795
|
+
expect(events.map((event) => event.type)).toEqual(["tool_use_start"]);
|
|
796
|
+
expect(events[0]?.data).toMatchObject({
|
|
797
|
+
actionType: "read_file",
|
|
798
|
+
actionLabel: "读取文件",
|
|
799
|
+
actionDetail: "src/views/App.vue",
|
|
800
|
+
actionId: "tool-read-1",
|
|
801
|
+
toolUseId: "tool-read-1",
|
|
802
|
+
toolInput: { path: "src/views/App.vue" },
|
|
803
|
+
});
|
|
804
|
+
expect(statuses.at(-2)).toEqual({
|
|
805
|
+
status: "tool_using",
|
|
806
|
+
actionType: "read_file",
|
|
807
|
+
actionDetail: "src/views/App.vue",
|
|
808
|
+
});
|
|
809
|
+
});
|
|
636
810
|
it("clears active MCP tool status when ACode reports a tool result", async () => {
|
|
637
811
|
const adapter = new AcodeSdkAdapter();
|
|
638
812
|
adapter.setRuntimeConstructorForTest(McpResultRuntime);
|
|
@@ -712,6 +886,63 @@ describe("AcodeSdkAdapter turn completion state", () => {
|
|
|
712
886
|
});
|
|
713
887
|
expect(adapter.getSessionStatus("session-poll-message")).toBe("waiting_input");
|
|
714
888
|
});
|
|
889
|
+
it("keeps empty poll_message results in waiting_input instead of showing stuck thinking", async () => {
|
|
890
|
+
const adapter = new AcodeSdkAdapter();
|
|
891
|
+
adapter.setRuntimeConstructorForTest(EmptyPollResultRuntime);
|
|
892
|
+
const events = [];
|
|
893
|
+
const statuses = [];
|
|
894
|
+
adapter.on("event", (event) => events.push(event));
|
|
895
|
+
adapter.on("status-change", (_sessionId, status) => statuses.push(status));
|
|
896
|
+
await adapter.startSession("session-empty-poll-result", {
|
|
897
|
+
command: "acode",
|
|
898
|
+
workingDirectory: process.cwd(),
|
|
899
|
+
autoAccept: true,
|
|
900
|
+
extraMcpServers: {},
|
|
901
|
+
envOverrides: {},
|
|
902
|
+
});
|
|
903
|
+
await adapter.sendMessage("session-empty-poll-result", "listen");
|
|
904
|
+
expect(events.map((event) => event.type)).toEqual([
|
|
905
|
+
"tool_use_start",
|
|
906
|
+
"tool_use_end",
|
|
907
|
+
]);
|
|
908
|
+
expect(statuses).toEqual([
|
|
909
|
+
"starting",
|
|
910
|
+
"waiting_input",
|
|
911
|
+
"thinking",
|
|
912
|
+
"waiting_input",
|
|
913
|
+
"waiting_input",
|
|
914
|
+
]);
|
|
915
|
+
expect(adapter.getSessionStatus("session-empty-poll-result")).toBe("waiting_input");
|
|
916
|
+
});
|
|
917
|
+
it("shows thinking after poll_message returns actual messages to process", async () => {
|
|
918
|
+
const adapter = new AcodeSdkAdapter();
|
|
919
|
+
adapter.setRuntimeConstructorForTest(PollResultWithMessageRuntime);
|
|
920
|
+
const events = [];
|
|
921
|
+
const statuses = [];
|
|
922
|
+
adapter.on("event", (event) => events.push(event));
|
|
923
|
+
adapter.on("status-change", (_sessionId, status) => statuses.push(status));
|
|
924
|
+
await adapter.startSession("session-poll-result-with-message", {
|
|
925
|
+
command: "acode",
|
|
926
|
+
workingDirectory: process.cwd(),
|
|
927
|
+
autoAccept: true,
|
|
928
|
+
extraMcpServers: {},
|
|
929
|
+
envOverrides: {},
|
|
930
|
+
});
|
|
931
|
+
await adapter.sendMessage("session-poll-result-with-message", "listen");
|
|
932
|
+
expect(events.map((event) => event.type)).toEqual([
|
|
933
|
+
"tool_use_start",
|
|
934
|
+
"tool_use_end",
|
|
935
|
+
]);
|
|
936
|
+
expect(statuses).toEqual([
|
|
937
|
+
"starting",
|
|
938
|
+
"waiting_input",
|
|
939
|
+
"thinking",
|
|
940
|
+
"waiting_input",
|
|
941
|
+
"thinking",
|
|
942
|
+
"waiting_input",
|
|
943
|
+
]);
|
|
944
|
+
expect(adapter.getSessionStatus("session-poll-result-with-message")).toBe("waiting_input");
|
|
945
|
+
});
|
|
715
946
|
it("forwards ACode command status as thinking without changing session status", async () => {
|
|
716
947
|
const adapter = new AcodeSdkAdapter();
|
|
717
948
|
adapter.setRuntimeConstructorForTest(CommandStatusRuntime);
|
|
@@ -742,7 +973,11 @@ describe("AcodeSdkAdapter turn completion state", () => {
|
|
|
742
973
|
const adapter = new AcodeSdkAdapter();
|
|
743
974
|
adapter.setRuntimeConstructorForTest(AiRequestRuntime);
|
|
744
975
|
const events = [];
|
|
976
|
+
const statuses = [];
|
|
745
977
|
adapter.on("event", (event) => events.push(event));
|
|
978
|
+
adapter.on("status-change", (_sessionId, status, actionInfo) => {
|
|
979
|
+
statuses.push({ status, usage: actionInfo?.usage });
|
|
980
|
+
});
|
|
746
981
|
await adapter.startSession("session-ai-request", {
|
|
747
982
|
command: "acode",
|
|
748
983
|
workingDirectory: process.cwd(),
|
|
@@ -764,6 +999,10 @@ describe("AcodeSdkAdapter turn completion state", () => {
|
|
|
764
999
|
requestBody: '{"model":"test-model"}',
|
|
765
1000
|
},
|
|
766
1001
|
});
|
|
1002
|
+
expect(statuses).toContainEqual({
|
|
1003
|
+
status: "thinking",
|
|
1004
|
+
usage: { inputTokens: 6800, outputTokens: 0 },
|
|
1005
|
+
});
|
|
767
1006
|
});
|
|
768
1007
|
it("forwards ACode thinking deltas as realtime thinking provider events", async () => {
|
|
769
1008
|
const adapter = new AcodeSdkAdapter();
|
|
@@ -942,6 +1181,78 @@ describe("AcodeSdkAdapter turn completion state", () => {
|
|
|
942
1181
|
adapter.cleanup();
|
|
943
1182
|
}
|
|
944
1183
|
});
|
|
1184
|
+
it("stops re-arming auto-poll when the model answers without calling poll_message", async () => {
|
|
1185
|
+
vi.useFakeTimers();
|
|
1186
|
+
NonPollingAutoPollRuntime.submitMessages = [];
|
|
1187
|
+
const adapter = new AcodeSdkAdapter();
|
|
1188
|
+
adapter.setRuntimeConstructorForTest(NonPollingAutoPollRuntime);
|
|
1189
|
+
try {
|
|
1190
|
+
await adapter.startSession("session-non-polling-auto-poll", {
|
|
1191
|
+
command: "acode",
|
|
1192
|
+
workingDirectory: process.cwd(),
|
|
1193
|
+
autoAccept: true,
|
|
1194
|
+
extraMcpServers: {},
|
|
1195
|
+
envOverrides: {},
|
|
1196
|
+
});
|
|
1197
|
+
await vi.advanceTimersByTimeAsync(250);
|
|
1198
|
+
expect(NonPollingAutoPollRuntime.submitMessages).toHaveLength(1);
|
|
1199
|
+
expect(NonPollingAutoPollRuntime.submitMessages[0]).toContain("poll_message");
|
|
1200
|
+
await vi.advanceTimersByTimeAsync(5_000);
|
|
1201
|
+
expect(NonPollingAutoPollRuntime.submitMessages).toHaveLength(1);
|
|
1202
|
+
expect(adapter.getSessionStatus("session-non-polling-auto-poll")).toBe("waiting_input");
|
|
1203
|
+
}
|
|
1204
|
+
finally {
|
|
1205
|
+
vi.useRealTimers();
|
|
1206
|
+
adapter.cleanup();
|
|
1207
|
+
}
|
|
1208
|
+
});
|
|
1209
|
+
it("keeps re-arming auto-poll when the model actually calls poll_message", async () => {
|
|
1210
|
+
vi.useFakeTimers();
|
|
1211
|
+
PollingAutoPollRuntime.submitMessages = [];
|
|
1212
|
+
const adapter = new AcodeSdkAdapter();
|
|
1213
|
+
adapter.setRuntimeConstructorForTest(PollingAutoPollRuntime);
|
|
1214
|
+
try {
|
|
1215
|
+
await adapter.startSession("session-polling-auto-poll", {
|
|
1216
|
+
command: "acode",
|
|
1217
|
+
workingDirectory: process.cwd(),
|
|
1218
|
+
autoAccept: true,
|
|
1219
|
+
extraMcpServers: {},
|
|
1220
|
+
envOverrides: {},
|
|
1221
|
+
});
|
|
1222
|
+
await vi.advanceTimersByTimeAsync(250);
|
|
1223
|
+
expect(PollingAutoPollRuntime.submitMessages).toHaveLength(1);
|
|
1224
|
+
await vi.advanceTimersByTimeAsync(250);
|
|
1225
|
+
expect(PollingAutoPollRuntime.submitMessages).toHaveLength(2);
|
|
1226
|
+
}
|
|
1227
|
+
finally {
|
|
1228
|
+
vi.useRealTimers();
|
|
1229
|
+
adapter.cleanup();
|
|
1230
|
+
}
|
|
1231
|
+
});
|
|
1232
|
+
it("keeps re-arming auto-poll when a poll turn completes without assistant text", async () => {
|
|
1233
|
+
vi.useFakeTimers();
|
|
1234
|
+
AutoPollRuntime.submitMessages = [];
|
|
1235
|
+
const adapter = new AcodeSdkAdapter();
|
|
1236
|
+
adapter.setRuntimeConstructorForTest(AutoPollRuntime);
|
|
1237
|
+
try {
|
|
1238
|
+
await adapter.startSession("session-empty-auto-poll-turn", {
|
|
1239
|
+
command: "acode",
|
|
1240
|
+
workingDirectory: process.cwd(),
|
|
1241
|
+
autoAccept: true,
|
|
1242
|
+
extraMcpServers: {},
|
|
1243
|
+
envOverrides: {},
|
|
1244
|
+
});
|
|
1245
|
+
await vi.advanceTimersByTimeAsync(250);
|
|
1246
|
+
expect(AutoPollRuntime.submitMessages).toHaveLength(1);
|
|
1247
|
+
await vi.advanceTimersByTimeAsync(250);
|
|
1248
|
+
expect(AutoPollRuntime.submitMessages).toHaveLength(2);
|
|
1249
|
+
expect(AutoPollRuntime.submitMessages[1]).toContain("poll_message");
|
|
1250
|
+
}
|
|
1251
|
+
finally {
|
|
1252
|
+
vi.useRealTimers();
|
|
1253
|
+
adapter.cleanup();
|
|
1254
|
+
}
|
|
1255
|
+
});
|
|
945
1256
|
it("cancels a pending auto-poll when a user message arrives", async () => {
|
|
946
1257
|
vi.useFakeTimers();
|
|
947
1258
|
AutoPollRuntime.submitMessages = [];
|
|
@@ -1014,8 +1325,8 @@ describe("AcodeSdkAdapter turn completion state", () => {
|
|
|
1014
1325
|
await vi.advanceTimersByTimeAsync(250);
|
|
1015
1326
|
// Status sequence: starting -> waiting_input (startSession) ->
|
|
1016
1327
|
// thinking (auto-poll fires) -> waiting_input (turn_complete success
|
|
1017
|
-
// re-arms the loop).
|
|
1018
|
-
//
|
|
1328
|
+
// re-arms the loop). Empty turns are allowed to retry because only a
|
|
1329
|
+
// plain-text assistant answer indicates the model ignored poll_message.
|
|
1019
1330
|
expect(AutoPollRuntime.submitMessages).toHaveLength(1);
|
|
1020
1331
|
expect(AutoPollRuntime.submitMessages[0]).toContain("poll_message");
|
|
1021
1332
|
expect(statuses).toEqual([
|
|
@@ -517,7 +517,7 @@ export class OpencodeSdkAdapter extends EventEmitter {
|
|
|
517
517
|
data: { usage: session.adapterSession.totalUsage },
|
|
518
518
|
});
|
|
519
519
|
session.adapterSession.status = 'waiting_input';
|
|
520
|
-
this.emit('status-change', sessionId, 'waiting_input');
|
|
520
|
+
this.emit('status-change', sessionId, 'waiting_input', { usage: session.adapterSession.totalUsage });
|
|
521
521
|
this.startIdleDetection(sessionId);
|
|
522
522
|
break;
|
|
523
523
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/adapter/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAI3C,MAAM,MAAM,aAAa,GACrB,UAAU,GACV,UAAU,GACV,YAAY,GACZ,eAAe,GACf,WAAW,GACX,YAAY,GACZ,OAAO,CAAC;AAIZ,MAAM,MAAM,iBAAiB,GACzB,YAAY,GACZ,YAAY,GACZ,UAAU,GACV,gBAAgB,GAChB,cAAc,GACd,oBAAoB,GACpB,mBAAmB,GACnB,gBAAgB,GAChB,eAAe,GACf,kBAAkB,GAClB,OAAO,CAAC;AAIZ;;;GAGG;AACH,MAAM,MAAM,cAAc,GACtB,OAAO,GACP,KAAK,GACL,MAAM,GACN,WAAW,GACX,YAAY,GACZ,WAAW,GACX,MAAM,GACN,QAAQ,GACR,KAAK,GACL,YAAY,GACZ,KAAK,GACL,UAAU,GACV,OAAO,CAAC;AAEZ;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,aAAa;IACb,UAAU,EAAE,cAAc,CAAC;IAC3B,iBAAiB;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,qBAAqB;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,iCAAiC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY;IACZ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAUD;;;GAGG;AACH,wBAAgB,kCAAkC,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQvE;AAED;;;GAGG;AACH,wBAAgB,iCAAiC,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAWvE;AAED;;GAEG;AACH,wBAAgB,yCAAyC,CACvD,KAAK,EAAE,OAAO,GACb,OAAO,CAgBT;AAyCD,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAsBjE;AAQD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,QAAQ,CAAC,EAAE,YAAY,GACtB,cAAc,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/adapter/types.ts"],"names":[],"mappings":"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"}
|
package/dist/adapter/types.js
CHANGED
|
@@ -132,9 +132,13 @@ export function getToolActionInfo(toolName, toolInput, metadata) {
|
|
|
132
132
|
const normalizedName = name.replace(/[_-]/g, "");
|
|
133
133
|
const semanticToolName = name.startsWith("mcp__")
|
|
134
134
|
? name.split("__").slice(2).join("__")
|
|
135
|
-
: name.
|
|
136
|
-
? name.slice(
|
|
137
|
-
: name
|
|
135
|
+
: name.startsWith("builtin__")
|
|
136
|
+
? name.split("__").slice(1).join("__")
|
|
137
|
+
: name.includes("-mcp__")
|
|
138
|
+
? name.slice(name.indexOf("-mcp__") + 6)
|
|
139
|
+
: name.includes("/")
|
|
140
|
+
? name.split("/").filter(Boolean).at(-1) || name
|
|
141
|
+
: name;
|
|
138
142
|
const normalizedSemanticToolName = semanticToolName.replace(/[_-]/g, "");
|
|
139
143
|
const normalizeSkillList = (value) => {
|
|
140
144
|
if (!Array.isArray(value)) {
|