data.tsx 1.6 KB

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