data.tsx 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import type { Message, Session, Part, SnapshotFileDiff, SessionStatus, Provider } from "@opencode-ai/sdk/v2"
  2. import { createSimpleContext } from "./helper"
  3. import { PreloadMultiFileDiffResult } from "@pierre/diffs/ssr"
  4. export type NormalizedProviderListResponse = {
  5. all: Map<string, Provider>
  6. default: {
  7. [key: string]: string
  8. }
  9. connected: Array<string>
  10. }
  11. type Data = {
  12. agent?: {
  13. name: string
  14. color?: string
  15. }[]
  16. provider?: NormalizedProviderListResponse
  17. session: Session[]
  18. session_status: {
  19. [sessionID: string]: SessionStatus
  20. }
  21. session_diff: {
  22. [sessionID: string]: SnapshotFileDiff[]
  23. }
  24. session_diff_preload?: {
  25. [sessionID: string]: PreloadMultiFileDiffResult<any>[]
  26. }
  27. message: {
  28. [sessionID: string]: Message[]
  29. }
  30. part: {
  31. [messageID: string]: Part[]
  32. }
  33. part_text_accum_delta?: {
  34. [partID: string]: string
  35. }
  36. }
  37. export type NavigateToSessionFn = (sessionID: string) => void
  38. export type SessionHrefFn = (sessionID: string) => string
  39. export const { use: useData, provider: DataProvider } = createSimpleContext({
  40. name: "Data",
  41. init: (props: {
  42. data: Data
  43. directory: string
  44. onNavigateToSession?: NavigateToSessionFn
  45. onSessionHref?: SessionHrefFn
  46. }) => {
  47. return {
  48. get store() {
  49. return props.data
  50. },
  51. get directory() {
  52. return props.directory
  53. },
  54. navigateToSession: props.onNavigateToSession,
  55. sessionHref: props.onSessionHref,
  56. }
  57. },
  58. })