aws-runtime-bridge 1.6.10 → 1.6.11
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/ClaudeSdkAdapter.d.ts +0 -1
- package/dist/adapter/ClaudeSdkAdapter.d.ts.map +1 -1
- package/dist/adapter/ClaudeSdkAdapter.js +1 -11
- package/dist/adapter/ClaudeSdkAdapter.test.js +12 -6
- package/dist/adapter/CodexSdkAdapter.js +1 -1
- package/dist/adapter/CodexSdkAdapter.test.js +2 -2
- package/dist/adapter/OpencodeSdkAdapter.js +1 -1
- package/dist/adapter/OpencodeSdkAdapter.test.js +44 -3
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClaudeSdkAdapter.d.ts","sourceRoot":"","sources":["../../src/adapter/ClaudeSdkAdapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAMtC,OAAO,KAAK,EACV,mBAAmB,EACnB,oBAAoB,EAGpB,mBAAmB,EACnB,aAAa,EACd,MAAM,YAAY,CAAC;AAyHpB;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,YAAa,YAAW,mBAAmB;IAC/E,QAAQ,CAAC,UAAU,iBAAiB;IACpC,QAAQ,CAAC,WAAW,iBAAiB;IAErC,OAAO,CAAC,QAAQ,CAA0C;IAC1D,OAAO,CAAC,UAAU,CAAoC;IACtD,OAAO,CAAC,YAAY,CAAuD;IAC3E,OAAO,CAAC,gBAAgB,CAA2C;IACnE,OAAO,CAAC,SAAS,CAAiB;IAGlC,OAAO,CAAC,kBAAkB,CAGZ;IAGd,OAAO,CAAC,gBAAgB,CAGV;IAGd,OAAO,CAAC,gBAAgB,CAAkC;IAG1D,OAAO,CAAC,eAAe,CAA0D;IAGjF,OAAO,CAAC,gBAAgB,CAAkC;IAIpD,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAyF5E,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAwCpE;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAmDrB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAYnE,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBrF,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOlD,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA+BxD,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,mBAAmB,EAAE;IAIzD,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAItC,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAI3D,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAI9D,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAIpD,OAAO,IAAI,IAAI;IAoBf,OAAO,CAAC,YAAY,CAAiF;IACrG,OAAO,CAAC,UAAU,CAA0C;IAC5D,OAAO,CAAC,cAAc,CAAkC;IAExD;;OAEG;IACH,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE;QAAE,gBAAgB,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IASzG;;OAEG;IACH,OAAO,CAAC,kBAAkB;
|
|
1
|
+
{"version":3,"file":"ClaudeSdkAdapter.d.ts","sourceRoot":"","sources":["../../src/adapter/ClaudeSdkAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -368,9 +368,6 @@ export class ClaudeSdkAdapter extends EventEmitter {
|
|
|
368
368
|
if (!commands?.idleInputCommand) {
|
|
369
369
|
return;
|
|
370
370
|
}
|
|
371
|
-
if (this.isTaskPollingIdleCommand(commands.idleInputCommand)) {
|
|
372
|
-
return;
|
|
373
|
-
}
|
|
374
371
|
this.lastActivityAt.set(sessionId, Date.now());
|
|
375
372
|
// 每500ms检测一次空闲状态
|
|
376
373
|
const timer = setInterval(() => {
|
|
@@ -446,13 +443,6 @@ export class ClaudeSdkAdapter extends EventEmitter {
|
|
|
446
443
|
},
|
|
447
444
|
});
|
|
448
445
|
}
|
|
449
|
-
isTaskPollingIdleCommand(command) {
|
|
450
|
-
const normalized = command.trim();
|
|
451
|
-
if (!normalized) {
|
|
452
|
-
return false;
|
|
453
|
-
}
|
|
454
|
-
return normalized.toLowerCase().includes('my_task') || normalized.includes('流程任务');
|
|
455
|
-
}
|
|
456
446
|
isMessagePollingIdleCommand(command) {
|
|
457
447
|
const normalized = command.trim();
|
|
458
448
|
if (!normalized) {
|
|
@@ -462,7 +452,7 @@ export class ClaudeSdkAdapter extends EventEmitter {
|
|
|
462
452
|
return lower.includes('poll_message') || lower.includes('get_message') || normalized.includes('取消息');
|
|
463
453
|
}
|
|
464
454
|
buildMessagePollingIdlePrompt() {
|
|
465
|
-
return '
|
|
455
|
+
return '请持续调用 poll_message 工具阻塞等待新消息和流程线任务提醒;收到流程任务提醒后调用 my_task 查看详情,按需调用 start_task 开始处理,完成后调用 submit_task_result 提交结果,然后继续 poll_message。';
|
|
466
456
|
}
|
|
467
457
|
/**
|
|
468
458
|
* 发送手动快捷键 token 序列,和空闲自动命令共用解析逻辑。
|
|
@@ -151,7 +151,7 @@ describe('ClaudeSdkAdapter', () => {
|
|
|
151
151
|
fs.rmSync(commandDirectory, { recursive: true, force: true });
|
|
152
152
|
}
|
|
153
153
|
});
|
|
154
|
-
it('
|
|
154
|
+
it('auto-wakes Claude when workflow idle commands include poll_message and my_task guidance', async () => {
|
|
155
155
|
vi.useFakeTimers();
|
|
156
156
|
const adapter = new ClaudeSdkAdapter();
|
|
157
157
|
const sentPrompts = [];
|
|
@@ -173,12 +173,16 @@ describe('ClaudeSdkAdapter', () => {
|
|
|
173
173
|
sentPrompts.push(prompt);
|
|
174
174
|
});
|
|
175
175
|
adapter.setIdleCommands('session-1', {
|
|
176
|
-
idleInputCommand: 'system:
|
|
176
|
+
idleInputCommand: 'system: 请保持工作循环:持续调用 poll_message 阻塞等待新消息和流程线任务提醒;收到流程任务提醒后调用 my_task 查看详情,按需调用 start_task 开始处理,完成后调用 submit_task_result 提交结果,然后继续 poll_message。',
|
|
177
177
|
nonInputCommand: '',
|
|
178
178
|
});
|
|
179
|
-
await vi.advanceTimersByTimeAsync(
|
|
179
|
+
await vi.advanceTimersByTimeAsync(1000);
|
|
180
180
|
expect(sentPrompts).toHaveLength(0);
|
|
181
|
-
|
|
181
|
+
await vi.advanceTimersByTimeAsync(600);
|
|
182
|
+
expect(sendIdlePrompt).toHaveBeenCalledTimes(1);
|
|
183
|
+
expect(sentPrompts).toEqual([
|
|
184
|
+
'请持续调用 poll_message 工具阻塞等待新消息和流程线任务提醒;收到流程任务提醒后调用 my_task 查看详情,按需调用 start_task 开始处理,完成后调用 submit_task_result 提交结果,然后继续 poll_message。',
|
|
185
|
+
]);
|
|
182
186
|
});
|
|
183
187
|
it('starts a blocking poll turn for poll_message-style idle commands', async () => {
|
|
184
188
|
vi.useFakeTimers();
|
|
@@ -201,13 +205,15 @@ describe('ClaudeSdkAdapter', () => {
|
|
|
201
205
|
sentPrompts.push(prompt);
|
|
202
206
|
});
|
|
203
207
|
adapter.setIdleCommands('session-1', {
|
|
204
|
-
idleInputCommand: 'system:
|
|
208
|
+
idleInputCommand: 'system: 请保持工作循环:持续调用 poll_message 阻塞等待新消息和流程线任务提醒;收到流程任务提醒后调用 my_task 查看详情,按需调用 start_task 开始处理,完成后调用 submit_task_result 提交结果,然后继续 poll_message。',
|
|
205
209
|
nonInputCommand: '',
|
|
206
210
|
});
|
|
207
211
|
await vi.advanceTimersByTimeAsync(1000);
|
|
208
212
|
expect(sentPrompts).toHaveLength(0);
|
|
209
213
|
await vi.advanceTimersByTimeAsync(600);
|
|
210
|
-
expect(sentPrompts).toEqual([
|
|
214
|
+
expect(sentPrompts).toEqual([
|
|
215
|
+
'请持续调用 poll_message 工具阻塞等待新消息和流程线任务提醒;收到流程任务提醒后调用 my_task 查看详情,按需调用 start_task 开始处理,完成后调用 submit_task_result 提交结果,然后继续 poll_message。',
|
|
216
|
+
]);
|
|
211
217
|
});
|
|
212
218
|
it('still auto-wakes Claude for regular idle commands', async () => {
|
|
213
219
|
vi.useFakeTimers();
|
|
@@ -777,7 +777,7 @@ export class CodexSdkAdapter extends EventEmitter {
|
|
|
777
777
|
toIdlePrompt(command) {
|
|
778
778
|
const trimmed = command.trim();
|
|
779
779
|
if (this.isMessagePollingIdleCommand(trimmed)) {
|
|
780
|
-
return '
|
|
780
|
+
return '请持续调用 poll_message 工具阻塞等待新消息和流程线任务提醒;收到流程任务提醒后调用 my_task 查看详情,按需调用 start_task 开始处理,完成后调用 submit_task_result 提交结果,然后继续 poll_message。';
|
|
781
781
|
}
|
|
782
782
|
return trimmed;
|
|
783
783
|
}
|
|
@@ -199,13 +199,13 @@ describe('CodexSdkAdapter', () => {
|
|
|
199
199
|
},
|
|
200
200
|
];
|
|
201
201
|
adapter.setIdleCommands('session-1', {
|
|
202
|
-
idleInputCommand: 'system:
|
|
202
|
+
idleInputCommand: 'system: 请保持工作循环:持续调用 poll_message 阻塞等待新消息和流程线任务提醒;收到流程任务提醒后调用 my_task 查看详情,按需调用 start_task 开始处理,完成后调用 submit_task_result 提交结果,然后继续 poll_message。',
|
|
203
203
|
nonInputCommand: '',
|
|
204
204
|
});
|
|
205
205
|
await vi.advanceTimersByTimeAsync(1000);
|
|
206
206
|
expect(runMessages).toHaveLength(0);
|
|
207
207
|
await vi.advanceTimersByTimeAsync(600);
|
|
208
|
-
expect(runMessages).toEqual(['
|
|
208
|
+
expect(runMessages).toEqual(['请持续调用 poll_message 工具阻塞等待新消息和流程线任务提醒;收到流程任务提醒后调用 my_task 查看详情,按需调用 start_task 开始处理,完成后调用 submit_task_result 提交结果,然后继续 poll_message。']);
|
|
209
209
|
const userMessages = adapter.getConversation('session-1').filter((message) => message.role === 'user');
|
|
210
210
|
expect(userMessages).toHaveLength(0);
|
|
211
211
|
});
|
|
@@ -710,7 +710,7 @@ export class OpencodeSdkAdapter extends EventEmitter {
|
|
|
710
710
|
toIdlePrompt(command) {
|
|
711
711
|
const trimmed = command.trim();
|
|
712
712
|
if (this.isMessagePollingIdleCommand(trimmed)) {
|
|
713
|
-
return '
|
|
713
|
+
return '请持续调用 poll_message 工具阻塞等待新消息和流程线任务提醒;收到流程任务提醒后调用 my_task 查看详情,按需调用 start_task 开始处理,完成后调用 submit_task_result 提交结果,然后继续 poll_message。';
|
|
714
714
|
}
|
|
715
715
|
return trimmed;
|
|
716
716
|
}
|
|
@@ -17,8 +17,8 @@ describe('OpencodeSdkAdapter', () => {
|
|
|
17
17
|
});
|
|
18
18
|
it('normalizes poll_message-style idle commands into a blocking poll prompt', () => {
|
|
19
19
|
const adapter = new OpencodeSdkAdapter();
|
|
20
|
-
const prompt = Reflect.get(adapter, 'toIdlePrompt').call(adapter, 'system:
|
|
21
|
-
expect(prompt).toBe('
|
|
20
|
+
const prompt = Reflect.get(adapter, 'toIdlePrompt').call(adapter, 'system: 请保持工作循环:持续调用 poll_message 阻塞等待新消息和流程线任务提醒;收到流程任务提醒后调用 my_task 查看详情,按需调用 start_task 开始处理,完成后调用 submit_task_result 提交结果,然后继续 poll_message。');
|
|
21
|
+
expect(prompt).toBe('请持续调用 poll_message 工具阻塞等待新消息和流程线任务提醒;收到流程任务提醒后调用 my_task 查看详情,按需调用 start_task 开始处理,完成后调用 submit_task_result 提交结果,然后继续 poll_message。');
|
|
22
22
|
});
|
|
23
23
|
it('starts idle detection when commands are set after OpenCode is already waiting for input', async () => {
|
|
24
24
|
vi.useFakeTimers();
|
|
@@ -58,7 +58,48 @@ describe('OpencodeSdkAdapter', () => {
|
|
|
58
58
|
nonInputCommand: '',
|
|
59
59
|
});
|
|
60
60
|
await vi.advanceTimersByTimeAsync(500);
|
|
61
|
-
expect(sentMessages).toEqual(['
|
|
61
|
+
expect(sentMessages).toEqual(['请持续调用 poll_message 工具阻塞等待新消息和流程线任务提醒;收到流程任务提醒后调用 my_task 查看详情,按需调用 start_task 开始处理,完成后调用 submit_task_result 提交结果,然后继续 poll_message。']);
|
|
62
|
+
});
|
|
63
|
+
it('re-arms polling idle detection after OpenCode returns to waiting for input', async () => {
|
|
64
|
+
vi.useFakeTimers();
|
|
65
|
+
const adapter = new OpencodeSdkAdapter();
|
|
66
|
+
const sentMessages = [];
|
|
67
|
+
const session = {
|
|
68
|
+
adapterSession: {
|
|
69
|
+
sessionId: 'session-1',
|
|
70
|
+
status: 'waiting_input',
|
|
71
|
+
messages: [],
|
|
72
|
+
createdAt: new Date().toISOString(),
|
|
73
|
+
totalUsage: { inputTokens: 0, outputTokens: 0 },
|
|
74
|
+
},
|
|
75
|
+
config: {
|
|
76
|
+
command: 'opencode',
|
|
77
|
+
workingDirectory: process.cwd(),
|
|
78
|
+
autoAccept: true,
|
|
79
|
+
},
|
|
80
|
+
sseActive: false,
|
|
81
|
+
pendingPermissions: new Map(),
|
|
82
|
+
emittedToolStarts: new Set(),
|
|
83
|
+
workingDirectory: process.cwd(),
|
|
84
|
+
userMessageIds: new Set(),
|
|
85
|
+
currentAssistantText: '',
|
|
86
|
+
seenTextPartIds: new Set(),
|
|
87
|
+
};
|
|
88
|
+
Reflect.set(adapter, 'sessions', new Map([['session-1', session]]));
|
|
89
|
+
vi.spyOn(adapter, 'sendMessage').mockImplementation(async (_sessionId, message) => {
|
|
90
|
+
sentMessages.push(message);
|
|
91
|
+
session.adapterSession.status = 'thinking';
|
|
92
|
+
});
|
|
93
|
+
adapter.setIdleCommands('session-1', {
|
|
94
|
+
idleInputCommand: 'system: 使用poll_message阻塞获取消息',
|
|
95
|
+
nonInputCommand: '',
|
|
96
|
+
});
|
|
97
|
+
await vi.advanceTimersByTimeAsync(500);
|
|
98
|
+
expect(sentMessages).toHaveLength(1);
|
|
99
|
+
session.adapterSession.status = 'waiting_input';
|
|
100
|
+
Reflect.get(adapter, 'startIdleDetection').call(adapter, 'session-1');
|
|
101
|
+
await vi.advanceTimersByTimeAsync(500);
|
|
102
|
+
expect(sentMessages).toHaveLength(2);
|
|
62
103
|
});
|
|
63
104
|
it('includes serve startup output when the OpenCode process exits early', () => {
|
|
64
105
|
const adapter = new OpencodeSdkAdapter();
|