src/core/state/state-codec.ts
Rama main · réplica de lectura del repositorio original.
import type { Job } from '../contracts/types';
export function json(v: unknown): string | null {
return v === undefined || v === null ? null : JSON.stringify(v);
}
export function dt(iso: string): string {
return iso.replace('T', ' ').replace(/\.\d+Z$/, '');
}
export function rowToJob(r: any): Job {
const parse = (v: unknown) => (typeof v === 'string' ? JSON.parse(v) : v) ?? undefined;
return {
job_id: r.job_id,
request_id: r.request_id,
status: r.status,
target: r.target ?? undefined,
profile: r.profile,
project: r.project,
source: r.source,
client_app_id: r.client_app_id ?? undefined,
agent_session_id: r.agent_session_id ?? undefined,
on_behalf_of: r.on_behalf_of ?? undefined,
thread_id: r.thread_id != null ? Number(r.thread_id) : undefined,
session_id: r.session_id ?? undefined,
input_preview: r.input_preview ?? '',
input: r.input ?? undefined,
report: parse(r.report),
result: parse(r.result),
raw_result: r.raw_result ?? undefined,
usage: parse(r.usage),
error: r.error ?? undefined,
metadata: parse(r.metadata) ?? {},
approval_continuation_keys: parse(r.approval_continuation_keys),
delivery_replay_keys: parse(r.delivery_replay_keys),
callback_url: r.callback_url ?? undefined,
dispatch: parse(r.dispatch),
attempts: r.attempts != null ? Number(r.attempts) : 0,
run_after: r.run_after ? new Date(r.run_after).toISOString() : undefined,
claimed_at: r.claimed_at ? new Date(r.claimed_at).toISOString() : undefined,
lease_until: r.lease_until ? new Date(r.lease_until).toISOString() : undefined,
executor_id: r.executor_id ?? undefined,
dispatched_at: r.dispatched_at ? new Date(r.dispatched_at).toISOString() : undefined,
claim_token: r.claim_token ?? undefined,
created_at: new Date(r.created_at).toISOString(),
updated_at: new Date(r.updated_at).toISOString(),
};
}