refine long-running task notices
This commit is contained in:
+23
-19
@@ -148,7 +148,7 @@ test("completion and timer callbacks are safe in both orders at 15 seconds", asy
|
||||
runtime.turns[0].resolve("done");
|
||||
await turn;
|
||||
assert.deepEqual(sent.map((outgoing) => [outgoing.text, outgoing.replySequence]), [
|
||||
["这条还在处理,完成后我会直接回复。", 1],
|
||||
["收到,我还在处理,稍等我一下。", 1],
|
||||
["done", 2]
|
||||
]);
|
||||
}
|
||||
@@ -162,14 +162,14 @@ test("running and queued notices are independent and queued work announces start
|
||||
const second = gateway.receive(message("two", "second"), adapter);
|
||||
await waitFor(() => runtime.turns.length === 1);
|
||||
await clock.advanceTo(15_000);
|
||||
assert.deepEqual(messagesFor(sent, "first").map((outgoing) => outgoing.text), ["这条还在处理,完成后我会直接回复。"]);
|
||||
assert.deepEqual(messagesFor(sent, "second").map((outgoing) => outgoing.text), ["前面还有任务,这条还在排队,轮到后我马上处理。"]);
|
||||
assert.deepEqual(messagesFor(sent, "first").map((outgoing) => outgoing.text), ["收到,我还在处理,稍等我一下。"]);
|
||||
assert.deepEqual(messagesFor(sent, "second").map((outgoing) => outgoing.text), ["前面还有一件事没处理完,这条我记着,轮到后马上处理。"]);
|
||||
|
||||
runtime.turns[0].resolve("first done");
|
||||
await waitFor(() => runtime.turns.length === 2);
|
||||
assert.deepEqual(messagesFor(sent, "second").map((outgoing) => [outgoing.text, outgoing.replySequence]), [
|
||||
["前面还有任务,这条还在排队,轮到后我马上处理。", 1],
|
||||
["轮到这条了,我开始处理。", 2]
|
||||
["前面还有一件事没处理完,这条我记着,轮到后马上处理。", 1],
|
||||
["轮到这件事了,我现在开始处理。", 2]
|
||||
]);
|
||||
runtime.turns[1].resolve("second done");
|
||||
await Promise.all([first, second]);
|
||||
@@ -177,29 +177,32 @@ test("running and queued notices are independent and queued work announces start
|
||||
assert.deepEqual(messagesFor(sent, "second").map((outgoing) => outgoing.replySequence), [1, 2, 3]);
|
||||
});
|
||||
|
||||
test("running reminders fire at 60, 180, and 480 seconds with dynamic activity text", async () => {
|
||||
test("running reminders use staged wording and wait from 8 to 18 minutes", async () => {
|
||||
const { runtime, clock, gateway } = createGateway();
|
||||
const sent: OutgoingMessage[] = [];
|
||||
const turn = gateway.receive(message("work", "reminders"), recordingAdapter(sent));
|
||||
await waitFor(() => runtime.turns.length === 1);
|
||||
await clock.advanceTo(15_000);
|
||||
runtime.idleSeconds = 10;
|
||||
await clock.advanceTo(60_000);
|
||||
runtime.idleSeconds = 60;
|
||||
await clock.advanceTo(180_000);
|
||||
runtime.idleSeconds = 180;
|
||||
await clock.advanceTo(480_000);
|
||||
assert.deepEqual(sent.map((outgoing) => outgoing.text), [
|
||||
"这条还在处理,完成后我会直接回复。",
|
||||
"这条还在处理中,刚刚还有进展;完成后我会直接回复。",
|
||||
"这条还在处理中,最近 60 秒没新进展;完成后我会直接回复。",
|
||||
"这条还在处理中,最近 3 分钟没新进展;完成后我会直接回复。"
|
||||
"收到,我还在处理,稍等我一下。",
|
||||
"还在弄,暂时还没出结果,弄好我马上回你。",
|
||||
"这件事比预想中多花了一点时间,我还在继续处理。你不用一直盯着,弄好我会直接回你。",
|
||||
"我还在处理这件事,确实花了些时间。想看看现在的状态可以发 /status,不想继续等也可以发 /cancel。"
|
||||
]);
|
||||
await clock.advanceTo(780_000);
|
||||
assert.equal(sent.length, 4);
|
||||
await clock.advanceTo(1_080_000);
|
||||
assert.equal(sent.at(-1)?.text,
|
||||
"我还在处理这件事,确实花了些时间。想看看现在的状态可以发 /status,不想继续等也可以发 /cancel。");
|
||||
assert.equal(sent.length, 5);
|
||||
runtime.turns[0].resolve("done");
|
||||
await turn;
|
||||
});
|
||||
|
||||
test("queued reminders use queue wording and sample the active ACP status", async () => {
|
||||
test("queued reminders use staged queue wording without ACP activity details", async () => {
|
||||
const { runtime, clock, gateway } = createGateway();
|
||||
const sent: OutgoingMessage[] = [];
|
||||
const adapter = recordingAdapter(sent);
|
||||
@@ -207,10 +210,11 @@ test("queued reminders use queue wording and sample the active ACP status", asyn
|
||||
const second = gateway.receive(message("two", "queued"), adapter);
|
||||
await waitFor(() => runtime.turns.length === 1);
|
||||
await clock.advanceTo(15_000);
|
||||
runtime.idleSeconds = 45;
|
||||
await clock.advanceTo(60_000);
|
||||
assert.equal(messagesFor(sent, "queued").at(-1)?.text,
|
||||
"前面的任务还在处理,最近 45 秒没新进展;这条仍在排队,轮到后我马上处理。");
|
||||
assert.deepEqual(messagesFor(sent, "queued").map((outgoing) => outgoing.text), [
|
||||
"前面还有一件事没处理完,这条我记着,轮到后马上处理。",
|
||||
"前面的事情还没处理完,这条还在等。我没有漏掉,轮到后会接着做。"
|
||||
]);
|
||||
runtime.turns[0].resolve("one done");
|
||||
await waitFor(() => runtime.turns.length === 2);
|
||||
runtime.turns[1].resolve("two done");
|
||||
@@ -275,7 +279,7 @@ test("prompt does not wait for a notice send and final delivery delay releases t
|
||||
runtime.turns[1].resolve("second done");
|
||||
await Promise.all([first, second]);
|
||||
assert.deepEqual(messagesFor(sent, "first").map((outgoing) => outgoing.text), [
|
||||
"这条还在处理,完成后我会直接回复。", "first done"
|
||||
"收到,我还在处理,稍等我一下。", "first done"
|
||||
]);
|
||||
});
|
||||
|
||||
@@ -302,7 +306,7 @@ test("delivery failures are logged safely and do not block later sends", async (
|
||||
} finally {
|
||||
console.error = originalError;
|
||||
}
|
||||
assert.deepEqual(sent.map((outgoing) => outgoing.text), ["这条还在处理,完成后我会直接回复。", "done"]);
|
||||
assert.deepEqual(sent.map((outgoing) => outgoing.text), ["收到,我还在处理,稍等我一下。", "done"]);
|
||||
assert.deepEqual(errors, ["Gateway delivery send failed (platform=qq)"]);
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user