Renders provider and model display names from the provider list instead of raw IDs in user message hover metadata.
81 lines
1.9 KiB
TypeScript
81 lines
1.9 KiB
TypeScript
import type {
|
|
Message,
|
|
Session,
|
|
Part,
|
|
FileDiff,
|
|
SessionStatus,
|
|
PermissionRequest,
|
|
QuestionRequest,
|
|
QuestionAnswer,
|
|
ProviderListResponse,
|
|
} from "@opencode-ai/sdk/v2"
|
|
import { createSimpleContext } from "./helper"
|
|
import { PreloadMultiFileDiffResult } from "@pierre/diffs/ssr"
|
|
|
|
type Data = {
|
|
provider?: ProviderListResponse
|
|
session: Session[]
|
|
session_status: {
|
|
[sessionID: string]: SessionStatus
|
|
}
|
|
session_diff: {
|
|
[sessionID: string]: FileDiff[]
|
|
}
|
|
session_diff_preload?: {
|
|
[sessionID: string]: PreloadMultiFileDiffResult<any>[]
|
|
}
|
|
permission?: {
|
|
[sessionID: string]: PermissionRequest[]
|
|
}
|
|
question?: {
|
|
[sessionID: string]: QuestionRequest[]
|
|
}
|
|
message: {
|
|
[sessionID: string]: Message[]
|
|
}
|
|
part: {
|
|
[messageID: string]: Part[]
|
|
}
|
|
}
|
|
|
|
export type PermissionRespondFn = (input: {
|
|
sessionID: string
|
|
permissionID: string
|
|
response: "once" | "always" | "reject"
|
|
}) => void
|
|
|
|
export type QuestionReplyFn = (input: { requestID: string; answers: QuestionAnswer[] }) => void
|
|
|
|
export type QuestionRejectFn = (input: { requestID: string }) => void
|
|
|
|
export type NavigateToSessionFn = (sessionID: string) => void
|
|
|
|
export type SessionHrefFn = (sessionID: string) => string
|
|
|
|
export const { use: useData, provider: DataProvider } = createSimpleContext({
|
|
name: "Data",
|
|
init: (props: {
|
|
data: Data
|
|
directory: string
|
|
onPermissionRespond?: PermissionRespondFn
|
|
onQuestionReply?: QuestionReplyFn
|
|
onQuestionReject?: QuestionRejectFn
|
|
onNavigateToSession?: NavigateToSessionFn
|
|
onSessionHref?: SessionHrefFn
|
|
}) => {
|
|
return {
|
|
get store() {
|
|
return props.data
|
|
},
|
|
get directory() {
|
|
return props.directory
|
|
},
|
|
respondToPermission: props.onPermissionRespond,
|
|
replyToQuestion: props.onQuestionReply,
|
|
rejectQuestion: props.onQuestionReject,
|
|
navigateToSession: props.onNavigateToSession,
|
|
sessionHref: props.onSessionHref,
|
|
}
|
|
},
|
|
})
|