59 lines
1.9 KiB
TypeScript
59 lines
1.9 KiB
TypeScript
import type { PluginInput } from "@opencode-ai/plugin"
|
|
import {
|
|
getPlanProgress,
|
|
getWorkForSession,
|
|
readBoulderState,
|
|
resolveBoulderPlanPath,
|
|
resolveBoulderPlanPathForWork,
|
|
} from "../../features/boulder-state"
|
|
import type { BoulderState, PlanProgress } from "../../features/boulder-state"
|
|
|
|
export async function resolveActiveBoulderSession(input: {
|
|
client: PluginInput["client"]
|
|
directory: string
|
|
sessionID: string
|
|
}): Promise<{
|
|
boulderState: BoulderState
|
|
progress: PlanProgress
|
|
appendedSession: boolean
|
|
} | null> {
|
|
const boulderState = readBoulderState(input.directory)
|
|
if (!boulderState) {
|
|
return null
|
|
}
|
|
|
|
const sessionWork = getWorkForSession(input.directory, input.sessionID)
|
|
if (!sessionWork && !boulderState.session_ids.includes(input.sessionID)) {
|
|
return null
|
|
}
|
|
|
|
const nextBoulderState: BoulderState = sessionWork
|
|
? {
|
|
...boulderState,
|
|
active_plan: sessionWork.active_plan,
|
|
plan_name: sessionWork.plan_name,
|
|
status: sessionWork.status,
|
|
started_at: sessionWork.started_at,
|
|
ended_at: sessionWork.ended_at,
|
|
elapsed_ms: sessionWork.elapsed_ms,
|
|
updated_at: sessionWork.updated_at,
|
|
session_ids: [...sessionWork.session_ids],
|
|
session_origins: sessionWork.session_origins ? { ...sessionWork.session_origins } : {},
|
|
agent: sessionWork.agent,
|
|
worktree_path: sessionWork.worktree_path,
|
|
task_sessions: sessionWork.task_sessions ? { ...sessionWork.task_sessions } : {},
|
|
}
|
|
: boulderState
|
|
|
|
const progress = getPlanProgress(
|
|
sessionWork
|
|
? resolveBoulderPlanPathForWork(input.directory, sessionWork)
|
|
: resolveBoulderPlanPath(input.directory, nextBoulderState),
|
|
)
|
|
if (progress.isComplete) {
|
|
return { boulderState: nextBoulderState, progress, appendedSession: false }
|
|
}
|
|
|
|
return { boulderState: nextBoulderState, progress, appendedSession: false }
|
|
}
|