feat: upgrade investigation and presentation runtime
This commit is contained in:
@@ -3,6 +3,7 @@ import { taskReportSchema, taskProgressSchema, type TaskProgress } from "./inves
|
||||
import { taskPresentationCommandSchema, taskPresentationResultSchema, type TaskPresentationCommand } from "./task-presentation.js";
|
||||
export { taskReportSchema } from "./investigation-report.js";
|
||||
import { z } from "zod";
|
||||
import { interactionQuestionsSchema, type InteractionQuestion } from "../chat/interaction-request-contract.js";
|
||||
|
||||
import { config } from "../config.js";
|
||||
import {
|
||||
@@ -32,6 +33,7 @@ const operationalTaskRunSchema = z.object({
|
||||
status: z.enum(["queued", "claimed", "running", "succeeded", "failed", "timed_out", "cancelled"]),
|
||||
revision: z.number().int().positive(),
|
||||
agent_session_id: z.string().min(1).nullable(),
|
||||
agent_instance_id: z.string().min(1).nullable().default(null),
|
||||
lease_expires_at: z.string().datetime({ offset: true }).nullable(),
|
||||
heartbeat_at: z.string().datetime({ offset: true }).nullable(),
|
||||
started_at: z.string().datetime({ offset: true }).nullable(),
|
||||
@@ -180,6 +182,7 @@ export class OperationalTaskClient {
|
||||
request_id: input.requestId,
|
||||
expected_revision: input.expectedRevision,
|
||||
source_session_id: input.sourceSessionId,
|
||||
agent_instance_id: config.AGENT_INSTANCE_ID,
|
||||
}),
|
||||
});
|
||||
const result = operationalTaskRunSchema.parse(raw);
|
||||
@@ -203,6 +206,7 @@ export class OperationalTaskClient {
|
||||
request_id: crypto.randomUUID(),
|
||||
expected_revision: state.revision,
|
||||
source_session_id: sourceSessionId,
|
||||
agent_instance_id: config.AGENT_INSTANCE_ID,
|
||||
}),
|
||||
});
|
||||
const result = operationalTaskRunSchema.parse(raw);
|
||||
@@ -290,6 +294,7 @@ export class OperationalTaskClient {
|
||||
request_id: crypto.randomUUID(),
|
||||
expected_revision: state.revision,
|
||||
source_session_id: sourceSessionId,
|
||||
agent_instance_id: config.AGENT_INSTANCE_ID,
|
||||
...extra,
|
||||
}),
|
||||
},
|
||||
@@ -326,6 +331,22 @@ export class OperationalTaskClient {
|
||||
});
|
||||
}
|
||||
|
||||
async askTaskUser(runtimeSessionId: string, taskId: string, input: {
|
||||
request_id: string; questions: InteractionQuestion[]; sourceSessionId: string;
|
||||
}) {
|
||||
return this.mutateRun(runtimeSessionId, async () => {
|
||||
const state = taskRunStates.get(runtimeSessionId);
|
||||
if (!state) throw new OperationalTaskClientError(409, "task run context unavailable");
|
||||
const raw = await this.request(runtimeSessionId, `/api/v1/operational-tasks/${encodeURIComponent(taskId)}/questions`, {
|
||||
method: "POST", body: JSON.stringify({ request_id: input.request_id,
|
||||
source_session_id: input.sourceSessionId, run_id: state.runId,
|
||||
questions: interactionQuestionsSchema.parse(input.questions) }),
|
||||
});
|
||||
return z.object({ question_request_id: z.string().uuid(), status: z.enum(["pending", "answered", "cancelled"]),
|
||||
version: z.number().int().positive() }).passthrough().parse(raw);
|
||||
});
|
||||
}
|
||||
|
||||
async proposeAction(runtimeSessionId: string, taskId: string, input: ProposedTaskAction) {
|
||||
const result = await this.request(runtimeSessionId, `/api/v1/operational-tasks/${encodeURIComponent(taskId)}/actions`, {
|
||||
method: "POST",
|
||||
|
||||
Reference in New Issue
Block a user