mirror of
https://github.com/openclaw/openclaw.git
synced 2026-06-06 22:12:53 +00:00
Summary: - Default active-run queueing to steer while preserving explicit followup/collect modes. - Keep `/steer` fallback behavior and migrate retired queue steering config. - Await Codex app-server steering acceptance so rejected/aborted steering can fall back safely. - Route active subagent announcements through intentional acceptance-aware steering, with legacy queue helpers deprecated for delivery decisions. Verification: - git diff --check - rg -n "^(<<<<<<<|=======|>>>>>>>|\|\|\|\|\|\|\|)" CHANGELOG.md docs src extensions || true - pnpm test src/agents/subagent-announce-dispatch.test.ts src/agents/subagent-announce-delivery.test.ts src/agents/pi-embedded-runner/runs.test.ts src/agents/subagent-announce.format.e2e.test.ts src/agents/subagent-announce.test.ts - pnpm test src/auto-reply/reply/commands-steer.test.ts src/auto-reply/reply/queue/settings.test.ts src/auto-reply/reply/queue-policy.test.ts src/auto-reply/reply/agent-runner.runreplyagent.e2e.test.ts src/auto-reply/reply/get-reply-run.media-only.test.ts extensions/codex/src/app-server/run-attempt.test.ts -- -t "queued steering|explicit all-mode steering|flushes pending default queued steering|rejects queued steering|resolveActiveRunQueueAction|resolveQueueSettings|handleSteerCommand" Co-authored-by: fuller-stack-dev <263060202+fuller-stack-dev@users.noreply.github.com>
76 lines
1.9 KiB
TypeScript
76 lines
1.9 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import { resolveActiveRunQueueAction } from "./queue-policy.js";
|
|
|
|
describe("resolveActiveRunQueueAction", () => {
|
|
it("runs immediately when there is no active run", () => {
|
|
expect(
|
|
resolveActiveRunQueueAction({
|
|
isActive: false,
|
|
isHeartbeat: false,
|
|
shouldFollowup: true,
|
|
queueMode: "collect",
|
|
}),
|
|
).toBe("run-now");
|
|
});
|
|
|
|
it("drops heartbeat runs while another run is active", () => {
|
|
expect(
|
|
resolveActiveRunQueueAction({
|
|
isActive: true,
|
|
isHeartbeat: true,
|
|
shouldFollowup: true,
|
|
queueMode: "collect",
|
|
}),
|
|
).toBe("drop");
|
|
});
|
|
|
|
it("enqueues followups for non-heartbeat active runs", () => {
|
|
expect(
|
|
resolveActiveRunQueueAction({
|
|
isActive: true,
|
|
isHeartbeat: false,
|
|
shouldFollowup: true,
|
|
queueMode: "collect",
|
|
}),
|
|
).toBe("enqueue-followup");
|
|
});
|
|
|
|
it("runs reset-triggered turns immediately while another run is active", () => {
|
|
for (const queueMode of ["collect", "followup"] as const) {
|
|
expect(
|
|
resolveActiveRunQueueAction({
|
|
isActive: true,
|
|
isHeartbeat: false,
|
|
shouldFollowup: true,
|
|
queueMode,
|
|
resetTriggered: true,
|
|
}),
|
|
).toBe("run-now");
|
|
}
|
|
});
|
|
|
|
it("keeps heartbeat drops ahead of reset-triggered turns", () => {
|
|
expect(
|
|
resolveActiveRunQueueAction({
|
|
isActive: true,
|
|
isHeartbeat: true,
|
|
shouldFollowup: true,
|
|
queueMode: "followup",
|
|
resetTriggered: true,
|
|
}),
|
|
).toBe("drop");
|
|
});
|
|
|
|
it("ignores reset-triggered policy when there is no active run", () => {
|
|
expect(
|
|
resolveActiveRunQueueAction({
|
|
isActive: false,
|
|
isHeartbeat: false,
|
|
shouldFollowup: true,
|
|
queueMode: "collect",
|
|
resetTriggered: true,
|
|
}),
|
|
).toBe("run-now");
|
|
});
|
|
});
|