47 lines
1.7 KiB
TypeScript
47 lines
1.7 KiB
TypeScript
import { DateTime } from "effect"
|
|
import { AgentV2 } from "../agent"
|
|
import { Location } from "../location"
|
|
import { ModelV2 } from "../model"
|
|
import { ProjectV2 } from "../project"
|
|
import { ProviderV2 } from "../provider"
|
|
import { AbsolutePath, RelativePath } from "../schema"
|
|
import { WorkspaceV2 } from "../workspace"
|
|
import { SessionSchema } from "./schema"
|
|
import { SessionTable } from "./sql"
|
|
|
|
export function fromRow(row: typeof SessionTable.$inferSelect): SessionSchema.Info {
|
|
return SessionSchema.Info.make({
|
|
id: SessionSchema.ID.make(row.id),
|
|
projectID: ProjectV2.ID.make(row.project_id),
|
|
title: row.title,
|
|
parentID: row.parent_id ? SessionSchema.ID.make(row.parent_id) : undefined,
|
|
agent: row.agent ? AgentV2.ID.make(row.agent) : undefined,
|
|
model: row.model
|
|
? {
|
|
id: ModelV2.ID.make(row.model.id),
|
|
providerID: ProviderV2.ID.make(row.model.providerID),
|
|
variant: ModelV2.VariantID.make(row.model.variant ?? "default"),
|
|
}
|
|
: undefined,
|
|
cost: row.cost,
|
|
tokens: {
|
|
input: row.tokens_input,
|
|
output: row.tokens_output,
|
|
reasoning: row.tokens_reasoning,
|
|
cache: {
|
|
read: row.tokens_cache_read,
|
|
write: row.tokens_cache_write,
|
|
},
|
|
},
|
|
location: Location.Ref.make({
|
|
directory: AbsolutePath.make(row.directory),
|
|
workspaceID: row.workspace_id ? WorkspaceV2.ID.make(row.workspace_id) : undefined,
|
|
}),
|
|
subpath: row.path ? RelativePath.make(row.path) : undefined,
|
|
time: {
|
|
created: DateTime.makeUnsafe(row.time_created),
|
|
updated: DateTime.makeUnsafe(row.time_updated),
|
|
archived: row.time_archived ? DateTime.makeUnsafe(row.time_archived) : undefined,
|
|
},
|
|
})
|
|
}
|