/**
* GET /ds-agent/commands — 制御盤が指示を取りに来る(ロングポーリング。指示書AY 段階7-3。D2・D-179)
*
* 仕様の正は `d-watch-api.yaml` の /ds-agent/commands。認証は制御盤の Bearer だけ(`requireAgent()` で再検証)。
* 指示があればすぐ 200、無ければ `wait` 秒で 204。★DB を読まない★(`USE_FIXTURES` に関係なく同じ動き)。
*/
import { NextResponse } from "next/server";
import { noContent } from "@/lib/ds-agent/agent-request";
import { getRelay } from "@/lib/ds-agent/relay";
import { ensureDsAgentLogging } from "@/lib/ds-agent/relay-log";
import { agentVersionOf, requireAgent } from "@/lib/ds-agent/require-agent";
import { parseAgentPollWait } from "@/lib/ds-logs/validate";
import { withRequestId } from "@/lib/logger";
export async function GET(request: Request) {
return withRequestId(request, async () => {
ensureDsAgentLogging();
const auth = await requireAgent(request);
if (!auth.ok) return auth.response;
const wait = parseAgentPollWait(new URL(request.url).searchParams.get("wait"));
if (!wait.ok) return NextResponse.json(wait.error, { status: wait.status });
const command = await getRelay().poll(auth.serial, agentVersionOf(request), wait.query, request.signal);
return command ? NextResponse.json(command) : noContent();
});
}