Files
growqr-backend/src/missions/action-types.ts
2026-06-06 03:25:29 +05:30

81 lines
2.1 KiB
TypeScript

import type { InferSelectModel } from "drizzle-orm";
import type { missionActions } from "../db/schema.js";
export type MissionActionMode = "autonomous" | "approval_required" | "user_input_required" | "suggestion";
export type MissionActionStatus =
| "queued"
| "running"
| "waiting_approval"
| "waiting_user_input"
| "done"
| "failed"
| "dismissed"
| "snoozed";
export type MissionActionUrgency = "now" | "today" | "soon" | "calm";
export type MissionActionRow = InferSelectModel<typeof missionActions>;
export type MissionActionDto = {
id: string;
userId: string;
missionInstanceId: string;
missionId: string;
stageId?: string;
agentId: string;
agentName: string;
baseAgent?: string;
serviceId?: string;
toolName?: string;
mode: MissionActionMode;
status: MissionActionStatus;
title: string;
body: string;
prompt?: string;
payload: Record<string, unknown>;
result?: Record<string, unknown>;
error?: string;
sourceEventId?: string;
idempotencyKey?: string;
priority: number;
urgency: MissionActionUrgency;
dueAt?: string;
createdAt: string;
updatedAt: string;
resolvedAt?: string;
};
export type NewMissionActionInput = {
userId: string;
missionInstanceId: string;
missionId: string;
stageId?: string;
agentId: string;
agentName: string;
baseAgent?: string;
serviceId?: string;
toolName?: string;
mode: MissionActionMode;
status?: MissionActionStatus;
title: string;
body: string;
prompt?: string;
payload?: Record<string, unknown>;
result?: Record<string, unknown>;
error?: string;
sourceEventId?: string;
idempotencyKey?: string;
priority?: number;
urgency?: MissionActionUrgency;
dueAt?: Date | string;
};
export function defaultMissionActionStatus(mode: MissionActionMode): MissionActionStatus {
if (mode === "approval_required") return "waiting_approval";
if (mode === "user_input_required") return "waiting_user_input";
return "queued";
}
export function isOpenMissionActionStatus(status: MissionActionStatus) {
return status === "queued" || status === "running" || status === "waiting_approval" || status === "waiting_user_input" || status === "failed";
}