Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 56 additions & 0 deletions packages/server/src/api-types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,62 @@ export interface WorkspaceDeleteResponse {
status: WorkspaceStatus
}

export interface OpenCodeSessionRepairIssueSession {
id: string
title: string
projectId: string
directory: string
version: string
likelyBroken: boolean
likelyHidden: boolean
metadataIncompleteOnly: boolean
repairableSafeMetadata: boolean
missingAssistantAgentMessages: number
missingSessionAgent: boolean
missingSessionModel: boolean
missingSessionPath: boolean
recommendedDirectory?: string
}

export interface OpenCodeSessionRepairAnalysis {
analyzedAt: string
dbPath: string
sessionCount: number
assistantMessageCount: number
issues: {
sessionsLikelyBroken: number
sessionsLikelyHidden: number
sessionsWithIncompleteMetadataOnly: number
sessionsWithRepairableSafeMetadata: number
sessionsWithRemainingIncompleteMetadata: number
sessionsWithMissingAssistantAgentMessages: number
sessionsMissingSessionAgent: number
sessionsMissingSessionModel: number
sessionsMissingSessionPath: number
sessionsWithRecommendedDirectoryRepair: number
}
affectedSessions: OpenCodeSessionRepairIssueSession[]
}

export type OpenCodeSessionRepairMode = "important" | "normalize"

export interface OpenCodeSessionRepairRequest {
mode: OpenCodeSessionRepairMode
}

export interface OpenCodeSessionRepairResult {
executedAt: string
backupPath: string
mode: OpenCodeSessionRepairMode
repaired: {
assistantMessages: number
sessionAgents: number
sessionModels: number
sessionPaths: number
sessionDirectories: number
}
analysis: OpenCodeSessionRepairAnalysis
}
export type WorktreeKind = "root" | "worktree"

export interface WorktreeDescriptor {
Expand Down
9 changes: 9 additions & 0 deletions packages/server/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ import { ClientConnectionManager } from "./clients/connection-manager"
import { PluginChannelManager } from "./plugins/channel"
import { VoiceModeManager } from "./plugins/voice-mode"
import { runCliUpgrade } from "./cli-upgrade"
import { OpenCodeSessionRepairService } from "./opencode/session-repair"

const require = createRequire(import.meta.url)

Expand Down Expand Up @@ -341,6 +342,12 @@ async function main() {
eventBus,
logger: logger.child({ component: "sidecars" }),
})
const openCodeSessionRepairService = new OpenCodeSessionRepairService({
settings,
binaryResolver,
workspaceManager,
logger: logger.child({ component: "opencode-session-repair" }),
})
const previewManager = new PreviewManager()
const instanceEventBridge = new InstanceEventBridge({
workspaceManager,
Expand Down Expand Up @@ -443,6 +450,7 @@ async function main() {
pluginChannel,
voiceModeManager,
remoteProxySessionManager,
openCodeSessionRepairService,
uiStaticDir: uiResolution.uiStaticDir ?? DEFAULT_UI_STATIC_DIR,
uiDevServerUrl: uiResolution.uiDevServerUrl,
logger,
Expand Down Expand Up @@ -470,6 +478,7 @@ async function main() {
pluginChannel,
voiceModeManager,
remoteProxySessionManager,
openCodeSessionRepairService,
uiStaticDir: uiResolution.uiStaticDir ?? DEFAULT_UI_STATIC_DIR,
uiDevServerUrl: undefined,
logger,
Expand Down
Loading
Loading